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