You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/05/30 20:49:16 UTC

wicket git commit: WICKET-6385 Allow using custom port for web socket connections

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 <mg...@apache.org>
Authored: Tue May 30 22:46:17 2017 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
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);
+		}
 	}
 }