Author: markt Date: Fri Aug 22 11:12:03 2014 New Revision: 1619742 URL: http://svn.apache.org/r1619742 Log: WebSocket permessage-deflate. Implement no_context_takeover parameters.
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java?rev=1619742&r1=1619741&r2=1619742&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Fri Aug 22 11:12:03 2014 @@ -55,7 +55,6 @@ public class PerMessageDeflate implement private volatile Transformation next; private volatile boolean skipDecompression = false; private volatile ByteBuffer writeBuffer = ByteBuffer.allocate(Constants.DEFAULT_BUFFER_SIZE); - private volatile boolean deflaterResetRequired = true; private volatile boolean firstCompressedFrameWritten = false; private volatile byte[] EOM_BUFFER = new byte[EOM_BYTES.length + 1]; @@ -212,6 +211,9 @@ public class PerMessageDeflate implement } } } else if (written == 0) { + if (fin && !serverContextTakeover) { + inflater.reset(); + } return TransformationResult.END_OF_FRAME; } } @@ -310,13 +312,6 @@ public class PerMessageDeflate implement SendHandler uncompressedIntermediateHandler = uncompressedPart.getIntermediateHandler(); - // Need to reset the deflater at the start of every message - if (deflaterResetRequired) { - deflater.reset(); - deflaterResetRequired = false; - firstCompressedFrameWritten = false; - } - deflater.setInput(uncompressedPayload.array(), uncompressedPayload.arrayOffset() + uncompressedPayload.position(), uncompressedPayload.remaining()); @@ -359,8 +354,8 @@ public class PerMessageDeflate implement compressedPart = new MessagePart(true, getRsv(uncompressedPart), opCode, compressedPayload, uncompressedIntermediateHandler, uncompressedIntermediateHandler); - deflaterResetRequired = true; deflateRequired = false; + startNewMessage(); } else if (full && !needsInput) { // Write buffer full and input message not fully read. // Output and start new compressed part. @@ -389,8 +384,8 @@ public class PerMessageDeflate implement compressedPart = new MessagePart(true, getRsv(uncompressedPart), opCode, compressedPayload, uncompressedIntermediateHandler, uncompressedIntermediateHandler); - deflaterResetRequired = true; deflateRequired = false; + startNewMessage(); } else { // More data to write // Copy bytes to new write buffer @@ -426,6 +421,13 @@ public class PerMessageDeflate implement } + private void startNewMessage() { + firstCompressedFrameWritten = false; + if (!clientContextTakeover) { + deflater.reset(); + } + } + private int getRsv(MessagePart uncompressedMessagePart) { int result = uncompressedMessagePart.getRsv(); if (!firstCompressedFrameWritten) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org