Properly handle errors on write as well as read.

This commit is contained in:
Michael Jumper
2012-03-14 16:18:11 -07:00
parent cc6c2671ac
commit 431d38d21f

View File

@@ -181,8 +181,17 @@ Guacamole.HTTPTunnel = function(tunnelURL) {
// Once response received, send next queued event. // Once response received, send next queued event.
message_xmlhttprequest.onreadystatechange = function() { message_xmlhttprequest.onreadystatechange = function() {
if (message_xmlhttprequest.readyState == 4) if (message_xmlhttprequest.readyState == 4) {
sendPendingMessages();
// 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); 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) { function handleResponse(xmlhttprequest) {
var interval = null; var interval = null;
@@ -257,17 +282,7 @@ Guacamole.HTTPTunnel = function(tunnelURL) {
// Halt on error during request // Halt on error during request
else if (xmlhttprequest.status != 200) { else if (xmlhttprequest.status != 200) {
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();
return; return;
} }