Author: markt
Date: Fri Feb 17 23:18:36 2012
New Revision: 1245804

URL: http://svn.apache.org/viewvc?rev=1245804&view=rev
Log:
Implement fragmentation support. Unfragmented messages still work
correctly. Still trying to figure out how to test fragmented messages.

Modified:
    tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java

Modified: tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java?rev=1245804&r1=1245803&r2=1245804&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java Fri Feb 
17 23:18:36 2012
@@ -24,7 +24,7 @@ import org.apache.coyote.http11.upgrade.
 public class WsInputStream extends java.io.InputStream {
 
     private UpgradeProcessor<?> processor;
-    private final WsFrameHeader wsFrameHeader;
+    private WsFrameHeader wsFrameHeader;
     private long payloadLength = -1;
     private byte[] mask = new byte[4];
 
@@ -35,6 +35,19 @@ public class WsInputStream extends java.
     public WsInputStream(UpgradeProcessor<?> processor) throws IOException {
         this.processor = processor;
 
+        processFrameHeader();
+    }
+
+
+    private void processFrameHeader() throws IOException {
+
+        // TODO: Per frame extension handling is not currently supported.
+
+        // TODO: Handle other control frames.
+
+        // TODO: Handle control frames appearing in the middle of a multi-frame
+        //       message
+
         int i = processor.read();
         this.wsFrameHeader = new WsFrameHeader(i);
 
@@ -58,17 +71,6 @@ public class WsInputStream extends java.
         remaining = payloadLength;
 
         processor.read(mask);
-
-
-        // TODO: Doesn't currently handle multi-frame messages. That will need
-        //       some refactoring.
-
-        // TODO: Per frame extension handling is not currently supported.
-
-        // TODO: Handle other control frames.
-
-        // TODO: Handle control frames appearing in the middle of a multi-frame
-        //       message
     }
 
     public WsFrameHeader getFrameHeader() {
@@ -80,6 +82,16 @@ public class WsInputStream extends java.
 
     @Override
     public int read() throws IOException {
+        while (remaining == 0 && !getFrameHeader().getFin()) {
+            // Need more data - process next frame
+            processFrameHeader();
+
+            if (getFrameHeader().getOpCode() != Constants.OPCODE_CONTINUATION) 
{
+                // TODO i18n
+                throw new IOException("Not a continuation frame");
+            }
+        }
+
         if (remaining == 0) {
             return -1;
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to