# HG changeset patch # User Shinji KONO # Date 1312423570 -32400 # Node ID d1dc2bb0200de19a4a785cfe7ee03d8b2457085e # Parent 2ce6077bdb099ace74e862d8a1f8351d07f9e15e server side recompression. slightly better... diff -r 2ce6077bdb09 -r d1dc2bb0200d src/myVncProxy/MyRfbProto.java --- a/src/myVncProxy/MyRfbProto.java Thu Aug 04 10:51:29 2011 +0900 +++ b/src/myVncProxy/MyRfbProto.java Thu Aug 04 11:06:10 2011 +0900 @@ -50,6 +50,7 @@ private int rectH; private int encoding; private int zLen; + private boolean clicomp; private ServerSocket servSock; private int acceptPort; @@ -609,7 +610,16 @@ readFully(inputData.array(),0,inputData.capacity()); inputData.limit(dataLen-20); LinkedListinputs = new LinkedList(); inputs.add(inputData); - unzip(inflater, inputs, 0, bufs); + if (clicomp) { + unzip(inflater, inputs, 0, bufs); + } else { + Deflater nDeflater = new Deflater(); + LinkedList out = new LinkedList(); + unzip(inflater, inputs, 0 , out); + int len2 = zip(nDeflater, out, 0, bufs); + ByteBuffer blen = ByteBuffer.allocate(4); blen.putInt(len2); blen.flip(); + bufs.addFirst(blen); + } bufs.addFirst(header); multicastqueue.put(bufs); is.reset(); @@ -657,6 +667,8 @@ } }; Runnable sender = new Runnable() { + + public void run() { Deflater deflater = new Deflater(); @@ -681,13 +693,20 @@ System.out.println("client "+ clients); int encoding = header.getInt(12); if (encoding==RfbProto.EncodingZlib||encoding==RfbProto.EncodingZRLE) { - LinkedList outs = new LinkedList(); - int len2 = zip(deflater, bufs, inputIndex, outs); - ByteBuffer blen = ByteBuffer.allocate(4); blen.putInt(len2); blen.flip(); - outs.addFirst(blen); - outs.addFirst(header); - while(!outs.isEmpty()) { - ByteBuffer out= outs.poll(); + LinkedList outs; + if (clicomp) { + outs = new LinkedList(); + int len2 = zip(deflater, bufs, inputIndex, outs); + ByteBuffer blen = ByteBuffer.allocate(4); blen.putInt(len2); blen.flip(); + outs.addFirst(blen); + outs.addFirst(header); + inputIndex = 0; + } else { + outs = bufs; + inputIndex = 0; + } + while(inputIndex < outs.size()) { + ByteBuffer out= outs.get(inputIndex++); os.write(out.array(),out.position(),out.limit()); } }