# HG changeset patch # User Shinji KONO # Date 1581915411 -32400 # Node ID 57b36ded763d11b3b71d81983d01beda85c46e52 # Parent 62a86ceb89d58595ecd0ac1c743c4c269fa59348 fix limit extension in flushMulticast diff -r 62a86ceb89d5 -r 57b36ded763d src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java --- 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 bufs = new LinkedList(); 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); }