From: Michael Jumper Date: Thu, 1 Sep 2011 22:39:02 +0000 (-0700) Subject: Working initial implementation of websocket tunnel. X-Git-Url: http://git.alex.org.uk Working initial implementation of websocket tunnel. --- diff --git a/src/main/resources/tunnel.js b/src/main/resources/tunnel.js index 9d6671f..2e49d35 100644 --- a/src/main/resources/tunnel.js +++ b/src/main/resources/tunnel.js @@ -332,3 +332,85 @@ Guacamole.HTTPTunnel = function(tunnelURL) { }; Guacamole.HTTPTunnel.prototype = new Guacamole.Tunnel(); + + +/** + * Guacamole Tunnel implemented over WebSocket via XMLHttpRequest. + * + * @constructor + * @augments Guacamole.Tunnel + * @param {String} tunnelURL The URL of the WebSocket tunneling service. + */ +Guacamole.WebSocketTunnel = function(tunnelURL) { + + /** + * Reference to this WebSocket tunnel. + */ + var tunnel = this; + + /** + * The WebSocket used by this tunnel. + */ + var socket = null; + + var TUNNEL_CONNECT = tunnelURL + "?connect"; + + var STATE_IDLE = 0; + var STATE_CONNECTED = 1; + var STATE_DISCONNECTED = 2; + + var currentState = STATE_IDLE; + + this.sendMessage = function(message) { + + // Do not attempt to send messages if not connected + if (currentState != STATE_CONNECTED) + return; + + socket.send(message); + + }; + + this.connect = function(data) { + + // Connect socket + socket = new WebSocket(TUNNEL_CONNECT + "&" + data, "guacamole"); + + socket.onopen = function(event) { + currentState = STATE_CONNECTED; + }; + + socket.onmessage = function(event) { + + var message = event.data; + + var instructions = message.split(";"); + for (var i=0; i