Author: violetagg Date: Wed Sep 17 12:44:09 2014 New Revision: 1625562 URL: http://svn.apache.org/r1625562 Log: Merged revision 1619742 from tomcat/trunk: WebSocket permessage-deflate. Implement no_context_takeover parameters.
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1619742 Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java?rev=1625562&r1=1625561&r2=1625562&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/PerMessageDeflate.java Wed Sep 17 12:44:09 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