From af3297a005b9bb45ce506fba6b827810299e01dc Mon Sep 17 00:00:00 2001 From: Daniel Tre Date: Sun, 1 Nov 2015 23:46:50 -0200 Subject: [PATCH 1/6] WebSocketServer: Opens socket in random port If socket's address is null on constructor, this socket will be bound to an available local address on any free port. --- .../java/org/java_websocket/server/WebSocketServer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 12cea2f1d..9094af9cf 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -133,7 +133,7 @@ public WebSocketServer( InetSocketAddress address , int decodercount , ListDraft version draft. * * @param address - * The address (host:port) this server should listen on. + * The address (host:port) this server should listen on. If null, this socket will be bound to an available local address on any free port. * @param decodercount * The number of {@link WebSocketWorker}s that will be used to process the incoming network data. By default this will be Runtime.getRuntime().availableProcessors() * @param drafts @@ -149,8 +149,8 @@ public WebSocketServer( InetSocketAddress address , int decodercount , List more about drafts */ public WebSocketServer( InetSocketAddress address , int decodercount , List drafts , Collection connectionscontainer ) { - if( address == null || decodercount < 1 || connectionscontainer == null ) { - throw new IllegalArgumentException( "address and connectionscontainer must not be null and you need at least 1 decoder" ); + if( decodercount < 1 || connectionscontainer == null ) { + throw new IllegalArgumentException( "connectionscontainer must not be null and you need at least 1 decoder" ); } if( drafts == null ) From 88dc667376fa48aec213e7c65db4075abc816380 Mon Sep 17 00:00:00 2001 From: Daniel Tre Date: Mon, 2 Nov 2015 00:26:42 -0200 Subject: [PATCH 2/6] Fix get address and log port on socket bind --- src/main/java/org/java_websocket/server/WebSocketServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 9094af9cf..648b07392 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -248,6 +248,7 @@ public InetSocketAddress getAddress() { * @return The port number. */ public int getPort() { + if (getAddress() == null) return 0; int port = getAddress().getPort(); if( port == 0 && server != null ) { port = server.socket().getLocalPort(); @@ -276,6 +277,7 @@ public void run() { ServerSocket socket = server.socket(); socket.setReceiveBufferSize( WebSocketImpl.RCVBUF ); socket.bind( address ); + System.out.println( "Socket Port: " + socket.getLocalPort()); selector = Selector.open(); server.register( selector, server.validOps() ); } catch ( IOException ex ) { From 960d6d08f78f5233b40a56ac6c0a06dce4f7a22f Mon Sep 17 00:00:00 2001 From: Daniel Tre Date: Mon, 2 Nov 2015 00:48:07 -0200 Subject: [PATCH 3/6] Revert "WebSocketServer: Opens socket in random port" This reverts commit af3297a005b9bb45ce506fba6b827810299e01dc. --- .../java/org/java_websocket/server/WebSocketServer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 648b07392..485c8a465 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -133,7 +133,7 @@ public WebSocketServer( InetSocketAddress address , int decodercount , ListDraft version draft. * * @param address - * The address (host:port) this server should listen on. If null, this socket will be bound to an available local address on any free port. + * The address (host:port) this server should listen on. * @param decodercount * The number of {@link WebSocketWorker}s that will be used to process the incoming network data. By default this will be Runtime.getRuntime().availableProcessors() * @param drafts @@ -149,8 +149,8 @@ public WebSocketServer( InetSocketAddress address , int decodercount , List more about drafts */ public WebSocketServer( InetSocketAddress address , int decodercount , List drafts , Collection connectionscontainer ) { - if( decodercount < 1 || connectionscontainer == null ) { - throw new IllegalArgumentException( "connectionscontainer must not be null and you need at least 1 decoder" ); + if( address == null || decodercount < 1 || connectionscontainer == null ) { + throw new IllegalArgumentException( "address and connectionscontainer must not be null and you need at least 1 decoder" ); } if( drafts == null ) From eace23c5fe3cc3fb552f4af1932e1e84ba7aea99 Mon Sep 17 00:00:00 2001 From: Daniel Tre Date: Mon, 2 Nov 2015 00:50:26 -0200 Subject: [PATCH 4/6] Revert "Fix get address and log port on socket bind" This reverts commit 88dc667376fa48aec213e7c65db4075abc816380. --- src/main/java/org/java_websocket/server/WebSocketServer.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 485c8a465..12cea2f1d 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -248,7 +248,6 @@ public InetSocketAddress getAddress() { * @return The port number. */ public int getPort() { - if (getAddress() == null) return 0; int port = getAddress().getPort(); if( port == 0 && server != null ) { port = server.socket().getLocalPort(); @@ -277,7 +276,6 @@ public void run() { ServerSocket socket = server.socket(); socket.setReceiveBufferSize( WebSocketImpl.RCVBUF ); socket.bind( address ); - System.out.println( "Socket Port: " + socket.getLocalPort()); selector = Selector.open(); server.register( selector, server.validOps() ); } catch ( IOException ex ) { From daf54ea6d7cf58f5f8bdc6ee329388943501ed66 Mon Sep 17 00:00:00 2001 From: Daniel Tre Date: Mon, 2 Nov 2015 14:18:24 -0200 Subject: [PATCH 5/6] Create hook onServerSocketBind --- .../java/org/java_websocket/server/WebSocketServer.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 12cea2f1d..5bab65e24 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -276,6 +276,7 @@ public void run() { ServerSocket socket = server.socket(); socket.setReceiveBufferSize( WebSocketImpl.RCVBUF ); socket.bind( address ); + onServerSocketBind(); selector = Selector.open(); server.register( selector, server.validOps() ); } catch ( IOException ex ) { @@ -730,4 +731,11 @@ public interface WebSocketServerFactory extends WebSocketFactory { */ public ByteChannel wrapChannel( SocketChannel channel, SelectionKey key ) throws IOException; } + + /** + * Called when server socket is bound + **/ + protected void onServerSocketBind() { + return; + } } From 11a69bc8faafc5f94993e9a2e5df15f33cb36773 Mon Sep 17 00:00:00 2001 From: Daniel Tre Date: Mon, 2 Nov 2015 14:49:25 -0200 Subject: [PATCH 6/6] Create method getServerSocket in WebSocketServer --- src/main/java/org/java_websocket/server/WebSocketServer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/java_websocket/server/WebSocketServer.java b/src/main/java/org/java_websocket/server/WebSocketServer.java index 5bab65e24..eef0f496d 100644 --- a/src/main/java/org/java_websocket/server/WebSocketServer.java +++ b/src/main/java/org/java_websocket/server/WebSocketServer.java @@ -738,4 +738,8 @@ public interface WebSocketServerFactory extends WebSocketFactory { protected void onServerSocketBind() { return; } + + protected ServerSocket getServerSocket() { + return server.socket(); + } }