From 2194a33a4fd09160b0501e497b11f66094dfba57 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 14 Mar 2012 16:18:11 -0700 Subject: [PATCH] Properly handle errors on write as well as read. --- src/main/resources/tunnel.js | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/resources/tunnel.js b/src/main/resources/tunnel.js index 8729b8a..b81c418 100644 --- a/src/main/resources/tunnel.js +++ b/src/main/resources/tunnel.js @@ -181,8 +181,17 @@ Guacamole.HTTPTunnel = function(tunnelURL) { // Once response received, send next queued event. message_xmlhttprequest.onreadystatechange = function() { - if (message_xmlhttprequest.readyState == 4) - sendPendingMessages(); + if (message_xmlhttprequest.readyState == 4) { + + // If an error occurs during send, handle it + if (message_xmlhttprequest.status != 200) + handleHTTPTunnelError(message_xmlhttprequest); + + // Otherwise, continue the send loop + else + sendPendingMessages(); + + } } message_xmlhttprequest.send(outputMessageBuffer); @@ -195,6 +204,22 @@ Guacamole.HTTPTunnel = function(tunnelURL) { } + function handleHTTPTunnelError(xmlhttprequest) { + + // Get error message (if any) + var message = xmlhttprequest.getResponseHeader("X-Guacamole-Error-Message"); + if (!message) + message = "Internal server error"; + + // Call error handler + if (tunnel.onerror) tunnel.onerror(message); + + // Finish + tunnel.disconnect(); + + } + + function handleResponse(xmlhttprequest) { var interval = null; @@ -257,17 +282,7 @@ Guacamole.HTTPTunnel = function(tunnelURL) { // Halt on error during request else if (xmlhttprequest.status != 200) { - - // Get error message (if any) - var message = xmlhttprequest.getResponseHeader("X-Guacamole-Error-Message"); - if (!message) - message = "Internal server error"; - - // Call error handler - if (tunnel.onerror) tunnel.onerror(message); - - // Finish - tunnel.disconnect(); + handleHTTPTunnelError(xmlhttprequest); return; } -- 1.7.10.4