changeset 85:b384db76c28a

a little progress...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 03 Aug 2011 07:39:43 +0900
parents 704e01d2390c
children b7225991184b
files src/myVncProxy/MyRfbProto.java
diffstat 1 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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<byte[]> outs = new LinkedList<byte[]>();
 								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) {
 					/**