From 4c6d838249831d102c204ce3675ad95a7b5dd6c8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 5 Nov 2014 12:28:01 -0800 Subject: [PATCH] GUAC-919: Add new tunnels to session. If session does not exist upon closure, close tunnel anyway. --- .../guacamole/net/basic/TunnelRequestService.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java index dd657ffd1..25e7c87fe 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/TunnelRequestService.java @@ -29,6 +29,7 @@ import java.util.List; import org.glyptodon.guacamole.GuacamoleClientException; import org.glyptodon.guacamole.GuacamoleException; import org.glyptodon.guacamole.GuacamoleSecurityException; +import org.glyptodon.guacamole.GuacamoleUnauthorizedException; import org.glyptodon.guacamole.io.GuacamoleReader; import org.glyptodon.guacamole.net.GuacamoleSocket; import org.glyptodon.guacamole.net.GuacamoleTunnel; @@ -286,9 +287,18 @@ public class TunnelRequestService { @Override public void close() throws GuacamoleException { - GuacamoleSession session = authenticationService.getGuacamoleSession(authToken); + // Get session - just close if session does not exist + GuacamoleSession session; + try { + session = authenticationService.getGuacamoleSession(authToken); + } + catch (GuacamoleUnauthorizedException e) { + logger.debug("Session destroyed prior to tunnel closure.", e); + super.close(); + return; + } - // Only close if not canceled + // If we have a session, signal listeners if (!notifyClose(session, this)) throw new GuacamoleException("Tunnel close canceled by listener."); @@ -307,6 +317,7 @@ public class TunnelRequestService { return null; } + session.addTunnel(tunnel); return tunnel; }