changeset 602:57b36ded763d

fix limit extension in flushMulticast
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 17 Feb 2020 13:56:51 +0900
parents 62a86ceb89d5
children 1ea1ad54224b
files src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java
diffstat 1 files changed, 11 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java	Mon Feb 17 11:52:50 2020 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java	Mon Feb 17 13:56:51 2020 +0900
@@ -27,12 +27,10 @@
 import com.glavsoft.drawing.Renderer;
 import com.glavsoft.exceptions.TransportException;
 import com.glavsoft.rfb.encoding.EncodingType;
-import com.glavsoft.rfb.protocol.ReceiverTask;
 import com.glavsoft.transport.Reader;
 import jp.ac.u_ryukyu.treevnc.CheckDelay;
 import jp.ac.u_ryukyu.treevnc.TreeRFBProto;
 
-import java.awt.*;
 import java.io.UnsupportedEncodingException;
 import java.nio.ByteBuffer;
 import java.util.LinkedList;
@@ -166,10 +164,10 @@
 					int bytesRead = (int)deflater.getBytesRead();
 					prevoffset = flushOffset+bytesRead;
 					assert(prevoffset==offset);
-					System.out.println("od prevOffset = "+prevoffset+" span = "+(prevoffset-flushOffset)+ " " + c1rect);
+					// System.out.println("od prevOffset = "+prevoffset+" span = "+(prevoffset-flushOffset)+ " " + c1rect);
 					if (c0rect!=null) { // finish pahse 1
 						flushRectangle(c0rect,prevC1LineOffset);
-						moveNext();
+						makeHeaderSpace();
 						c0rect = null;
 					}
 					flushRectangle(c1rect,c1.position()); // phase 2
@@ -190,11 +188,11 @@
 			} while (! deflater.needsInput());
 			prevoffset = offset;
 			if (last) {
-				System.out.println("last prevOffset = "+prevoffset+" span = "+(prevoffset-flushOffset)+ " " + c1rect);
+				// System.out.println("last prevOffset = "+prevoffset+" span = "+(prevoffset-flushOffset)+ " " + c1rect);
 				flushDeflator(false," last");
 				if (c0rect!=null) {
 					flushRectangle(c0rect,prevC1LineOffset);
-					moveNext();
+					makeHeaderSpace();
 					c0rect = null;
 				}
 				flushRectangle(c1rect,c1.position());
@@ -236,7 +234,7 @@
 			}
 		}
 
-		public void moveNext() {
+		public void makeHeaderSpace() {
 			// previous rectangle is finished, make next header space and copy already compressed part
 			System.arraycopy(c1.array(),prevC1LineOffset,c1.array(),prevC1LineOffset+16,c1.position()-prevC1LineOffset);
 			c1.position(c1.position()+16);
@@ -244,8 +242,8 @@
 		}
 
 		private boolean flushDeflator(boolean extend,String what) throws TransportException {
-			System.out.println("\nflusing "+what+c1);
-			if (extend) c1.limit(c1.limit() + MARGIN-16);
+			// System.out.println("flusing "+what+c1);
+			if (extend) c1.limit(c1.capacity()-16);
 			deflater.deflate(c1, Deflater.FULL_FLUSH);
 			if (c1.remaining()==0) {
 				if (!extend) {
@@ -259,11 +257,6 @@
 			return false;
 		}
 
-		private void bufdump(byte[] bytes,int beigin, int end) {
-			ReceiverTask.dump("in  ",bytes,beigin,8); ReceiverTask.dump("... ",bytes,end,8);
-			System.out.println();
-		}
-
 		/**
 		 * fix rectangle header
 		 * create next rectangle header
@@ -287,7 +280,7 @@
 			deflater.reset();
 			LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>();
 			bufs.add(c1);
-			//rfb.getContext().checkFrameBufferRectanble(c1, bytes, flushOffset, prevoffset);
+			// rfb.getContext().checkFrameBufferRectanble(c1, bytes, flushOffset, prevoffset);
 			flushOffset = prevoffset;
 			if (rfb.isTreeManager() && rfb.connectionPresenter.isUseMulticast()) {
 				for (ByteBuffer buf : bufs)
@@ -341,7 +334,7 @@
 			tileloop.zrleeBlocking(rfbProto, header, rect, bytes);
 		}
 		try {
-			System.out.print(decoding);
+			// System.out.print(decoding);
 			for (int tileY = rect.y; tileY < maxY; tileY += MAX_TILE_SIZE) {
 				int tileHeight = Math.min(maxY - tileY, MAX_TILE_SIZE);
 				if (tileloop.blocking) {
@@ -352,7 +345,7 @@
 					int tileWidth = Math.min(maxX - tileX, MAX_TILE_SIZE);
 					int subencoding = bytes[offset++] & 0x0ff;
 					if (subencoding != 0) {
-						System.out.println("----------------" + subencoding);
+						// System.out.println("----------------" + subencoding);
 						throw new TransportException("Bad subencoding",null);
 					}
 					// 128 -plain RLE, 130-255 - Palette RLE
@@ -371,7 +364,7 @@
 					} else {
 						if (0 == paletteSize) { // subencoding == 0 (or paletteSize == 0) - raw CPIXEL data
 							offset += decodeRaw(bytes, offset, renderer, tileX, tileY, tileWidth, tileHeight);
-//						System.out.println("offset:"+offset);
+						    // System.out.println("offset:"+offset);
 						} else {
 							offset += decodePacked(bytes, offset, renderer, paletteSize, tileX, tileY, tileWidth, tileHeight);
 						}