GUAC-549: Use new onerror/onack handlers. Translate Guacamole.Status codes to human-readable messages.

This commit is contained in:
Michael Jumper
2014-03-19 15:43:36 -07:00
parent 6a70dd5582
commit a1aba4d2a7
2 changed files with 146 additions and 46 deletions

View File

@@ -61,7 +61,7 @@
<script type="text/javascript" src="scripts/lib/filesaver/filesaver.js"></script>
<!-- guacamole-common-js -->
<script type="text/javascript" src="guacamole-common-js/all.min.js"></script>
<script type="text/javascript" src="guacamole-common-js/all.js"></script>
<!-- guacamole-default-webapp scripts -->
<script type="text/javascript" src="scripts/session.js"></script>
@@ -101,47 +101,46 @@
// Tie UI to client
GuacUI.Client.attach(guac);
try {
// Calculate optimal width/height for display
var pixel_density = window.devicePixelRatio || 1;
var optimal_dpi = pixel_density * 96;
var optimal_width = window.innerWidth * pixel_density;
var optimal_height = window.innerHeight * pixel_density;
// Scale width/height to be at least 600x600
if (optimal_width < 600 || optimal_height < 600) {
var scale = Math.max(600 / optimal_width, 600 / optimal_height);
optimal_width = optimal_width * scale;
optimal_height = optimal_height * scale;
}
// Get entire query string, and pass to connect().
// Normally, only the "id" parameter is required, but
// all parameters should be preserved and passed on for
// the sake of authentication.
var connect_string =
window.location.search.substring(1)
+ "&width=" + Math.floor(optimal_width)
+ "&height=" + Math.floor(optimal_height)
+ "&dpi=" + Math.floor(optimal_dpi);
// Add audio mimetypes to connect_string
GuacUI.Audio.supported.forEach(function(mimetype) {
connect_string += "&audio=" + encodeURIComponent(mimetype);
});
// Add video mimetypes to connect_string
GuacUI.Video.supported.forEach(function(mimetype) {
connect_string += "&video=" + encodeURIComponent(mimetype);
});
guac.connect(connect_string);
// Calculate optimal width/height for display
var pixel_density = window.devicePixelRatio || 1;
var optimal_dpi = pixel_density * 96;
var optimal_width = window.innerWidth * pixel_density;
var optimal_height = window.innerHeight * pixel_density;
// Scale width/height to be at least 600x600
if (optimal_width < 600 || optimal_height < 600) {
var scale = Math.max(600 / optimal_width, 600 / optimal_height);
optimal_width = optimal_width * scale;
optimal_height = optimal_height * scale;
}
catch (e) {
GuacUI.Client.showError("Cannot Connect", e.message);
// Get entire query string, and pass to connect().
// Normally, only the "id" parameter is required, but
// all parameters should be preserved and passed on for
// the sake of authentication.
var connect_string =
window.location.search.substring(1)
+ "&width=" + Math.floor(optimal_width)
+ "&height=" + Math.floor(optimal_height)
+ "&dpi=" + Math.floor(optimal_dpi);
// Add audio mimetypes to connect_string
GuacUI.Audio.supported.forEach(function(mimetype) {
connect_string += "&audio=" + encodeURIComponent(mimetype);
});
// Add video mimetypes to connect_string
GuacUI.Video.supported.forEach(function(mimetype) {
connect_string += "&video=" + encodeURIComponent(mimetype);
});
try {
guac.connect(connect_string);
}
catch (status) {
var message = GuacUI.Client.errors[status.code] || GuacUI.Client.errors.DEFAULT;
GuacUI.Client.showError("Cannot Connect", message);
}
}, 0);

View File

@@ -63,6 +63,104 @@ GuacUI.Client = {
},
/**
* Enumeration of all error messages for each applicable error code.
*/
"errors": {
0x0201: "The Guacamole server has rejected this connection attempt \
because there are too many active connections. Please wait \
a few minutes and try again.",
0x0202: "The remote desktop server encountered an error and has closed \
the connection. Please try again or contact your system \
administrator.",
0x0203: "The Guacamole server has closed the connection because the \
remote desktop is taking too long to respond. Please try \
again or contact your system administrator.",
0x0204: "The requested connection does not exist. Please check the \
connection name and try again.",
0x0205: "This connection is currently in use, and concurrent access to \
this connection is not allowed. Please try again later.",
0x0301: "You do not have permission to access this connection because \
you are not logged in. Please log in and try again.",
0x0303: "You do not have permission to access this connection. If you \
require access, please ask your system administrator to add \
you the list of allowed users, or check your system settings.",
0x0308: "The Guacamole server has closed the connection because there \
has been no response from your browser for long enough that \
it appeared to be disconnected. This is commonly caused by \
network problems, such as spotty wireless signal, or simply \
very slow network speeds. Please check your network and try \
again.",
0x031D: "The Guacamole server is denying access to this connection \
because you have exhausted the limit for simultaneous \
connection use by an individual user. Please close one or \
more connections and try again.",
"DEFAULT": "An internal error has occurred within the Guacamole \
server, and the connection has been terminated. If \
the problem persists, please notify your system \
administrator, or check your system logs."
},
/**
* Enumeration of all error messages for each applicable error code. This
* list is specific to file uploads.
*/
"upload_errors": {
0x0100: "File transfer is either not supported or not enabled. Please \
contact your system administrator, or check your system logs.",
0x0201: "Too many files are currently being transferred. Please wait \
for existing transfers to complete, and then try again.",
0x0202: "The remote desktop server encountered an error during \
transfer. Please try again or contact your system \
administrator.",
0x0203: "The file cannot be transferred because the remote desktop \
server is taking too long to respond. Please try again or \
or contact your system administrator.",
0x0204: "The destination for the file transfer does not exist. Please \
check that the destionation exists and try again.",
0x0205: "The destination for the file transfer is currently locked. \
Please wait for any in-progress tasks to complete and try \
again.",
0x0301: "You do not have permission to upload this file because you \
are not logged in. Please log in and try again.",
0x0303: "You do not have permission to upload this file. If you \
require access, please check your system settings, or \
check with your system administrator.",
0x0308: "The file transfer has stalled. This is commonly caused by \
network problems, such as spotty wireless signal, or \
simply very slow network speeds. Please check your \
network and try again.",
0x031D: "Too many files are currently being transferred. Please wait \
for existing transfers to complete, and then try again.",
"DEFAULT": "An internal error has occurred within the Guacamole \
server, and the connection has been terminated. If \
the problem persists, please notify your system \
administrator, or check your system logs.",
},
/* Constants */
"LONG_PRESS_DETECT_TIMEOUT" : 800, /* milliseconds */
@@ -780,13 +878,14 @@ GuacUI.Client.attach = function(guac) {
* receives an error.
*/
guac.onerror = function(error) {
guac.onerror = function(status) {
// Disconnect, if connected
guac.disconnect();
// Display error message
GuacUI.Client.showError("Connection Error", error);
var message = GuacUI.Client.errors[status.code] || GuacUI.Client.errors.DEFAULT;
GuacUI.Client.showError("Connection Error", message);
};
@@ -1157,12 +1256,14 @@ GuacUI.Client.attach = function(guac) {
// Invalidate stream on all errors
// Continue upload when acknowledged
stream.onack = function(text, code) {
stream.onack = function(status) {
// Handle codes
if (code >= 0x0100) {
// Handle errors
if (status.isError()) {
valid = false;
upload.showError(text);
var message = GuacUI.Client.upload_errors[status.code]
|| GuacUI.Client.upload_errors.DEFAULT;
upload.showError(message);
}
// Abort upload if stream is invalid