diff --git a/guacamole/client/src/net/sourceforge/guacamole/net/output/InstructionStream.java b/guacamole/client/src/net/sourceforge/guacamole/net/output/InstructionStream.java index 33237d44a..27e5e65de 100644 --- a/guacamole/client/src/net/sourceforge/guacamole/net/output/InstructionStream.java +++ b/guacamole/client/src/net/sourceforge/guacamole/net/output/InstructionStream.java @@ -63,6 +63,11 @@ public class InstructionStream extends GuacamoleServlet { } + if (message == null) { + session.disconnect(); + throw new GuacamoleException("Disconnected."); + } + } catch (GuacamoleException e) { out.write("error:" + e.getMessage() + ";"); diff --git a/guacamole/client/web/javascript/guacamole.js b/guacamole/client/web/javascript/guacamole.js index d0f6e6cf7..f82fa58e6 100644 --- a/guacamole/client/web/javascript/guacamole.js +++ b/guacamole/client/web/javascript/guacamole.js @@ -576,14 +576,23 @@ function VNCClient(display) { }; + function disconnect() { // Only attempt disconnection not disconnected. if (currentState != STATE_DISCONNECTED && currentState != STATE_DISCONNECTING) { + var message = "disconnect;"; setState(STATE_DISCONNECTING); - sendMessage("disconnect;"); // End session + + // Send disconnect message (synchronously... as necessary until handoff is implemented) + var disconnect_xmlhttprequest = new XMLHttpRequest(); + disconnect_xmlhttprequest.open("POST", "inbound", false); + disconnect_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + disconnect_xmlhttprequest.setRequestHeader("Content-length", message.length); + disconnect_xmlhttprequest.send(message); + setState(STATE_DISCONNECTED); }