mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUAC-549: Throw status instead of error for connect() in tunnel and client. Pass status instead of message/code parameters for onerror event handlers.
This commit is contained in:
@@ -142,9 +142,9 @@ Guacamole.Client = function(tunnel) {
|
|||||||
// Array of allocated output streams by index
|
// Array of allocated output streams by index
|
||||||
var output_streams = [];
|
var output_streams = [];
|
||||||
|
|
||||||
tunnel.onerror = function(message) {
|
tunnel.onerror = function(status) {
|
||||||
if (guac_client.onerror)
|
if (guac_client.onerror)
|
||||||
guac_client.onerror(message);
|
guac_client.onerror(status);
|
||||||
};
|
};
|
||||||
|
|
||||||
function setState(state) {
|
function setState(state) {
|
||||||
@@ -394,8 +394,8 @@ Guacamole.Client = function(tunnel) {
|
|||||||
* is being closed.
|
* is being closed.
|
||||||
*
|
*
|
||||||
* @event
|
* @event
|
||||||
* @param {String} reason A human-readable reason describing the error.
|
* @param {Guacamole.Status} status A status object which describes the
|
||||||
* @param {Number} code The error code associated with the error.
|
* error.
|
||||||
*/
|
*/
|
||||||
this.onerror = null;
|
this.onerror = null;
|
||||||
|
|
||||||
@@ -800,7 +800,7 @@ Guacamole.Client = function(tunnel) {
|
|||||||
|
|
||||||
// Call handler if defined
|
// Call handler if defined
|
||||||
if (guac_client.onerror)
|
if (guac_client.onerror)
|
||||||
guac_client.onerror(reason, code);
|
guac_client.onerror(new Guacamole.Status(code, reason));
|
||||||
|
|
||||||
guac_client.disconnect();
|
guac_client.disconnect();
|
||||||
|
|
||||||
@@ -1259,6 +1259,7 @@ Guacamole.Client = function(tunnel) {
|
|||||||
*
|
*
|
||||||
* @param data Arbitrary connection data to be sent to the underlying
|
* @param data Arbitrary connection data to be sent to the underlying
|
||||||
* tunnel during the connection process.
|
* tunnel during the connection process.
|
||||||
|
* @throws {Guacamole.Status} If an error occurs during connection.
|
||||||
*/
|
*/
|
||||||
this.connect = function(data) {
|
this.connect = function(data) {
|
||||||
|
|
||||||
@@ -1267,9 +1268,9 @@ Guacamole.Client = function(tunnel) {
|
|||||||
try {
|
try {
|
||||||
tunnel.connect(data);
|
tunnel.connect(data);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (status) {
|
||||||
setState(STATE_IDLE);
|
setState(STATE_IDLE);
|
||||||
throw e;
|
throw status;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ping every 5 seconds (ensure connection alive)
|
// Ping every 5 seconds (ensure connection alive)
|
||||||
|
@@ -39,6 +39,7 @@ Guacamole.Tunnel = function() {
|
|||||||
* up to the tunnel implementation.
|
* up to the tunnel implementation.
|
||||||
*
|
*
|
||||||
* @param {String} data The data to send to the tunnel when connecting.
|
* @param {String} data The data to send to the tunnel when connecting.
|
||||||
|
* @throws {Guacamole.Status} If an error occurs during connection.
|
||||||
*/
|
*/
|
||||||
this.connect = function(data) {};
|
this.connect = function(data) {};
|
||||||
|
|
||||||
@@ -60,8 +61,8 @@ Guacamole.Tunnel = function() {
|
|||||||
* Fired whenever an error is encountered by the tunnel.
|
* Fired whenever an error is encountered by the tunnel.
|
||||||
*
|
*
|
||||||
* @event
|
* @event
|
||||||
* @param {String} message A human-readable description of the error that
|
* @param {Guacamole.Status} status A status object which describes the
|
||||||
* occurred.
|
* error.
|
||||||
*/
|
*/
|
||||||
this.onerror = null;
|
this.onerror = null;
|
||||||
|
|
||||||
@@ -189,43 +190,22 @@ Guacamole.HTTPTunnel = function(tunnelURL) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getHTTPTunnelErrorMessage(xmlhttprequest) {
|
function getHTTPTunnelErrorStatus(xmlhttprequest) {
|
||||||
|
|
||||||
var status = xmlhttprequest.status;
|
var code = parseInt(xmlhttprequest.getResponseHeader("Guacamole-Status-Code"));
|
||||||
|
var message = xmlhttprequest.getResponseHeader("Guacamole-Error-Message");
|
||||||
|
|
||||||
// Special cases
|
return new Guacamole.Status(code, message);
|
||||||
if (status == 0) return "Disconnected";
|
|
||||||
if (status == 200) return "Success";
|
|
||||||
if (status == 403) return "Unauthorized";
|
|
||||||
if (status == 404) return "Connection closed"; /* While it may be more
|
|
||||||
* accurate to say the
|
|
||||||
* connection does not
|
|
||||||
* exist, it is confusing
|
|
||||||
* to the user.
|
|
||||||
*
|
|
||||||
* In general, this error
|
|
||||||
* will only happen when
|
|
||||||
* the tunnel does not
|
|
||||||
* exist, which happens
|
|
||||||
* after the connection
|
|
||||||
* is closed and the
|
|
||||||
* tunnel is detached.
|
|
||||||
*/
|
|
||||||
// Internal server errors
|
|
||||||
if (status >= 500 && status <= 599) return "Server error";
|
|
||||||
|
|
||||||
// Otherwise, unknown
|
|
||||||
return "Unknown error";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleHTTPTunnelError(xmlhttprequest) {
|
function handleHTTPTunnelError(xmlhttprequest) {
|
||||||
|
|
||||||
// Get error message
|
// Get error status
|
||||||
var message = getHTTPTunnelErrorMessage(xmlhttprequest);
|
var status = getHTTPTunnelErrorStatus(xmlhttprequest);
|
||||||
|
|
||||||
// Call error handler
|
// Call error handler
|
||||||
if (tunnel.onerror) tunnel.onerror(message);
|
if (tunnel.onerror) tunnel.onerror(status);
|
||||||
|
|
||||||
// Finish
|
// Finish
|
||||||
tunnel.disconnect();
|
tunnel.disconnect();
|
||||||
@@ -441,8 +421,8 @@ Guacamole.HTTPTunnel = function(tunnelURL) {
|
|||||||
|
|
||||||
// If failure, throw error
|
// If failure, throw error
|
||||||
if (connect_xmlhttprequest.status != 200) {
|
if (connect_xmlhttprequest.status != 200) {
|
||||||
var message = getHTTPTunnelErrorMessage(connect_xmlhttprequest);
|
var status = getHTTPTunnelErrorStatus(connect_xmlhttprequest);
|
||||||
throw new Error(message);
|
throw status;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get UUID from response
|
// Get UUID from response
|
||||||
@@ -594,16 +574,19 @@ Guacamole.WebSocketTunnel = function(tunnelURL) {
|
|||||||
|
|
||||||
socket.onclose = function(event) {
|
socket.onclose = function(event) {
|
||||||
|
|
||||||
|
var guac_code = parseInt(event.reason);
|
||||||
|
|
||||||
// If connection closed abnormally, signal error.
|
// If connection closed abnormally, signal error.
|
||||||
if (event.code != 1000 && tunnel.onerror)
|
if (guac_code !== Guacamole.Status.Code.SUCCESS && tunnel.onerror)
|
||||||
tunnel.onerror(status_code[event.code]);
|
tunnel.onerror(guac_code, event.reason);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.onerror = function(event) {
|
socket.onerror = function(event) {
|
||||||
|
|
||||||
// Call error handler
|
// Call error handler
|
||||||
if (tunnel.onerror) tunnel.onerror(event.data);
|
if (tunnel.onerror)
|
||||||
|
tunnel.onerror(Guacamole.Status.Code.SERVER_ERROR, event.data);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -756,7 +739,7 @@ Guacamole.ChainedTunnel = function(tunnel_chain) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Attach next tunnel on error
|
// Attach next tunnel on error
|
||||||
current_tunnel.onerror = function(message) {
|
current_tunnel.onerror = function(status) {
|
||||||
|
|
||||||
// Get next tunnel
|
// Get next tunnel
|
||||||
var next_tunnel = tunnels.shift();
|
var next_tunnel = tunnels.shift();
|
||||||
@@ -767,7 +750,7 @@ Guacamole.ChainedTunnel = function(tunnel_chain) {
|
|||||||
|
|
||||||
// Otherwise, call error handler
|
// Otherwise, call error handler
|
||||||
else if (chained_tunnel.onerror)
|
else if (chained_tunnel.onerror)
|
||||||
chained_tunnel.onerror(message);
|
chained_tunnel.onerror(status);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -777,10 +760,10 @@ Guacamole.ChainedTunnel = function(tunnel_chain) {
|
|||||||
current_tunnel.connect(connect_data);
|
current_tunnel.connect(connect_data);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (status) {
|
||||||
|
|
||||||
// Call error handler of current tunnel on error
|
// Call error handler of current tunnel on error
|
||||||
current_tunnel.onerror(e.message);
|
current_tunnel.onerror(status);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -800,7 +783,7 @@ Guacamole.ChainedTunnel = function(tunnel_chain) {
|
|||||||
|
|
||||||
// If there IS no first tunnel, error
|
// If there IS no first tunnel, error
|
||||||
else if (chained_tunnel.onerror)
|
else if (chained_tunnel.onerror)
|
||||||
chained_tunnel.onerror("No tunnels to try.");
|
chained_tunnel.onerror(Guacamole.Status.Code.SERVER_ERROR, "No tunnels to try.");
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user