# HG changeset patch # User Shinji KONO # Date 1312324783 -32400 # Node ID b384db76c28a25d703227e90108ba382255430a7 # Parent 704e01d2390c18e265e34f124755fe5e50069293 a little progress... diff -r 704e01d2390c -r b384db76c28a src/myVncProxy/MyRfbProto.java --- a/src/myVncProxy/MyRfbProto.java Wed Aug 03 06:44:59 2011 +0900 +++ b/src/myVncProxy/MyRfbProto.java Wed Aug 03 07:39:43 2011 +0900 @@ -562,17 +562,20 @@ byte[] b = bufs.poll(); if (b[0]==RfbProto.FramebufferUpdate) { int encoding = u32(b,12); - int clen = u32(bufs.poll(),0); if (encoding==RfbProto.EncodingZlib||encoding==RfbProto.EncodingZRLE) { + int clen = u32(bufs.poll(),0); LinkedList outs = new LinkedList(); int len = 0, count = 0; int len2=0; - int bufSize = bufs.size(); - int bufCount = 0; - for( byte[] b1 : bufs) { - if (++bufCount > bufSize) + //int bufSize = bufs.size(); + //int bufCount = 0; + deflater.reset(); + do { + byte[] b1 = bufs.poll(); + if (bufs.size()==0) { deflater.setInput(b1,0,clen); - else + deflater.finish(); + } else deflater.setInput(b1); int len1=0; do { @@ -585,7 +588,7 @@ len += len1; } } while (len1 > 0); - } + } while(bufs.size()>0); byte[] blen = castIntByte(len); outs.addFirst(blen); outs.addFirst(b); @@ -600,6 +603,7 @@ } else { os.write(b, 0, b.length); } + os.flush(); } } catch (IOException e) { /**