From 7a697550e42f1a9fe26622e470099182837fcf35 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 6 Nov 2014 13:03:26 -0800 Subject: [PATCH] GUAC-921: Restore Jetty 9 support. Tunnel request service was marked for injection in the wrong place. --- .../BasicGuacamoleWebSocketCreator.java | 19 ++++++++++++++++++- ...BasicGuacamoleWebSocketTunnelListener.java | 19 +++++++++++++------ .../BasicGuacamoleWebSocketTunnelServlet.java | 12 +++++++++++- .../GuacamoleWebSocketTunnelListener.java | 8 -------- 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketCreator.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketCreator.java index 0547da04a..c833cccd9 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketCreator.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketCreator.java @@ -25,6 +25,7 @@ package org.glyptodon.guacamole.net.basic.websocket.jetty9; import org.eclipse.jetty.websocket.api.UpgradeRequest; import org.eclipse.jetty.websocket.api.UpgradeResponse; import org.eclipse.jetty.websocket.servlet.WebSocketCreator; +import org.glyptodon.guacamole.net.basic.TunnelRequestService; /** * WebSocketCreator which selects the appropriate WebSocketListener @@ -34,6 +35,22 @@ import org.eclipse.jetty.websocket.servlet.WebSocketCreator; */ public class BasicGuacamoleWebSocketCreator implements WebSocketCreator { + /** + * Service for handling tunnel requests. + */ + private final TunnelRequestService tunnelRequestService; + + /** + * Creates a new WebSocketCreator which uses the given TunnelRequestService + * to create new GuacamoleTunnels for inbound requests. + * + * @param tunnelRequestService The service to use for inbound tunnel + * requests. + */ + public BasicGuacamoleWebSocketCreator(TunnelRequestService tunnelRequestService) { + this.tunnelRequestService = tunnelRequestService; + } + @Override public Object createWebSocket(UpgradeRequest request, UpgradeResponse response) { @@ -42,7 +59,7 @@ public class BasicGuacamoleWebSocketCreator implements WebSocketCreator { if ("guacamole".equals(subprotocol)) { response.setAcceptedSubProtocol(subprotocol); - return new BasicGuacamoleWebSocketTunnelListener(); + return new BasicGuacamoleWebSocketTunnelListener(tunnelRequestService); } } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelListener.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelListener.java index 12c4660f2..b44b562f3 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelListener.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelListener.java @@ -22,8 +22,6 @@ package org.glyptodon.guacamole.net.basic.websocket.jetty9; -import com.google.inject.Inject; -import com.google.inject.Singleton; import org.eclipse.jetty.websocket.api.Session; import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.net.GuacamoleTunnel; @@ -35,15 +33,24 @@ import org.glyptodon.guacamole.net.basic.TunnelRequestService; * * @author Michael Jumper */ -@Singleton public class BasicGuacamoleWebSocketTunnelListener extends GuacamoleWebSocketTunnelListener { /** * Service for handling tunnel requests. */ - @Inject - private TunnelRequestService tunnelRequestService; - + private final TunnelRequestService tunnelRequestService; + + /** + * Creates a new WebSocketListener which uses the given TunnelRequestService + * to create new GuacamoleTunnels for inbound requests. + * + * @param tunnelRequestService The service to use for inbound tunnel + * requests. + */ + public BasicGuacamoleWebSocketTunnelListener(TunnelRequestService tunnelRequestService) { + this.tunnelRequestService = tunnelRequestService; + } + @Override protected GuacamoleTunnel createTunnel(Session session) throws GuacamoleException { return tunnelRequestService.createTunnel(new WebSocketTunnelRequest(session.getUpgradeRequest())); diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelServlet.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelServlet.java index a9f0f2824..4c495ae13 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelServlet.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/BasicGuacamoleWebSocketTunnelServlet.java @@ -22,21 +22,31 @@ package org.glyptodon.guacamole.net.basic.websocket.jetty9; +import com.google.inject.Inject; +import com.google.inject.Singleton; import org.eclipse.jetty.websocket.servlet.WebSocketServlet; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; +import org.glyptodon.guacamole.net.basic.TunnelRequestService; /** * A WebSocketServlet partial re-implementation of GuacamoleTunnelServlet. * * @author Michael Jumper */ +@Singleton public class BasicGuacamoleWebSocketTunnelServlet extends WebSocketServlet { + /** + * Service for handling tunnel requests. + */ + @Inject + private TunnelRequestService tunnelRequestService; + @Override public void configure(WebSocketServletFactory factory) { // Register WebSocket implementation - factory.setCreator(new BasicGuacamoleWebSocketCreator()); + factory.setCreator(new BasicGuacamoleWebSocketCreator(tunnelRequestService)); } diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/GuacamoleWebSocketTunnelListener.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/GuacamoleWebSocketTunnelListener.java index f0c359476..74fd371c2 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/GuacamoleWebSocketTunnelListener.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/websocket/jetty9/GuacamoleWebSocketTunnelListener.java @@ -113,14 +113,6 @@ public abstract class GuacamoleWebSocketTunnelListener implements WebSocketListe return; } - // Set accepted subprotocol - for (String subprotocol : session.getUpgradeRequest().getSubProtocols()) { - if ("guacamole".equals(subprotocol)) { - session.getUpgradeResponse().setAcceptedSubProtocol(subprotocol); - break; - } - } - // Prepare read transfer thread Thread readThread = new Thread() {