Author: yurize
Date: Thu Aug 30 19:46:22 2012
New Revision: 1379094
URL: http://svn.apache.org/viewvc?rev=1379094&view=rev
Log:
Makes websocket configurable in a different port and/or subdomain
(#WAVE-357). By Vicente J. Ruiz Jurado
https://reviews.apache.org/r/5375
Modified:
incubator/wave/trunk/server-config.xml
incubator/wave/trunk/server.config.example
incubator/wave/trunk/src/org/waveprotocol/box/server/CoreSettings.java
incubator/wave/trunk/src/org/waveprotocol/box/server/gxp/WaveClientPage.gxp
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
Modified: incubator/wave/trunk/server-config.xml
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/server-config.xml?rev=1379094&r1=1379093&r2=1379094&view=diff
==============================================================================
--- incubator/wave/trunk/server-config.xml (original)
+++ incubator/wave/trunk/server-config.xml Thu Aug 30 19:46:22 2012
@@ -4,6 +4,7 @@
<!-- Properties for server.config -->
<property name="wave_server_domain" value="local.net" />
<property name="http_frontend_public_address" value="localhost:9898" />
+ <property name="http_websocket_public_address"
value="${http_frontend_public_address}" />
<property name="http_frontend_addresses"
value="${http_frontend_public_address}" />
<property name="resource_bases" value="./war" />
<property name="signer_info_store_type" value="file" />
@@ -71,6 +72,8 @@
<token key="WAVE_SERVER_DOMAIN" value="${wave_server_domain}" />
<token key="HTTP_FRONTEND_PUBLIC_ADDRESS"
value="${http_frontend_public_address}" />
+ <token key="HTTP_WEBSOCKET_PUBLIC_ADDRESS"
+ value="${http_websocket_public_address}" />
<token key="HTTP_FRONTEND_ADDRESSES"
value="${http_frontend_addresses}" />
<token key="RESOURCE_BASES" value="${resource_bases}" />
Modified: incubator/wave/trunk/server.config.example
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/server.config.example?rev=1379094&r1=1379093&r2=1379094&view=diff
==============================================================================
--- incubator/wave/trunk/server.config.example (original)
+++ incubator/wave/trunk/server.config.example Thu Aug 30 19:46:22 2012
@@ -14,6 +14,12 @@ wave_server_domain = @WAVE_SERVER_DOMAIN
# Default value: localhost:9898
http_frontend_public_address = @HTTP_FRONTEND_PUBLIC_ADDRESS@
+# A optional host:port address on which to listen for websocket connections.
+# If no value is set for http_websocket_public_address it defaults to the
first address specified
+# by http_frontend_public_address.
+# Default value: localhost:9898
+http_websocket_public_address = @HTTP_WEBSOCKET_PUBLIC_ADDRESS@
+
# Default value: values passed to http_frontend_public_address.
http_frontend_addresses = @HTTP_FRONTEND_ADDRESSES@
Modified: incubator/wave/trunk/src/org/waveprotocol/box/server/CoreSettings.java
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/server/CoreSettings.java?rev=1379094&r1=1379093&r2=1379094&view=diff
==============================================================================
--- incubator/wave/trunk/src/org/waveprotocol/box/server/CoreSettings.java
(original)
+++ incubator/wave/trunk/src/org/waveprotocol/box/server/CoreSettings.java Thu
Aug 30 19:46:22 2012
@@ -28,6 +28,7 @@ import java.util.List;
public class CoreSettings {
public static final String WAVE_SERVER_DOMAIN = "wave_server_domain";
public static final String HTTP_FRONTEND_PUBLIC_ADDRESS =
"http_frontend_public_address";
+ public static final String HTTP_WEBSOCKET_PUBLIC_ADDRESS =
"http_websocket_public_address";
public static final String HTTP_FRONTEND_ADDRESSES =
"http_frontend_addresses";
public static final String RESOURCE_BASES = "resource_bases";
public static final String WAVESERVER_DISABLE_VERIFICATION =
"waveserver_disable_verification";
@@ -72,6 +73,10 @@ public class CoreSettings {
description = "The server's public address.")
private static String httpFrontEndPublicAddress;
+ @Setting(name = HTTP_WEBSOCKET_PUBLIC_ADDRESS, defaultValue =
"localhost:9898",
+ description = "The server's websocket public address.")
+ private static String httpWebsocketPublicAddress;
+
@Setting(name = HTTP_FRONTEND_ADDRESSES, defaultValue = "localhost:9898",
description = "A comman seperated list of address on which to listen for
connections."
+ " Each address is a host or ip and port seperated by a colon.")
Modified:
incubator/wave/trunk/src/org/waveprotocol/box/server/gxp/WaveClientPage.gxp
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/server/gxp/WaveClientPage.gxp?rev=1379094&r1=1379093&r2=1379094&view=diff
==============================================================================
--- incubator/wave/trunk/src/org/waveprotocol/box/server/gxp/WaveClientPage.gxp
(original)
+++ incubator/wave/trunk/src/org/waveprotocol/box/server/gxp/WaveClientPage.gxp
Thu Aug 30 19:46:22 2012
@@ -31,6 +31,7 @@
<gxp:import class="org.waveprotocol.box.server.gxp.TopBar" />
<gxp:param name='sessionJson' type='JSONObject' />
<gxp:param name='clientFlags' type='JSONObject' />
+ <gxp:param name='websocketAddress' type='String' />
<gxp:param name='topBar' type='HtmlClosure' />
<gxp:param name='analyticsAccount' type='String'/>
@@ -44,6 +45,7 @@
<!-- Session variables. -->
<script type="text/javascript" language="javascript">
var __session = <gxp:eval expr='sessionJson' />;
+ var __websocket_address = <gxp:eval expr='websocketAddress' />;
var __client_flags = <gxp:eval expr='clientFlags' />;
</script>
<style type="text/css">
Modified:
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java?rev=1379094&r1=1379093&r2=1379094&view=diff
==============================================================================
---
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java
(original)
+++
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/ServerRpcProvider.java
Thu Aug 30 19:46:22 2012
@@ -44,6 +44,7 @@ import com.glines.socketio.server.transp
import com.glines.socketio.server.transport.XHRPollingTransport;
import com.glines.socketio.server.transport.jetty.JettyWebSocketTransport;
+import org.apache.commons.lang.StringUtils;
import org.eclipse.jetty.http.ssl.SslContextFactory;
import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
import org.eclipse.jetty.server.Connector;
@@ -70,6 +71,7 @@ import org.waveprotocol.wave.util.loggin
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@@ -339,6 +341,7 @@ public class ServerRpcProvider {
@Inject
public ServerRpcProvider(@Named(CoreSettings.HTTP_FRONTEND_ADDRESSES)
List<String> httpAddresses,
+ @Named(CoreSettings.HTTP_WEBSOCKET_PUBLIC_ADDRESS) String
websocketAddress,
@Named(CoreSettings.FLASHSOCKET_POLICY_PORT) Integer
flashsocketPolicyPort,
@Named(CoreSettings.RESOURCE_BASES) List<String> resourceBases,
SessionManager sessionManager, org.eclipse.jetty.server.SessionManager
jettySessionManager,
@@ -346,7 +349,7 @@ public class ServerRpcProvider {
@Named(CoreSettings.ENABLE_SSL) boolean sslEnabled,
@Named(CoreSettings.SSL_KEYSTORE_PATH) String sslKeystorePath,
@Named(CoreSettings.SSL_KEYSTORE_PASSWORD) String sslKeystorePassword) {
- this(parseAddressList(httpAddresses), flashsocketPolicyPort, resourceBases
+ this(parseAddressList(httpAddresses, websocketAddress),
flashsocketPolicyPort, resourceBases
.toArray(new String[0]), sessionManager, jettySessionManager,
sessionStoreDir,
sslEnabled, sslKeystorePath, sslKeystorePassword);
}
@@ -482,12 +485,17 @@ public class ServerRpcProvider {
};
}
- private static InetSocketAddress[] parseAddressList(List<String>
addressList) {
+ private static InetSocketAddress[] parseAddressList(List<String>
addressList, String websocketAddress) {
if (addressList == null || addressList.size() == 0) {
return new InetSocketAddress[0];
} else {
Set<InetSocketAddress> addresses = Sets.newHashSet();
- for (String str : addressList) {
+ // We add the websocketAddress as another listening address.
+ ArrayList<String> mergedAddressList = new ArrayList<String>(addressList);
+ if (!StringUtils.isEmpty(websocketAddress)) {
+ mergedAddressList.add(websocketAddress);
+ }
+ for (String str : mergedAddressList) {
if (str.length() == 0) {
LOG.warning("Encountered empty address in http addresses list.");
} else {
Modified:
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java?rev=1379094&r1=1379093&r2=1379094&view=diff
==============================================================================
---
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java
(original)
+++
incubator/wave/trunk/src/org/waveprotocol/box/server/rpc/WaveClientServlet.java
Thu Aug 30 19:46:22 2012
@@ -22,6 +22,7 @@ import com.google.gxp.base.GxpContext;
import com.google.inject.Inject;
import com.google.inject.name.Named;
+import org.apache.commons.lang.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.waveprotocol.box.common.SessionConstants;
@@ -39,6 +40,7 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.List;
import javax.inject.Singleton;
import javax.servlet.http.HttpServlet;
@@ -69,6 +71,7 @@ public class WaveClientServlet extends H
private final String domain;
private final String analyticsAccount;
private final SessionManager sessionManager;
+ private final String websocketAddress;
/**
* Creates a servlet for the wave client.
@@ -76,9 +79,13 @@ public class WaveClientServlet extends H
@Inject
public WaveClientServlet(
@Named(CoreSettings.WAVE_SERVER_DOMAIN) String domain,
+ @Named(CoreSettings.HTTP_FRONTEND_ADDRESSES) List<String> httpAddresses,
+ @Named(CoreSettings.HTTP_WEBSOCKET_PUBLIC_ADDRESS) String
websocketAddress,
@Named(CoreSettings.ANALYTICS_ACCOUNT) String analyticsAccount,
SessionManager sessionManager) {
this.domain = domain;
+ this.websocketAddress = StringUtils.isEmpty(websocketAddress) ?
+ httpAddresses.get(0) : websocketAddress;
this.analyticsAccount = analyticsAccount;
this.sessionManager = sessionManager;
}
@@ -106,7 +113,7 @@ public class WaveClientServlet extends H
try {
WaveClientPage.write(response.getWriter(), new
GxpContext(request.getLocale()),
- getSessionJson(request.getSession(false)), getClientFlags(request),
+ getSessionJson(request.getSession(false)), getClientFlags(request),
websocketAddress,
TopBar.getGxpClosure(username, userDomain), analyticsAccount);
} catch (IOException e) {
LOG.warning("Failed to write GXP for request " + request, e);
Modified:
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
URL:
http://svn.apache.org/viewvc/incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java?rev=1379094&r1=1379093&r2=1379094&view=diff
==============================================================================
---
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
(original)
+++
incubator/wave/trunk/src/org/waveprotocol/box/webclient/client/WebClient.java
Thu Aug 30 19:46:22 2012
@@ -167,7 +167,7 @@ public class WebClient implements EntryP
HistorySupport.init(new HistoryProviderDefault());
HistoryChangeListener.init();
- websocket = new WaveWebSocketClient(useSocketIO(),
getWebSocketBaseUrl(GWT.getModuleBaseURL()));
+ websocket = new WaveWebSocketClient(useSocketIO(), getWebSocketBaseUrl());
websocket.connect();
if (Session.get().isLoggedIn()) {
@@ -272,7 +272,7 @@ public class WebClient implements EntryP
* Returns <code>ws(s)://yourhost[:port]/</code>.
*/
// XXX check formatting wrt GPE
- private native String getWebSocketBaseUrl(String moduleBase) /*-{return
((window.location.protocol == "https:") ? "wss" : "ws") +
/:\/\/[^\/]+/.exec(moduleBase)[0] + "/";}-*/;
+ private native String getWebSocketBaseUrl() /*-{return
((window.location.protocol == "https:") ? "wss" : "ws") + "://" +
$wnd.__websocket_address + "/";}-*/;
private native boolean useSocketIO() /*-{ return !window.WebSocket }-*/;