From 037f33d3bd269fa923238bb4cd42999a7732e05a Mon Sep 17 00:00:00 2001 From: Vikas Kannurpatti Jayaram Date: Mon, 3 Sep 2012 13:02:22 +1000 Subject: [PATCH 1/3] Update src/org/java_websocket/drafts/Draft_17.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extended client functionality to support subprotocol and origin as per RFC6455 specification for better security.  --- src/org/java_websocket/drafts/Draft_17.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/org/java_websocket/drafts/Draft_17.java b/src/org/java_websocket/drafts/Draft_17.java index 65d7444b2..dffcc5207 100644 --- a/src/org/java_websocket/drafts/Draft_17.java +++ b/src/org/java_websocket/drafts/Draft_17.java @@ -5,6 +5,14 @@ import org.java_websocket.handshake.ClientHandshakeBuilder; public class Draft_17 extends Draft_10 { + private String subProtocol; + private String origin; + + public Draft_17() {} + public Draft_17(String subProtocol, String origin) { + this.subProtocol = subProtocol; + this.origin = origin; + } @Override public HandshakeState acceptHandshakeAsServer( ClientHandshake handshakedata ) throws InvalidHandshakeException { int v = readVersion( handshakedata ); @@ -16,6 +24,8 @@ public HandshakeState acceptHandshakeAsServer( ClientHandshake handshakedata ) t @Override public ClientHandshakeBuilder postProcessHandshakeRequestAsClient( ClientHandshakeBuilder request ) { super.postProcessHandshakeRequestAsClient( request ); + request.put("Sec-WebSocket-Protocol", subProtocol); + request.put("Origin", origin); request.put( "Sec-WebSocket-Version", "13" );// overwriting the previous return request; } From 263240b6f688a7aa6032e0deecda1fa12201d098 Mon Sep 17 00:00:00 2001 From: Vikas Kannurpatti Jayaram Date: Mon, 3 Sep 2012 13:21:57 +1000 Subject: [PATCH 2/3] Update src/org/java_websocket/drafts/Draft_17.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Accepts the previous version of Draft_17 and the new Draft_17  which accepts subprotocol and origin. --- src/org/java_websocket/drafts/Draft_17.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/org/java_websocket/drafts/Draft_17.java b/src/org/java_websocket/drafts/Draft_17.java index dffcc5207..8cfc5bdeb 100644 --- a/src/org/java_websocket/drafts/Draft_17.java +++ b/src/org/java_websocket/drafts/Draft_17.java @@ -8,7 +8,10 @@ public class Draft_17 extends Draft_10 { private String subProtocol; private String origin; - public Draft_17() {} + public Draft_17() { + this.subProtocol = null; + this.origin = null; + } public Draft_17(String subProtocol, String origin) { this.subProtocol = subProtocol; this.origin = origin; @@ -24,8 +27,12 @@ public HandshakeState acceptHandshakeAsServer( ClientHandshake handshakedata ) t @Override public ClientHandshakeBuilder postProcessHandshakeRequestAsClient( ClientHandshakeBuilder request ) { super.postProcessHandshakeRequestAsClient( request ); - request.put("Sec-WebSocket-Protocol", subProtocol); - request.put("Origin", origin); + if(subProtocol != null) { + request.put("Sec-WebSocket-Protocol", subProtocol); + } + if(origin != null) { + request.put("Origin", origin); + } request.put( "Sec-WebSocket-Version", "13" );// overwriting the previous return request; } From c6f2d07e2d15cdcaa7d9d9856ab7b9d7cd61e66e Mon Sep 17 00:00:00 2001 From: Vikas Kannurpatti Jayaram Date: Mon, 3 Sep 2012 13:27:08 +1000 Subject: [PATCH 3/3] Update example/ExampleClient.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Need to setup server to accept subprotocol and/or origin. This is updated only for the client to connect to a websocket server which supports  subprotocol and origin. --- example/ExampleClient.java | 1 + 1 file changed, 1 insertion(+) diff --git a/example/ExampleClient.java b/example/ExampleClient.java index 3c343423c..a5be56642 100644 --- a/example/ExampleClient.java +++ b/example/ExampleClient.java @@ -34,6 +34,7 @@ public void onError( Exception ex ) { public static void main( String[] args ) throws URISyntaxException { ExampleClient c = new ExampleClient( new URI( "ws://localhost:8887" ), new Draft_10() ); +// ExampleCLient c = new ExampleClient( new URI("ws://localhost:8887"), new Draft_17("subprotocol", "origin")); c.connect(); }