From 373a2946be52db08b2028830fcff4c844947703e Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Fri, 4 Nov 2011 09:40:32 -0700 Subject: [PATCH 1/2] Bug 362853 - Promoting all Websocket STRICT blocks to standard behavior --- .../websocket/WebSocketConnectionD13.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java index fd0ba54eafd..3afee3488ff 100644 --- a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java +++ b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java @@ -43,7 +43,6 @@ import org.eclipse.jetty.websocket.WebSocket.OnTextMessage; public class WebSocketConnectionD13 extends AbstractConnection implements WebSocketConnection { private static final Logger LOG = Log.getLogger(WebSocketConnectionD13.class); - private static final boolean STRICT=Boolean.getBoolean("org.eclipse.jetty.websocket.STRICT"); private static final boolean BRUTAL=Boolean.getBoolean("org.eclipse.jetty.websocket.BRUTAL"); final static byte OP_CONTINUATION = 0x00; @@ -645,24 +644,23 @@ public class WebSocketConnectionD13 extends AbstractConnection implements WebSoc { byte[] array=buffer.array(); - if (STRICT) + if (isControlFrame(opcode) && buffer.length()>MAX_CONTROL_FRAME_PAYLOAD) { - if (isControlFrame(opcode) && buffer.length()>MAX_CONTROL_FRAME_PAYLOAD) - { - errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"Control frame too large: " + buffer.length() + " > " + MAX_CONTROL_FRAME_PAYLOAD); - return; - } + errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"Control frame too large: " + buffer.length() + " > " + MAX_CONTROL_FRAME_PAYLOAD); + return; + } - // TODO: check extensions for RSV bit(s) meanings - if ((flags&0x7)!=0) - { - errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"RSV bits set 0x"+Integer.toHexString(flags)); - return; - } + // TODO: check extensions for RSV bit(s) meanings + if ((flags&0x7)!=0) + { + errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"RSV bits set 0x"+Integer.toHexString(flags)); + return; + } - // Ignore all frames after error close - if (_closeCode!=0 && _closeCode!=CLOSE_NORMAL && opcode!=OP_CLOSE) - return; + // Ignore all frames after error close + if (_closeCode!=0 && _closeCode!=CLOSE_NORMAL && opcode!=OP_CLOSE) + { + return; } // Deliver frame if websocket is a FrameWebSocket @@ -786,7 +784,7 @@ public class WebSocketConnectionD13 extends AbstractConnection implements WebSoc case WebSocketConnectionD13.OP_TEXT: { - if (STRICT && _opcode!=-1) + if (_opcode!=-1) { errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"Expected Continuation"+Integer.toHexString(opcode)); return; @@ -827,7 +825,7 @@ public class WebSocketConnectionD13 extends AbstractConnection implements WebSoc case WebSocketConnectionD13.OP_BINARY: { - if (STRICT && _opcode!=-1) + if (_opcode!=-1) { errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"Expected Continuation"+Integer.toHexString(opcode)); return; @@ -857,8 +855,7 @@ public class WebSocketConnectionD13 extends AbstractConnection implements WebSoc } default: - if (STRICT) - errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"Bad opcode 0x"+Integer.toHexString(opcode)); + errorClose(WebSocketConnectionD13.CLOSE_PROTOCOL,"Bad opcode 0x"+Integer.toHexString(opcode)); return; } } From 2cff05c53182935675d39e769ea4e2ace533d1e1 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Fri, 4 Nov 2011 11:27:50 -0700 Subject: [PATCH 2/2] Bug 362853 - Promoting all Websocket STRICT blocks to standard behavior + Removing BRUTAL flag, and promoting its logic to standard behavior. --- .../websocket/WebSocketConnectionD13.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java index 3afee3488ff..6d4fa18b143 100644 --- a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java +++ b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionD13.java @@ -43,7 +43,6 @@ import org.eclipse.jetty.websocket.WebSocket.OnTextMessage; public class WebSocketConnectionD13 extends AbstractConnection implements WebSocketConnection { private static final Logger LOG = Log.getLogger(WebSocketConnectionD13.class); - private static final boolean BRUTAL=Boolean.getBoolean("org.eclipse.jetty.websocket.BRUTAL"); final static byte OP_CONTINUATION = 0x00; final static byte OP_TEXT = 0x01; @@ -880,17 +879,16 @@ public class WebSocketConnectionD13 extends AbstractConnection implements WebSoc private void errorClose(int code, String message) { _connection.close(code,message); - if (BRUTAL) + + // Brutally drop the connection + try { - try - { - _endp.close(); - } - catch (IOException e) - { - LOG.warn(e.toString()); - LOG.debug(e); - } + _endp.close(); + } + catch (IOException e) + { + LOG.warn(e.toString()); + LOG.debug(e); } }