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: [email protected]
For additional commands, e-mail: [email protected]