Commit a856a051 authored by Malcolm Scott's avatar Malcolm Scott Committed by Solly Ross

Implement XVP extension (shutdown/reboot/reset)

parent 03ab2515
...@@ -47,6 +47,8 @@ var that = {}, // Public API methods ...@@ -47,6 +47,8 @@ var that = {}, // Public API methods
rfb_auth_scheme= '', rfb_auth_scheme= '',
rfb_tightvnc = false, rfb_tightvnc = false,
rfb_xvp_ver = 0,
// In preference order // In preference order
encodings = [ encodings = [
...@@ -65,7 +67,8 @@ var that = {}, // Public API methods ...@@ -65,7 +67,8 @@ var that = {}, // Public API methods
//['JPEG_quality_hi', -23 ], //['JPEG_quality_hi', -23 ],
//['compress_lo', -255 ], //['compress_lo', -255 ],
['compress_hi', -247 ], ['compress_hi', -247 ],
['last_rect', -224 ] ['last_rect', -224 ],
['xvp', -309 ]
], ],
encHandlers = {}, encHandlers = {},
...@@ -161,6 +164,8 @@ Util.conf_defaults(conf, that, defaults, [ ...@@ -161,6 +164,8 @@ Util.conf_defaults(conf, that, defaults, [
'onFBResize(rfb, width, height): frame buffer resized'], 'onFBResize(rfb, width, height): frame buffer resized'],
['onDesktopName', 'rw', 'func', function() { }, ['onDesktopName', 'rw', 'func', function() { },
'onDesktopName(rfb, name): desktop name received'], 'onDesktopName(rfb, name): desktop name received'],
['onXvpInit', 'rw', 'func', function() { },
'onXvpInit(version): XVP extensions active for this connection'],
// These callback names are deprecated // These callback names are deprecated
['updateState', 'rw', 'func', function() { }, ['updateState', 'rw', 'func', function() { },
...@@ -991,7 +996,8 @@ normal_msg = function() { ...@@ -991,7 +996,8 @@ normal_msg = function() {
//Util.Debug(">> normal_msg"); //Util.Debug(">> normal_msg");
var ret = true, msg_type, length, text, var ret = true, msg_type, length, text,
c, first_colour, num_colours, red, green, blue; c, first_colour, num_colours, red, green, blue,
xvp_ver, xvp_msg;
if (FBU.rects > 0) { if (FBU.rects > 0) {
msg_type = 0; msg_type = 0;
...@@ -1041,6 +1047,24 @@ normal_msg = function() { ...@@ -1041,6 +1047,24 @@ normal_msg = function() {
conf.clipboardReceive(that, text); // Obsolete conf.clipboardReceive(that, text); // Obsolete
conf.onClipboard(that, text); conf.onClipboard(that, text);
break; break;
case 250: // XVP
ws.rQshift8(); // Padding
xvp_ver = ws.rQshift8();
xvp_msg = ws.rQshift8();
switch (xvp_msg) {
case 0: // XVP_FAIL
updateState(rfb_state, "Operation failed");
break;
case 1: // XVP_INIT
rfb_xvp_ver = xvp_ver;
Util.Info("XVP extensions enabled (version " + rfb_xvp_ver + ")");
conf.onXvpInit(rfb_xvp_ver);
break;
default:
fail("Disconnected: illegal server XVP message " + xvp_msg);
break;
}
break;
default: default:
fail("Disconnected: illegal server message type " + msg_type); fail("Disconnected: illegal server message type " + msg_type);
Util.Debug("ws.rQslice(0,30):" + ws.rQslice(0,30)); Util.Debug("ws.rQslice(0,30):" + ws.rQslice(0,30));
...@@ -1895,6 +1919,25 @@ that.sendCtrlAltDel = function() { ...@@ -1895,6 +1919,25 @@ that.sendCtrlAltDel = function() {
ws.send(arr); ws.send(arr);
}; };
that.xvpOp = function(ver, op) {
if (rfb_xvp_ver < ver) { return false; }
Util.Info("Sending XVP operation " + op + " (version " + ver + ")")
ws.send_string("\xFA\x00" + String.fromCharCode(ver) + String.fromCharCode(op));
return true;
};
that.xvpShutdown = function() {
return that.xvpOp(1, 2);
};
that.xvpReboot = function() {
return that.xvpOp(1, 3);
};
that.xvpReset = function() {
return that.xvpOp(1, 4);
};
// Send a key press. If 'down' is not specified then send a down key // Send a key press. If 'down' is not specified then send a down key
// followed by an up key. // followed by an up key.
that.sendKey = function(code, down) { that.sendKey = function(code, down) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment