diff --git a/guacamole-common-js/src/main/resources/guacamole.js b/guacamole-common-js/src/main/resources/guacamole.js index 4e4831c36..688f22560 100644 --- a/guacamole-common-js/src/main/resources/guacamole.js +++ b/guacamole-common-js/src/main/resources/guacamole.js @@ -429,12 +429,19 @@ function GuacamoleClient(display, tunnel) { } this.disconnect = disconnect; - this.connect = function() { + this.connect = function(data) { setState(STATE_CONNECTING); - tunnel.connect(); - setState(STATE_WAITING); + try { + tunnel.connect(data); + } + catch (e) { + setState(STATE_IDLE); + throw e; + } + + setState(STATE_WAITING); }; this.escapeGuacamoleString = escapeGuacamoleString; diff --git a/guacamole-common-js/src/main/resources/tunnel.js b/guacamole-common-js/src/main/resources/tunnel.js index 70b139de3..d5a785ac3 100644 --- a/guacamole-common-js/src/main/resources/tunnel.js +++ b/guacamole-common-js/src/main/resources/tunnel.js @@ -213,13 +213,24 @@ function GuacamoleHTTPTunnel(tunnelURL) { } - function connect() { + function connect(data) { // Start tunnel and connect synchronously var connect_xmlhttprequest = new XMLHttpRequest(); connect_xmlhttprequest.open("POST", TUNNEL_CONNECT, false); connect_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - connect_xmlhttprequest.send(null); + connect_xmlhttprequest.send(data); + + // If failure, throw error + if (connect_xmlhttprequest.status != 200) { + + var message = connect_xmlhttprequest.getResponseHeader("X-Guacamole-Error-Message"); + if (!message) + message = "Internal error"; + + throw new Error(message); + + } // Get UUID from response tunnel_uuid = connect_xmlhttprequest.responseText;