GUAC-921: Restore Jetty 9 support. Tunnel request service was marked for injection in the wrong place.

This commit is contained in:
Michael Jumper
2014-11-06 13:03:26 -08:00
parent d1ec32d066
commit 7a697550e4
4 changed files with 42 additions and 16 deletions

View File

@@ -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);
}
}

View File

@@ -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()));

View File

@@ -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));
}

View File

@@ -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() {