You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by vi...@apache.org on 2014/09/17 14:44:10 UTC

svn commit: r1625562 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/tomcat/websocket/PerMessageDeflate.java

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org