From 812a79fd526e6d7319371af46a9006520015f1b2 Mon Sep 17 00:00:00 2001 From: vibul Date: Thu, 15 Dec 2011 16:09:09 +1100 Subject: [PATCH] Use websocket wire protocol version rather than specification version --- .../websocketx/autobahn/WebSocketServer.java | 14 +- .../autobahn/WebSocketServerHandler.java | 5 +- .../websocketx/autobahn/package-info.java | 2 +- .../example/http/websocketx/client/App.java | 18 +- .../websocketx/client/WebSocketCallback.java | 61 +- .../websocketx/client/WebSocketClient.java | 50 +- .../client/WebSocketClientFactory.java | 81 +-- .../client/WebSocketClientHandler.java | 137 ++--- .../websocketx/client/WebSocketException.java | 16 +- .../client/WebSocketHttpResponseDecoder.java | 42 +- .../websocketx/server/WebSocketServer.java | 14 +- .../server/WebSocketServerIndexPage.java | 103 ++-- .../sslserver/WebSocketSslServer.java | 16 +- .../WebSocketSslServerIndexPage.java | 103 ++-- .../WebSocketSslServerPipelineFactory.java | 8 +- .../WebSocketSslServerSslContext.java | 5 +- .../http/websocketx/BinaryWebSocketFrame.java | 70 ++- .../http/websocketx/CloseWebSocketFrame.java | 44 +- .../ContinuationWebSocketFrame.java | 206 ++++--- .../http/websocketx/PingWebSocketFrame.java | 70 +-- .../http/websocketx/PongWebSocketFrame.java | 68 +-- .../http/websocketx/TextWebSocketFrame.java | 178 +++--- .../codec/http/websocketx/UTF8Exception.java | 8 +- .../codec/http/websocketx/UTF8Output.java | 80 +-- .../websocketx/WebSocket00FrameDecoder.java | 172 +++--- .../websocketx/WebSocket00FrameEncoder.java | 121 ++-- .../websocketx/WebSocket08FrameDecoder.java | 565 +++++++++--------- .../websocketx/WebSocket08FrameEncoder.java | 198 +++--- .../websocketx/WebSocket13FrameDecoder.java | 27 +- .../websocketx/WebSocket13FrameEncoder.java | 24 +- .../websocketx/WebSocketClientHandshaker.java | 298 ++++----- .../WebSocketClientHandshaker00.java | 348 ++++++----- .../WebSocketClientHandshaker08.java | 192 ++++++ .../WebSocketClientHandshaker10.java | 192 ------ .../WebSocketClientHandshaker13.java | 191 ++++++ .../WebSocketClientHandshaker17.java | 191 ------ .../WebSocketClientHandshakerFactory.java | 59 +- .../codec/http/websocketx/WebSocketFrame.java | 88 +-- .../http/websocketx/WebSocketFrameType.java | 2 +- .../WebSocketHandshakeException.java | 14 +- .../websocketx/WebSocketServerHandshaker.java | 268 +++++---- .../WebSocketServerHandshaker00.java | 259 ++++---- .../WebSocketServerHandshaker08.java | 166 +++++ .../WebSocketServerHandshaker10.java | 169 ------ .../WebSocketServerHandshaker13.java | 167 ++++++ .../WebSocketServerHandshaker17.java | 169 ------ .../WebSocketServerHandshakerFactory.java | 33 +- .../WebSocketSpecificationVersion.java | 51 -- .../http/websocketx/WebSocketVersion.java | 62 ++ .../codec/http/websocketx/package-info.java | 7 +- .../WebSocketServerHandshaker13Test.java | 78 +++ .../WebSocketServerHandshaker17Test.java | 77 --- 52 files changed, 2804 insertions(+), 2783 deletions(-) create mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.java delete mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker10.java create mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.java delete mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker17.java create mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.java delete mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker10.java create mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.java delete mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker17.java delete mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketSpecificationVersion.java create mode 100644 src/main/java/io/netty/handler/codec/http/websocketx/WebSocketVersion.java create mode 100644 src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13Test.java delete mode 100644 src/test/java/io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker17Test.java diff --git a/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServer.java b/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServer.java index 25251152ad..70fb04948e 100644 --- a/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServer.java +++ b/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServer.java @@ -25,8 +25,8 @@ import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.socket.nio.NioServerSocketChannelFactory; /** - * A Web Socket echo server for running the autobahn - * test suite + * A Web Socket echo server for running the autobahn test + * suite */ public class WebSocketServer { public static void main(String[] args) { @@ -34,19 +34,19 @@ public class WebSocketServer { ch.setLevel(Level.FINE); Logger.getLogger("").addHandler(ch); Logger.getLogger("").setLevel(Level.FINE); - + // Configure the server. ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); - - //bootstrap.setOption("child.tcpNoDelay", true); - + + // bootstrap.setOption("child.tcpNoDelay", true); + // Set up the event pipeline factory. bootstrap.setPipelineFactory(new WebSocketServerPipelineFactory()); // Bind and start to accept incoming connections. bootstrap.bind(new InetSocketAddress(9000)); - + System.out.println("Web Socket Server started on localhost:9000."); } } diff --git a/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java b/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java index 204679d734..f6d62eca58 100644 --- a/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java +++ b/src/main/java/io/netty/example/http/websocketx/autobahn/WebSocketServerHandler.java @@ -90,8 +90,9 @@ public class WebSocketServerHandler extends SimpleChannelUpstreamHandler { ctx.getChannel().write( new PongWebSocketFrame(frame.isFinalFragment(), frame.getRsv(), frame.getBinaryData())); } else if (frame instanceof TextWebSocketFrame) { - //String text = ((TextWebSocketFrame) frame).getText(); - ctx.getChannel().write(new TextWebSocketFrame(frame.isFinalFragment(), frame.getRsv(), frame.getBinaryData())); + // String text = ((TextWebSocketFrame) frame).getText(); + ctx.getChannel().write( + new TextWebSocketFrame(frame.isFinalFragment(), frame.getRsv(), frame.getBinaryData())); } else if (frame instanceof BinaryWebSocketFrame) { ctx.getChannel().write( new BinaryWebSocketFrame(frame.isFinalFragment(), frame.getRsv(), frame.getBinaryData())); diff --git a/src/main/java/io/netty/example/http/websocketx/autobahn/package-info.java b/src/main/java/io/netty/example/http/websocketx/autobahn/package-info.java index f78f6ae5ef..fbc2c4306c 100644 --- a/src/main/java/io/netty/example/http/websocketx/autobahn/package-info.java +++ b/src/main/java/io/netty/example/http/websocketx/autobahn/package-info.java @@ -36,7 +36,7 @@ * *

08. Go to test suite directory: cd testsuite/websockets * - *

09. Edit fuzzing_clinet_spec.json and set the version to 10 or 17. + *

09. Edit fuzzing_clinet_spec.json and set the hybi specification version to 10 or 17 (RFC 6455). * * { * "options": {"failByDrop": false}, diff --git a/src/main/java/io/netty/example/http/websocketx/client/App.java b/src/main/java/io/netty/example/http/websocketx/client/App.java index 2928923e6e..d65f0d0c95 100644 --- a/src/main/java/io/netty/example/http/websocketx/client/App.java +++ b/src/main/java/io/netty/example/http/websocketx/client/App.java @@ -28,7 +28,7 @@ import io.netty.handler.codec.http.websocketx.PingWebSocketFrame; import io.netty.handler.codec.http.websocketx.PongWebSocketFrame; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import io.netty.handler.codec.http.websocketx.WebSocketFrame; -import io.netty.handler.codec.http.websocketx.WebSocketSpecificationVersion; +import io.netty.handler.codec.http.websocketx.WebSocketVersion; /** * A HTTP client demo app @@ -55,31 +55,31 @@ public class App { MyCallbackHandler callbackHandler = new MyCallbackHandler(); WebSocketClientFactory factory = new WebSocketClientFactory(); - // Connect with spec version 17. You can change it to V10 or V00. + // Connect with RFC 6455. You can change it to V10 or V00. // If you change it to V00, ping is not supported and remember to change HttpResponseDecoder to // WebSocketHttpResponseDecoder in the pipeline. - WebSocketClient client = factory.newClient(new URI("ws://localhost:8080/websocket"), - WebSocketSpecificationVersion.V17, callbackHandler); + WebSocketClient client = factory.newClient(new URI("ws://localhost:8080/websocket"), WebSocketVersion.V13, + callbackHandler, null); // Connect - System.out.println("WebSocket Client connecting"); - client.connect().awaitUninterruptibly(); + System.out.println("WebSocket Client connecting"); + client.connect().awaitUninterruptibly(); Thread.sleep(200); // Send 10 messages and wait for responses - System.out.println("WebSocket Client sending message"); + System.out.println("WebSocket Client sending message"); for (int i = 0; i < 10; i++) { client.send(new TextWebSocketFrame("Message #" + i)); } Thread.sleep(1000); // Ping - only supported for V10 and up. - System.out.println("WebSocket Client sending ping"); + System.out.println("WebSocket Client sending ping"); client.send(new PingWebSocketFrame(ChannelBuffers.copiedBuffer(new byte[] { 1, 2, 3, 4, 5, 6 }))); Thread.sleep(1000); // Close - System.out.println("WebSocket Client sending close"); + System.out.println("WebSocket Client sending close"); client.send(new CloseWebSocketFrame()); Thread.sleep(1000); diff --git a/src/main/java/io/netty/example/http/websocketx/client/WebSocketCallback.java b/src/main/java/io/netty/example/http/websocketx/client/WebSocketCallback.java index 38de78d572..6052bd564c 100644 --- a/src/main/java/io/netty/example/http/websocketx/client/WebSocketCallback.java +++ b/src/main/java/io/netty/example/http/websocketx/client/WebSocketCallback.java @@ -24,7 +24,6 @@ package io.netty.example.http.websocketx.client; import io.netty.handler.codec.http.websocketx.WebSocketFrame; - /** * Copied from https://github.com/cgbystrom/netty-tools * @@ -32,37 +31,37 @@ import io.netty.handler.codec.http.websocketx.WebSocketFrame; */ public interface WebSocketCallback { - /** - * Called when the client is connected to the server - * - * @param client - * Current client used to connect - */ - void onConnect(WebSocketClient client); + /** + * Called when the client is connected to the server + * + * @param client + * Current client used to connect + */ + void onConnect(WebSocketClient client); - /** - * Called when the client got disconnected from the server. - * - * @param client - * Current client that was disconnected - */ - void onDisconnect(WebSocketClient client); + /** + * Called when the client got disconnected from the server. + * + * @param client + * Current client that was disconnected + */ + void onDisconnect(WebSocketClient client); - /** - * Called when a message arrives from the server. - * - * @param client - * Current client connected - * @param frame - * Data received from server - */ - void onMessage(WebSocketClient client, WebSocketFrame frame); + /** + * Called when a message arrives from the server. + * + * @param client + * Current client connected + * @param frame + * Data received from server + */ + void onMessage(WebSocketClient client, WebSocketFrame frame); - /** - * Called when an unhandled errors occurs. - * - * @param t - * The causing error - */ - void onError(Throwable t); + /** + * Called when an unhandled errors occurs. + * + * @param t + * The causing error + */ + void onError(Throwable t); } diff --git a/src/main/java/io/netty/example/http/websocketx/client/WebSocketClient.java b/src/main/java/io/netty/example/http/websocketx/client/WebSocketClient.java index e45d1173c0..727b31ccea 100644 --- a/src/main/java/io/netty/example/http/websocketx/client/WebSocketClient.java +++ b/src/main/java/io/netty/example/http/websocketx/client/WebSocketClient.java @@ -29,36 +29,26 @@ import io.netty.handler.codec.http.websocketx.WebSocketFrame; */ public interface WebSocketClient { - /** - * Connect to server Host and port is setup by the factory. - * - * @return Connect future. Fires when connected. - */ - ChannelFuture connect(); + /** + * Connect to server Host and port is setup by the factory. + * + * @return Connect future. Fires when connected. + */ + ChannelFuture connect(); - /** - * Disconnect from the server - * - * @return Disconnect future. Fires when disconnected. - */ - ChannelFuture disconnect(); + /** + * Disconnect from the server + * + * @return Disconnect future. Fires when disconnected. + */ + ChannelFuture disconnect(); - /** - * Send data to server - * - * @param frame - * Data for sending - * @return Write future. Will fire when the data is sent. - */ - ChannelFuture send(WebSocketFrame frame); - - /** - * Adds a custom header to this client request - * - * @param header - * Name of header field to add to request - * @param value - * Value of header field added to request - */ - void addCustomHeader(String header, String value); + /** + * Send data to server + * + * @param frame + * Data for sending + * @return Write future. Will fire when the data is sent. + */ + ChannelFuture send(WebSocketFrame frame); } diff --git a/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientFactory.java b/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientFactory.java index 47e758e0ee..aa2216b9ac 100644 --- a/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientFactory.java +++ b/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientFactory.java @@ -29,9 +29,10 @@ import io.netty.channel.Channels; import io.netty.channel.socket.nio.NioClientSocketChannelFactory; import io.netty.handler.codec.http.HttpRequestEncoder; import io.netty.handler.codec.http.HttpResponseDecoder; -import io.netty.handler.codec.http.websocketx.WebSocketSpecificationVersion; +import io.netty.handler.codec.http.websocketx.WebSocketVersion; import java.net.URI; +import java.util.Map; import java.util.concurrent.Executors; /** @@ -42,48 +43,50 @@ import java.util.concurrent.Executors; */ public class WebSocketClientFactory { - private final NioClientSocketChannelFactory socketChannelFactory = new NioClientSocketChannelFactory( - Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); + private final NioClientSocketChannelFactory socketChannelFactory = new NioClientSocketChannelFactory( + Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); - /** - * Create a new WebSocket client. - * - * @param url - * URL to connect to. - * @param version - * Web Socket version to support - * @param callback - * Callback interface to receive events - * @return A WebSocket client. Call {@link WebSocketClient#connect()} to connect. - */ - public WebSocketClient newClient(final URI url, - final WebSocketSpecificationVersion version, - final WebSocketCallback callback) { - ClientBootstrap bootstrap = new ClientBootstrap(socketChannelFactory); + /** + * Create a new WebSocket client. + * + * @param url + * URL to connect to. + * @param version + * Web Socket version to support + * @param callback + * Callback interface to receive events + * @param customHeaders + * custom HTTP headers to pass during the handshake + * @return A WebSocket client. Call {@link WebSocketClient#connect()} to connect. + */ + public WebSocketClient newClient(final URI url, final WebSocketVersion version, final WebSocketCallback callback, + Map customHeaders) { + ClientBootstrap bootstrap = new ClientBootstrap(socketChannelFactory); - String protocol = url.getScheme(); - if (!protocol.equals("ws") && !protocol.equals("wss")) { - throw new IllegalArgumentException("Unsupported protocol: " + protocol); - } + String protocol = url.getScheme(); + if (!protocol.equals("ws") && !protocol.equals("wss")) { + throw new IllegalArgumentException("Unsupported protocol: " + protocol); + } - final WebSocketClientHandler clientHandler = new WebSocketClientHandler(bootstrap, url, version, callback); + final WebSocketClientHandler clientHandler = new WebSocketClientHandler(bootstrap, url, version, callback, + customHeaders); - bootstrap.setPipelineFactory(new ChannelPipelineFactory() { + bootstrap.setPipelineFactory(new ChannelPipelineFactory() { - @Override - public ChannelPipeline getPipeline() throws Exception { - ChannelPipeline pipeline = Channels.pipeline(); - - // If you wish to support HyBi V00, you need to use WebSocketHttpResponseDecoder instead for - // HttpResponseDecoder. - pipeline.addLast("decoder", new HttpResponseDecoder()); - - pipeline.addLast("encoder", new HttpRequestEncoder()); - pipeline.addLast("ws-handler", clientHandler); - return pipeline; - } - }); + @Override + public ChannelPipeline getPipeline() throws Exception { + ChannelPipeline pipeline = Channels.pipeline(); - return clientHandler; - } + // If you wish to support HyBi V00, you need to use WebSocketHttpResponseDecoder instead for + // HttpResponseDecoder. + pipeline.addLast("decoder", new HttpResponseDecoder()); + + pipeline.addLast("encoder", new HttpRequestEncoder()); + pipeline.addLast("ws-handler", clientHandler); + return pipeline; + } + }); + + return clientHandler; + } } diff --git a/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java b/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java index 2aecb84326..034bfae6e7 100644 --- a/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java +++ b/src/main/java/io/netty/example/http/websocketx/client/WebSocketClientHandler.java @@ -24,7 +24,6 @@ package io.netty.example.http.websocketx.client; import java.net.InetSocketAddress; import java.net.URI; -import java.util.HashMap; import java.util.Map; import io.netty.bootstrap.ClientBootstrap; @@ -39,7 +38,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker; import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory; import io.netty.handler.codec.http.websocketx.WebSocketFrame; -import io.netty.handler.codec.http.websocketx.WebSocketSpecificationVersion; +import io.netty.handler.codec.http.websocketx.WebSocketVersion; import io.netty.util.CharsetUtil; /** @@ -50,85 +49,81 @@ import io.netty.util.CharsetUtil; */ public class WebSocketClientHandler extends SimpleChannelUpstreamHandler implements WebSocketClient { - private final ClientBootstrap bootstrap; - private URI url; - private final WebSocketCallback callback; - private Channel channel; - private WebSocketClientHandshaker handshaker = null; - private final WebSocketSpecificationVersion version; - private Map customHeaders = null; - - public WebSocketClientHandler(ClientBootstrap bootstrap, URI url, WebSocketSpecificationVersion version, WebSocketCallback callback) { - this.bootstrap = bootstrap; - this.url = url; - this.version = version; - this.callback = callback; - } + private final ClientBootstrap bootstrap; + private URI url; + private final WebSocketCallback callback; + private Channel channel; + private WebSocketClientHandshaker handshaker = null; + private final WebSocketVersion version; + private Map customHeaders = null; - @Override - public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { - channel = e.getChannel(); - this.handshaker = new WebSocketClientHandshakerFactory().newHandshaker(url, version, null, false, customHeaders); - handshaker.performOpeningHandshake(channel); - } + public WebSocketClientHandler(ClientBootstrap bootstrap, URI url, WebSocketVersion version, + WebSocketCallback callback, Map customHeaders) { + this.bootstrap = bootstrap; + this.url = url; + this.version = version; + this.callback = callback; + this.customHeaders = customHeaders; + } - @Override - public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { - callback.onDisconnect(this); - } + @Override + public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { + channel = e.getChannel(); + this.handshaker = new WebSocketClientHandshakerFactory() + .newHandshaker(url, version, null, false, customHeaders); + handshaker.performOpeningHandshake(channel); + } - @Override - public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { - if (!handshaker.isOpeningHandshakeCompleted()) { - handshaker.performClosingHandshake(ctx.getChannel(), (HttpResponse) e.getMessage()); - callback.onConnect(this); - return; - } + @Override + public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { + callback.onDisconnect(this); + } - if (e.getMessage() instanceof HttpResponse) { - HttpResponse response = (HttpResponse) e.getMessage(); - throw new WebSocketException("Unexpected HttpResponse (status=" + response.getStatus() + ", content=" - + response.getContent().toString(CharsetUtil.UTF_8) + ")"); - } + @Override + public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { + if (!handshaker.isOpeningHandshakeCompleted()) { + handshaker.performClosingHandshake(ctx.getChannel(), (HttpResponse) e.getMessage()); + callback.onConnect(this); + return; + } - WebSocketFrame frame = (WebSocketFrame) e.getMessage(); - callback.onMessage(this, frame); - } + if (e.getMessage() instanceof HttpResponse) { + HttpResponse response = (HttpResponse) e.getMessage(); + throw new WebSocketException("Unexpected HttpResponse (status=" + response.getStatus() + ", content=" + + response.getContent().toString(CharsetUtil.UTF_8) + ")"); + } - @Override - public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { - final Throwable t = e.getCause(); - callback.onError(t); - e.getChannel().close(); - } + WebSocketFrame frame = (WebSocketFrame) e.getMessage(); + callback.onMessage(this, frame); + } - @Override - public ChannelFuture connect() { - return bootstrap.connect(new InetSocketAddress(url.getHost(), url.getPort())); - } + @Override + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { + final Throwable t = e.getCause(); + callback.onError(t); + e.getChannel().close(); + } - @Override - public ChannelFuture disconnect() { - return channel.close(); - } + @Override + public ChannelFuture connect() { + return bootstrap.connect(new InetSocketAddress(url.getHost(), url.getPort())); + } - @Override - public ChannelFuture send(WebSocketFrame frame) { - return channel.write(frame); - } + @Override + public ChannelFuture disconnect() { + return channel.close(); + } - public URI getUrl() { - return url; - } + @Override + public ChannelFuture send(WebSocketFrame frame) { + return channel.write(frame); + } - public void setUrl(URI url) { - this.url = url; - } + public URI getUrl() { + return url; + } - public void addCustomHeader(String header, String value){ - if(customHeaders == null){ - customHeaders = new HashMap(); - } - customHeaders.put(header, value); - } + public void setUrl(URI url) { + this.url = url; + } } diff --git a/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java b/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java index ed227a7925..1477b4d700 100644 --- a/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java +++ b/src/main/java/io/netty/example/http/websocketx/client/WebSocketException.java @@ -30,15 +30,15 @@ import java.io.IOException; */ public class WebSocketException extends IOException { - /** + /** */ - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public WebSocketException(String s) { - super(s); - } + public WebSocketException(String s) { + super(s); + } - public WebSocketException(String s, Throwable throwable) { - super(s, throwable); - } + public WebSocketException(String s, Throwable throwable) { + super(s, throwable); + } } \ No newline at end of file diff --git a/src/main/java/io/netty/example/http/websocketx/client/WebSocketHttpResponseDecoder.java b/src/main/java/io/netty/example/http/websocketx/client/WebSocketHttpResponseDecoder.java index 434f98641f..3d7de0337d 100644 --- a/src/main/java/io/netty/example/http/websocketx/client/WebSocketHttpResponseDecoder.java +++ b/src/main/java/io/netty/example/http/websocketx/client/WebSocketHttpResponseDecoder.java @@ -25,27 +25,27 @@ import io.netty.handler.codec.http.HttpResponseDecoder; */ public class WebSocketHttpResponseDecoder extends HttpResponseDecoder { - @Override - protected boolean isContentAlwaysEmpty(HttpMessage msg) { - if (msg instanceof HttpResponse) { - HttpResponse res = (HttpResponse) msg; - int code = res.getStatus().getCode(); + @Override + protected boolean isContentAlwaysEmpty(HttpMessage msg) { + if (msg instanceof HttpResponse) { + HttpResponse res = (HttpResponse) msg; + int code = res.getStatus().getCode(); - // FIX force reading of protocol upgrade challenge data into the content buffer - if (code == 101) { - return false; - } + // FIX force reading of protocol upgrade challenge data into the content buffer + if (code == 101) { + return false; + } - if (code < 200) { - return true; - } - switch (code) { - case 204: - case 205: - case 304: - return true; - } - } - return false; - } + if (code < 200) { + return true; + } + switch (code) { + case 204: + case 205: + case 304: + return true; + } + } + return false; + } } diff --git a/src/main/java/io/netty/example/http/websocketx/server/WebSocketServer.java b/src/main/java/io/netty/example/http/websocketx/server/WebSocketServer.java index 21547883da..fba0f97305 100644 --- a/src/main/java/io/netty/example/http/websocketx/server/WebSocketServer.java +++ b/src/main/java/io/netty/example/http/websocketx/server/WebSocketServer.java @@ -29,11 +29,10 @@ import io.netty.channel.socket.nio.NioServerSocketChannelFactory; * * http://localhost:8080/websocket * - * Open your browser at http://localhost:8080/, then the demo page will be - * loaded and a Web Socket connection will be made automatically. + * Open your browser at http://localhost:8080/, then the demo page will be loaded and a Web Socket connection will be + * made automatically. * - * This server illustrates support for the different web socket specification - * versions and will work with: + * This server illustrates support for the different web socket specification versions and will work with: * *