Repository: wicket Updated Branches: refs/heads/wicket-7.x 6963c723f -> 4dc6e7eca
WICKET-6385 Allow using custom port for web socket connections (cherry picked from commit 36c3eb49174596b3a3306059049412c28369c30a) Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4dc6e7ec Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4dc6e7ec Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4dc6e7ec Branch: refs/heads/wicket-7.x Commit: 4dc6e7eca5cf4849346bbf20b59f1f5d2de6512a Parents: 6963c72 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Tue May 30 22:46:17 2017 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Tue May 30 22:48:39 2017 +0200 ---------------------------------------------------------------------- .../wicket/protocol/ws/WebSocketSettings.java | 42 +++++++++++++++++++- .../protocol/ws/api/BaseWebSocketBehavior.java | 15 +++++++ .../ws/api/res/js/wicket-websocket-jquery.js | 12 +++++- .../api/res/js/wicket-websocket-setup.js.tmpl | 2 +- .../ws/javax/app/JSR356Application.java | 10 +++++ 5 files changed, 77 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/4dc6e7ec/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java index ee0e65b..77c3222 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/WebSocketSettings.java @@ -39,7 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; -import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; /** @@ -79,6 +79,8 @@ public class WebSocketSettings private final AtomicReference<CharSequence> filterPrefix = new AtomicReference<>(); private final AtomicReference<CharSequence> contextPath = new AtomicReference<>(); private final AtomicReference<CharSequence> baseUrl = new AtomicReference<>(); + private final AtomicInteger port = new AtomicInteger(); + private final AtomicInteger securePort = new AtomicInteger(); /** * Holds this WebSocketSettings in the Application's metadata. @@ -311,6 +313,44 @@ public class WebSocketSettings } /** + * Sets the port that should be used for <code>ws:</code> connections. + * If unset then the current HTTP port will be used. + * + * @param wsPort The custom port for WS connections + */ + public void setPort(int wsPort) + { + this.port.set(wsPort); + } + + /** + * @return The custom port for WS connections + */ + public Integer getPort() + { + return port.get(); + } + + /** + * Sets the port that should be used for <code>wss:</code> connections. + * If unset then the current HTTPS port will be used. + * + * @param wssPort The custom port for WSS connections + */ + public void setSecurePort(int wssPort) + { + this.securePort.set(wssPort); + } + + /** + * @return The custom port for WSS connections + */ + public Integer getSecurePort() + { + return securePort.get(); + } + + /** * Simple executor that runs the tasks in the caller thread. */ public static class SameThreadExecutor implements Executor http://git-wip-us.apache.org/repos/asf/wicket/blob/4dc6e7ec/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java index 7d1219f..f6d1f28 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/BaseWebSocketBehavior.java @@ -100,6 +100,11 @@ public class BaseWebSocketBehavior extends Behavior Args.notNull(baseUrl, "baseUrl"); variables.put("baseUrl", baseUrl); + Integer port = getPort(webSocketSettings); + variables.put("port", port); + Integer securePort = getSecurePort(webSocketSettings); + variables.put("securePort", securePort); + CharSequence contextPath = getContextPath(webSocketSettings); Args.notNull(contextPath, "contextPath"); variables.put("contextPath", contextPath); @@ -116,6 +121,16 @@ public class BaseWebSocketBehavior extends Behavior response.render(OnDomReadyHeaderItem.forScript(webSocketSetupScript)); } + protected Integer getPort(WebSocketSettings webSocketSettings) + { + return webSocketSettings.getPort(); + } + + protected Integer getSecurePort(WebSocketSettings webSocketSettings) + { + return webSocketSettings.getSecurePort(); + } + protected CharSequence getFilterPrefix(final WebSocketSettings webSocketSettings) { return webSocketSettings.getFilterPrefix(); } http://git-wip-us.apache.org/repos/asf/wicket/blob/4dc6e7ec/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js index 57cc1ad..d8062c2 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-jquery.js @@ -50,13 +50,21 @@ var self = this, url, protocol, - WWS = Wicket.WebSocket; + WWS = Wicket.WebSocket, + port = WWS.port || document.location.port, + securePort = WWS.securePort || document.location.port, + _port; protocol = document.location.protocol .replace('https:', 'wss:') .replace('http:', 'ws:'); - url = protocol + '//' + document.location.host + WWS.contextPath + WWS.filterPrefix + '/wicket/websocket'; + if ('wss:' === protocol) { + _port = securePort ? ":" + securePort : ''; + } else { + _port = port ? ":" + port : ''; + } + url = protocol + '//' + document.location.hostname + _port + WWS.contextPath + WWS.filterPrefix + '/wicket/websocket'; if (WWS.pageId !== false) { url += '?pageId=' + encodeURIComponent(WWS.pageId); http://git-wip-us.apache.org/repos/asf/wicket/blob/4dc6e7ec/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl index 42c9693..7b7fdb7 100644 --- a/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl +++ b/wicket-native-websocket/wicket-native-websocket-core/src/main/java/org/apache/wicket/protocol/ws/api/res/js/wicket-websocket-setup.js.tmpl @@ -4,7 +4,7 @@ if (typeof(Wicket.WebSocket.appName) === "undefined") { jQuery.extend(Wicket.WebSocket, { pageId: ${pageId}, resourceName: '${resourceName}', baseUrl: '${baseUrl}', contextPath: '${contextPath}', appName: '${applicationName}', - filterPrefix: '${filterPrefix}' }); + port: ${port}, securePort: ${securePort}, filterPrefix: '${filterPrefix}'}); Wicket.WebSocket.createDefaultConnection(); } })(); http://git-wip-us.apache.org/repos/asf/wicket/blob/4dc6e7ec/wicket-native-websocket/wicket-native-websocket-javax/src/test/java/org/apache/wicket/protocol/ws/javax/app/JSR356Application.java ---------------------------------------------------------------------- diff --git a/wicket-native-websocket/wicket-native-websocket-javax/src/test/java/org/apache/wicket/protocol/ws/javax/app/JSR356Application.java b/wicket-native-websocket/wicket-native-websocket-javax/src/test/java/org/apache/wicket/protocol/ws/javax/app/JSR356Application.java index 9cef063..82e1a82 100644 --- a/wicket-native-websocket/wicket-native-websocket-javax/src/test/java/org/apache/wicket/protocol/ws/javax/app/JSR356Application.java +++ b/wicket-native-websocket/wicket-native-websocket-javax/src/test/java/org/apache/wicket/protocol/ws/javax/app/JSR356Application.java @@ -20,6 +20,7 @@ import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.https.HttpsConfig; import org.apache.wicket.protocol.https.HttpsMapper; import org.apache.wicket.protocol.ws.javax.app.charts.ChartWebSocketResource; +import org.apache.wicket.protocol.ws.WebSocketSettings; /** * Application object for your web application. If you want to run this application without deploying, run the Start class. @@ -51,5 +52,14 @@ public class JSR356Application extends WebApplication setRootRequestMapper(new HttpsMapper(getRootRequestMapper(), new HttpsConfig())); getSharedResources().add(ChartWebSocketResource.NAME, new ChartWebSocketResource()); + + if (System.getenv("OPENSHIFT_APP_NAME") != null) + { + // OpenShift uses special proxy for WebSocket connections + // https://blog.openshift.com/paas-websockets/ + final WebSocketSettings webSocketSettings = WebSocketSettings.Holder.get(this); + webSocketSettings.setPort(8000); + webSocketSettings.setSecurePort(8443); + } } }
