mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 21:27:40 +00:00
Now using true inbound instruction stream ... no more event-specific servlets.
This commit is contained in:
@@ -53,31 +53,13 @@
|
||||
<url-pattern>/instructions</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet>
|
||||
<description>Clipboard input servlet.</description>
|
||||
<servlet-name>Clipboard</servlet-name>
|
||||
<servlet-class>net.sourceforge.guacamole.net.input.Clipboard</servlet-class>
|
||||
<description>Input servlet.</description>
|
||||
<servlet-name>Inbound</servlet-name>
|
||||
<servlet-class>net.sourceforge.guacamole.net.input.Inbound</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>Clipboard</servlet-name>
|
||||
<url-pattern>/clipboard</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet>
|
||||
<description>Key input servlet.</description>
|
||||
<servlet-name>Key</servlet-name>
|
||||
<servlet-class>net.sourceforge.guacamole.net.input.Key</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>Key</servlet-name>
|
||||
<url-pattern>/key</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet>
|
||||
<description>Pointer input servlet.</description>
|
||||
<servlet-name>Pointer</servlet-name>
|
||||
<servlet-class>net.sourceforge.guacamole.net.input.Pointer</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>Pointer</servlet-name>
|
||||
<url-pattern>/pointer</url-pattern>
|
||||
<servlet-name>Inbound</servlet-name>
|
||||
<url-pattern>/inbound</url-pattern>
|
||||
</servlet-mapping>
|
||||
<security-constraint>
|
||||
<display-name>Guacamole Access Restrictions</display-name>
|
||||
|
@@ -46,9 +46,6 @@ function VNCClient(display) {
|
||||
|| currentState == STATE_WAITING;
|
||||
}
|
||||
|
||||
var keyIndex = 0;
|
||||
var xmlIndex = 0;
|
||||
|
||||
// Layers
|
||||
var background = null;
|
||||
var cursor = null;
|
||||
@@ -118,17 +115,7 @@ function VNCClient(display) {
|
||||
this.enableKeyboard();
|
||||
|
||||
function sendKeyEvent(pressed, keysym) {
|
||||
|
||||
// Do not send requests if not connected
|
||||
if (!isConnected())
|
||||
return;
|
||||
|
||||
var key_xmlhttprequest = new XMLHttpRequest();
|
||||
key_xmlhttprequest.open("GET",
|
||||
"key?index=" + (keyIndex++)
|
||||
+ "&pressed=" + pressed
|
||||
+ "&keysym=" + keysym);
|
||||
key_xmlhttprequest.send(null);
|
||||
sendMessage("key:" + keysym + "," + pressed + ";");
|
||||
}
|
||||
|
||||
this.pressKey = function(keysym) {
|
||||
@@ -170,47 +157,63 @@ function VNCClient(display) {
|
||||
);
|
||||
|
||||
|
||||
var sendingMouseEvents = 0;
|
||||
var mouseEventBuffer = "";
|
||||
|
||||
function sendMouseState(mouseState) {
|
||||
|
||||
// Build mask
|
||||
var buttonMask = 0;
|
||||
if (mouseState.getLeft()) buttonMask |= 1;
|
||||
if (mouseState.getMiddle()) buttonMask |= 2;
|
||||
if (mouseState.getRight()) buttonMask |= 4;
|
||||
if (mouseState.getUp()) buttonMask |= 8;
|
||||
if (mouseState.getDown()) buttonMask |= 16;
|
||||
|
||||
// Send message
|
||||
sendMessage("mouse:" + mouseState.getX() + "," + mouseState.getY() + "," + buttonMask + ";");
|
||||
}
|
||||
|
||||
var sendingMessages = 0;
|
||||
var outputMessageBuffer = "";
|
||||
|
||||
function sendMessage(message) {
|
||||
|
||||
// Do not send requests if not connected
|
||||
if (!isConnected())
|
||||
return;
|
||||
|
||||
// Add event to queue, restart send loop if finished.
|
||||
if (mouseEventBuffer.length > 0) mouseEventBuffer += "&";
|
||||
mouseEventBuffer += "event=" + mouseState.toString();
|
||||
if (sendingMouseEvents == 0)
|
||||
sendPendingMouseEvents();
|
||||
outputMessageBuffer += message;
|
||||
if (sendingMessages == 0)
|
||||
sendPendingMessages();
|
||||
|
||||
}
|
||||
|
||||
function sendPendingMouseEvents() {
|
||||
function sendPendingMessages() {
|
||||
|
||||
// Do not send requests if not connected
|
||||
if (!isConnected())
|
||||
return;
|
||||
|
||||
if (mouseEventBuffer.length > 0) {
|
||||
if (outputMessageBuffer.length > 0) {
|
||||
|
||||
sendingMouseEvents = 1;
|
||||
sendingMessages = 1;
|
||||
|
||||
var mouse_xmlhttprequest = new XMLHttpRequest();
|
||||
mouse_xmlhttprequest.open("GET", "pointer?" + mouseEventBuffer);
|
||||
mouseEventBuffer = ""; // Clear buffer
|
||||
var message_xmlhttprequest = new XMLHttpRequest();
|
||||
message_xmlhttprequest.open("POST", "inbound");
|
||||
message_xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
||||
message_xmlhttprequest.setRequestHeader("Content-length", outputMessageBuffer.length);
|
||||
|
||||
// Once response received, send next queued event.
|
||||
mouse_xmlhttprequest.onreadystatechange = function() {
|
||||
if (mouse_xmlhttprequest.readyState == 4)
|
||||
sendPendingMouseEvents();
|
||||
message_xmlhttprequest.onreadystatechange = function() {
|
||||
if (message_xmlhttprequest.readyState == 4)
|
||||
sendPendingMessages();
|
||||
}
|
||||
|
||||
mouse_xmlhttprequest.send(null);
|
||||
message_xmlhttprequest.send(outputMessageBuffer);
|
||||
outputMessageBuffer = ""; // Clear buffer
|
||||
|
||||
}
|
||||
else
|
||||
sendingMouseEvents = 0;
|
||||
sendingMessages = 0;
|
||||
|
||||
}
|
||||
|
||||
@@ -225,10 +228,7 @@ function VNCClient(display) {
|
||||
if (!isConnected())
|
||||
return;
|
||||
|
||||
var clipboard_xmlhttprequest = new XMLHttpRequest();
|
||||
clipboard_xmlhttprequest.open("POST", "clipboard");
|
||||
clipboard_xmlhttprequest.send(data);
|
||||
|
||||
sendMessage("clipboard:" + escapeGuacamoleString(data) + ";");
|
||||
}
|
||||
|
||||
|
||||
@@ -387,6 +387,28 @@ function VNCClient(display) {
|
||||
|
||||
}
|
||||
|
||||
function escapeGuacamoleString(str) {
|
||||
|
||||
var escapedString = "";
|
||||
|
||||
for (var i=0; i<str.length; i++) {
|
||||
|
||||
var c = str.charAt(i);
|
||||
if (c == ",")
|
||||
escapedString += "\\c";
|
||||
else if (c == ";")
|
||||
escapedString += "\\s";
|
||||
else if (c == "\\")
|
||||
escapedString += "\\\\";
|
||||
else
|
||||
escapedString += c;
|
||||
|
||||
}
|
||||
|
||||
return escapedString;
|
||||
|
||||
}
|
||||
|
||||
function unescapeGuacamoleString(str) {
|
||||
|
||||
var unescapedString = "";
|
||||
|
Reference in New Issue
Block a user