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.
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;
}