mirror of
https://github.com/retspen/webvirtcloud
synced 2025-07-31 12:41:08 +00:00
fix console password & sendkey & css fixes & add scale vb
This commit is contained in:
parent
48f9ba6d73
commit
4f8a1fd50d
9 changed files with 767 additions and 886 deletions
|
@ -38,8 +38,7 @@ var Meta_state = -1;
|
|||
** SpiceInputsConn
|
||||
** Drive the Spice Inputs channel (e.g. mouse + keyboard)
|
||||
**--------------------------------------------------------------------------*/
|
||||
function SpiceInputsConn()
|
||||
{
|
||||
function SpiceInputsConn() {
|
||||
SpiceConn.apply(this, arguments);
|
||||
|
||||
this.mousex = undefined;
|
||||
|
@ -49,26 +48,22 @@ function SpiceInputsConn()
|
|||
}
|
||||
|
||||
SpiceInputsConn.prototype = Object.create(SpiceConn.prototype);
|
||||
SpiceInputsConn.prototype.process_channel_message = function(msg)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_INPUTS_INIT)
|
||||
{
|
||||
SpiceInputsConn.prototype.process_channel_message = function (msg) {
|
||||
if (msg.type == Constants.SPICE_MSG_INPUTS_INIT) {
|
||||
var inputs_init = new Messages.SpiceMsgInputsInit(msg.data);
|
||||
this.keyboard_modifiers = inputs_init.keyboard_modifiers;
|
||||
DEBUG > 1 && console.log("MsgInputsInit - modifier " + this.keyboard_modifiers);
|
||||
// FIXME - We don't do anything with the keyboard modifiers...
|
||||
return true;
|
||||
}
|
||||
if (msg.type == Constants.SPICE_MSG_INPUTS_KEY_MODIFIERS)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_INPUTS_KEY_MODIFIERS) {
|
||||
var key = new Messages.SpiceMsgInputsKeyModifiers(msg.data);
|
||||
this.keyboard_modifiers = key.keyboard_modifiers;
|
||||
DEBUG > 1 && console.log("MsgInputsKeyModifiers - modifier " + this.keyboard_modifiers);
|
||||
// FIXME - We don't do anything with the keyboard modifiers...
|
||||
return true;
|
||||
}
|
||||
if (msg.type == Constants.SPICE_MSG_INPUTS_MOUSE_MOTION_ACK)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_INPUTS_MOUSE_MOTION_ACK) {
|
||||
DEBUG > 1 && console.log("mouse motion ack");
|
||||
this.waiting_for_ack -= Constants.SPICE_INPUT_MOTION_ACK_BUNCH;
|
||||
return true;
|
||||
|
@ -78,35 +73,28 @@ SpiceInputsConn.prototype.process_channel_message = function(msg)
|
|||
|
||||
|
||||
|
||||
function handle_mousemove(e)
|
||||
{
|
||||
function handle_mousemove(e) {
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
var move;
|
||||
if (this.sc.mouse_mode == Constants.SPICE_MOUSE_MODE_CLIENT)
|
||||
{
|
||||
if (this.sc.mouse_mode == Constants.SPICE_MOUSE_MODE_CLIENT) {
|
||||
move = new Messages.SpiceMsgcMousePosition(this.sc, e)
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_POSITION, move);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
move = new Messages.SpiceMsgcMouseMotion(this.sc, e)
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_MOTION, move);
|
||||
}
|
||||
if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready")
|
||||
{
|
||||
if (this.sc.inputs.waiting_for_ack < (2 * Constants.SPICE_INPUT_MOTION_ACK_BUNCH))
|
||||
{
|
||||
if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready") {
|
||||
if (this.sc.inputs.waiting_for_ack < (2 * Constants.SPICE_INPUT_MOTION_ACK_BUNCH)) {
|
||||
this.sc.inputs.send_msg(msg);
|
||||
this.sc.inputs.waiting_for_ack++;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
DEBUG > 0 && this.sc.log_info("Discarding mouse motion");
|
||||
}
|
||||
}
|
||||
|
||||
if (this.sc && this.sc.cursor && this.sc.cursor.spice_simulated_cursor)
|
||||
{
|
||||
if (this.sc && this.sc.cursor && this.sc.cursor.spice_simulated_cursor) {
|
||||
this.sc.cursor.spice_simulated_cursor.style.display = 'block';
|
||||
this.sc.cursor.spice_simulated_cursor.style.left = e.pageX - this.sc.cursor.spice_simulated_cursor.spice_hot_x + 'px';
|
||||
this.sc.cursor.spice_simulated_cursor.style.top = e.pageY - this.sc.cursor.spice_simulated_cursor.spice_hot_y + 'px';
|
||||
|
@ -115,8 +103,7 @@ function handle_mousemove(e)
|
|||
|
||||
}
|
||||
|
||||
function handle_mousedown(e)
|
||||
{
|
||||
function handle_mousedown(e) {
|
||||
var press = new Messages.SpiceMsgcMousePress(this.sc, e)
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_PRESS, press);
|
||||
|
@ -126,14 +113,12 @@ function handle_mousedown(e)
|
|||
e.preventDefault();
|
||||
}
|
||||
|
||||
function handle_contextmenu(e)
|
||||
{
|
||||
function handle_contextmenu(e) {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
function handle_mouseup(e)
|
||||
{
|
||||
function handle_mouseup(e) {
|
||||
var release = new Messages.SpiceMsgcMouseRelease(this.sc, e)
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_RELEASE, release);
|
||||
|
@ -143,8 +128,7 @@ function handle_mouseup(e)
|
|||
e.preventDefault();
|
||||
}
|
||||
|
||||
function handle_mousewheel(e)
|
||||
{
|
||||
function handle_mousewheel(e) {
|
||||
var press = new Messages.SpiceMsgcMousePress;
|
||||
var release = new Messages.SpiceMsgcMouseRelease;
|
||||
if (e.deltaY < 0)
|
||||
|
@ -166,8 +150,7 @@ function handle_mousewheel(e)
|
|||
e.preventDefault();
|
||||
}
|
||||
|
||||
function handle_keydown(e)
|
||||
{
|
||||
function handle_keydown(e) {
|
||||
var key = new Messages.SpiceMsgcKeyDown(e)
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
check_and_update_modifiers(e, key.code, this.sc);
|
||||
|
@ -178,8 +161,7 @@ function handle_keydown(e)
|
|||
e.preventDefault();
|
||||
}
|
||||
|
||||
function handle_keyup(e)
|
||||
{
|
||||
function handle_keyup(e) {
|
||||
var key = new Messages.SpiceMsgcKeyUp(e)
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
check_and_update_modifiers(e, key.code, this.sc);
|
||||
|
@ -190,9 +172,8 @@ function handle_keyup(e)
|
|||
e.preventDefault();
|
||||
}
|
||||
|
||||
function sendCtrlAltDel(sc)
|
||||
{
|
||||
if (sc && sc.inputs && sc.inputs.state === "ready"){
|
||||
function sendCtrlAltDel(sc) {
|
||||
if (sc && sc.inputs && sc.inputs.state === "ready") {
|
||||
var key = new Messages.SpiceMsgcKeyDown();
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
|
||||
|
@ -205,22 +186,55 @@ function sendCtrlAltDel(sc)
|
|||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_UP, key);
|
||||
sc.inputs.send_msg(msg);
|
||||
|
||||
if(Ctrl_state == false) update_modifier(false, KeyNames.KEY_LCtrl, sc);
|
||||
if(Alt_state == false) update_modifier(false, KeyNames.KEY_Alt, sc);
|
||||
if (Ctrl_state == false) update_modifier(false, KeyNames.KEY_LCtrl, sc);
|
||||
if (Alt_state == false) update_modifier(false, KeyNames.KEY_Alt, sc);
|
||||
}
|
||||
}
|
||||
|
||||
function update_modifier(state, code, sc)
|
||||
{
|
||||
function sendCtrlAltFN(sc, f) {
|
||||
if (sc && sc.inputs && sc.inputs.state === "ready") {
|
||||
var keys_code = [
|
||||
KeyNames.KEY_F1,
|
||||
KeyNames.KEY_F2,
|
||||
KeyNames.KEY_F3,
|
||||
KeyNames.KEY_F4,
|
||||
KeyNames.KEY_F5,
|
||||
KeyNames.KEY_F6,
|
||||
KeyNames.KEY_F7,
|
||||
KeyNames.KEY_F8,
|
||||
KeyNames.KEY_F9,
|
||||
KeyNames.KEY_F10,
|
||||
KeyNames.KEY_F11,
|
||||
KeyNames.KEY_F12];
|
||||
|
||||
if (keys_code[f] == undefined) {
|
||||
return;
|
||||
}
|
||||
var key = new Messages.SpiceMsgcKeyDown();
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
|
||||
update_modifier(true, KeyNames.KEY_LCtrl, sc);
|
||||
update_modifier(true, KeyNames.KEY_Alt, sc);
|
||||
|
||||
key.code = keys_code[f];
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_DOWN, key);
|
||||
sc.inputs.send_msg(msg);
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_UP, key);
|
||||
sc.inputs.send_msg(msg);
|
||||
|
||||
if (Ctrl_state == false) update_modifier(false, KeyNames.KEY_LCtrl, sc);
|
||||
if (Alt_state == false) update_modifier(false, KeyNames.KEY_Alt, sc);
|
||||
}
|
||||
}
|
||||
|
||||
function update_modifier(state, code, sc) {
|
||||
var msg = new Messages.SpiceMiniData();
|
||||
if (!state)
|
||||
{
|
||||
if (!state) {
|
||||
var key = new Messages.SpiceMsgcKeyUp()
|
||||
key.code =(0x80|code);
|
||||
key.code = (0x80 | code);
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_UP, key);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
var key = new Messages.SpiceMsgcKeyDown()
|
||||
key.code = code;
|
||||
msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_DOWN, key);
|
||||
|
@ -229,10 +243,8 @@ function update_modifier(state, code, sc)
|
|||
sc.inputs.send_msg(msg);
|
||||
}
|
||||
|
||||
function check_and_update_modifiers(e, code, sc)
|
||||
{
|
||||
if (Shift_state === -1)
|
||||
{
|
||||
function check_and_update_modifiers(e, code, sc) {
|
||||
if (Shift_state === -1) {
|
||||
Shift_state = e.shiftKey;
|
||||
Ctrl_state = e.ctrlKey;
|
||||
Alt_state = e.altKey;
|
||||
|
@ -247,37 +259,32 @@ function check_and_update_modifiers(e, code, sc)
|
|||
Ctrl_state = true;
|
||||
else if (code === 0xE0B5)
|
||||
Meta_state = true;
|
||||
else if (code === (0x80|KeyNames.KEY_ShiftL))
|
||||
else if (code === (0x80 | KeyNames.KEY_ShiftL))
|
||||
Shift_state = false;
|
||||
else if (code === (0x80|KeyNames.KEY_Alt))
|
||||
else if (code === (0x80 | KeyNames.KEY_Alt))
|
||||
Alt_state = false;
|
||||
else if (code === (0x80|KeyNames.KEY_LCtrl))
|
||||
else if (code === (0x80 | KeyNames.KEY_LCtrl))
|
||||
Ctrl_state = false;
|
||||
else if (code === (0x80|0xE0B5))
|
||||
else if (code === (0x80 | 0xE0B5))
|
||||
Meta_state = false;
|
||||
|
||||
if (sc && sc.inputs && sc.inputs.state === "ready")
|
||||
{
|
||||
if (Shift_state != e.shiftKey)
|
||||
{
|
||||
if (sc && sc.inputs && sc.inputs.state === "ready") {
|
||||
if (Shift_state != e.shiftKey) {
|
||||
console.log("Shift state out of sync");
|
||||
update_modifier(e.shiftKey, KeyNames.KEY_ShiftL, sc);
|
||||
Shift_state = e.shiftKey;
|
||||
}
|
||||
if (Alt_state != e.altKey)
|
||||
{
|
||||
if (Alt_state != e.altKey) {
|
||||
console.log("Alt state out of sync");
|
||||
update_modifier(e.altKey, KeyNames.KEY_Alt, sc);
|
||||
Alt_state = e.altKey;
|
||||
}
|
||||
if (Ctrl_state != e.ctrlKey)
|
||||
{
|
||||
if (Ctrl_state != e.ctrlKey) {
|
||||
console.log("Ctrl state out of sync");
|
||||
update_modifier(e.ctrlKey, KeyNames.KEY_LCtrl, sc);
|
||||
Ctrl_state = e.ctrlKey;
|
||||
}
|
||||
if (Meta_state != e.metaKey)
|
||||
{
|
||||
if (Meta_state != e.metaKey) {
|
||||
console.log("Meta state out of sync");
|
||||
update_modifier(e.metaKey, 0xE0B5, sc);
|
||||
Meta_state = e.metaKey;
|
||||
|
@ -286,13 +293,14 @@ function check_and_update_modifiers(e, code, sc)
|
|||
}
|
||||
|
||||
export {
|
||||
SpiceInputsConn,
|
||||
handle_mousemove,
|
||||
handle_mousedown,
|
||||
handle_contextmenu,
|
||||
handle_mouseup,
|
||||
handle_mousewheel,
|
||||
handle_keydown,
|
||||
handle_keyup,
|
||||
sendCtrlAltDel,
|
||||
SpiceInputsConn,
|
||||
handle_mousemove,
|
||||
handle_mousedown,
|
||||
handle_contextmenu,
|
||||
handle_mouseup,
|
||||
handle_mousewheel,
|
||||
handle_keydown,
|
||||
handle_keyup,
|
||||
sendCtrlAltDel,
|
||||
sendCtrlAltFN
|
||||
};
|
||||
|
|
|
@ -24,7 +24,7 @@ import { SpiceCursorConn } from './cursor.js';
|
|||
import { SpiceConn } from './spiceconn.js';
|
||||
import { DEBUG } from './utils.js';
|
||||
import { SpiceFileXferTask } from './filexfer.js';
|
||||
import { SpiceInputsConn, sendCtrlAltDel } from './inputs.js';
|
||||
import { SpiceInputsConn, sendCtrlAltDel, sendCtrlAltFN } from './inputs.js';
|
||||
import { SpiceDisplayConn } from './display.js';
|
||||
import { SpicePlaybackConn } from './playback.js';
|
||||
import { SpicePortConn } from './port.js';
|
||||
|
@ -63,8 +63,7 @@ import { resize_helper, handle_resize } from './resize.js';
|
|||
** browser, including WebSocket and WebSocket.binaryType == arraybuffer
|
||||
**
|
||||
**--------------------------------------------------------------------------*/
|
||||
function SpiceMainConn()
|
||||
{
|
||||
function SpiceMainConn() {
|
||||
if (typeof WebSocket === "undefined")
|
||||
throw new Error("WebSocket unavailable. You need to use a different browser.");
|
||||
|
||||
|
@ -78,47 +77,42 @@ function SpiceMainConn()
|
|||
}
|
||||
|
||||
SpiceMainConn.prototype = Object.create(SpiceConn.prototype);
|
||||
SpiceMainConn.prototype.process_channel_message = function(msg)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_BEGIN)
|
||||
{
|
||||
SpiceMainConn.prototype.process_channel_message = function (msg) {
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_BEGIN) {
|
||||
this.known_unimplemented(msg.type, "Main Migrate Begin");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_CANCEL)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_CANCEL) {
|
||||
this.known_unimplemented(msg.type, "Main Migrate Cancel");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_INIT)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_INIT) {
|
||||
this.log_info("Connected to " + this.ws.url);
|
||||
this.report_success("Connected")
|
||||
this.main_init = new Messages.SpiceMsgMainInit(msg.data);
|
||||
this.connection_id = this.main_init.session_id;
|
||||
this.agent_tokens = this.main_init.agent_tokens;
|
||||
|
||||
if (DEBUG > 0)
|
||||
{
|
||||
if (DEBUG > 0) {
|
||||
// FIXME - there is a lot here we don't handle; mouse modes, agent,
|
||||
// ram_hint, multi_media_time
|
||||
this.log_info("session id " + this.main_init.session_id +
|
||||
" ; display_channels_hint " + this.main_init.display_channels_hint +
|
||||
" ; supported_mouse_modes " + this.main_init.supported_mouse_modes +
|
||||
" ; current_mouse_mode " + this.main_init.current_mouse_mode +
|
||||
" ; agent_connected " + this.main_init.agent_connected +
|
||||
" ; agent_tokens " + this.main_init.agent_tokens +
|
||||
" ; multi_media_time " + this.main_init.multi_media_time +
|
||||
" ; ram_hint " + this.main_init.ram_hint);
|
||||
this.log_info("session id " + this.main_init.session_id +
|
||||
" ; display_channels_hint " + this.main_init.display_channels_hint +
|
||||
" ; supported_mouse_modes " + this.main_init.supported_mouse_modes +
|
||||
" ; current_mouse_mode " + this.main_init.current_mouse_mode +
|
||||
" ; agent_connected " + this.main_init.agent_connected +
|
||||
" ; agent_tokens " + this.main_init.agent_tokens +
|
||||
" ; multi_media_time " + this.main_init.multi_media_time +
|
||||
" ; ram_hint " + this.main_init.ram_hint);
|
||||
}
|
||||
|
||||
this.our_mm_time = Date.now();
|
||||
this.mm_time = this.main_init.multi_media_time;
|
||||
|
||||
this.handle_mouse_mode(this.main_init.current_mouse_mode,
|
||||
this.main_init.supported_mouse_modes);
|
||||
this.main_init.supported_mouse_modes);
|
||||
|
||||
if (this.main_init.agent_connected)
|
||||
this.connect_agent();
|
||||
|
@ -130,45 +124,39 @@ SpiceMainConn.prototype.process_channel_message = function(msg)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MOUSE_MODE)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MOUSE_MODE) {
|
||||
var mode = new Messages.SpiceMsgMainMouseMode(msg.data);
|
||||
DEBUG > 0 && this.log_info("Mouse supported modes " + mode.supported_modes + "; current " + mode.current_mode);
|
||||
this.handle_mouse_mode(mode.current_mode, mode.supported_modes);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MULTI_MEDIA_TIME)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MULTI_MEDIA_TIME) {
|
||||
this.known_unimplemented(msg.type, "Main Multi Media Time");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_CHANNELS_LIST)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_CHANNELS_LIST) {
|
||||
var i;
|
||||
var chans;
|
||||
DEBUG > 0 && console.log("channels");
|
||||
chans = new Messages.SpiceMsgChannels(msg.data);
|
||||
for (i = 0; i < chans.channels.length; i++)
|
||||
{
|
||||
for (i = 0; i < chans.channels.length; i++) {
|
||||
var conn = {
|
||||
uri: this.ws.url,
|
||||
parent: this,
|
||||
connection_id : this.connection_id,
|
||||
type : chans.channels[i].type,
|
||||
chan_id : chans.channels[i].id
|
||||
};
|
||||
if (chans.channels[i].type == Constants.SPICE_CHANNEL_DISPLAY)
|
||||
{
|
||||
uri: this.ws.url,
|
||||
parent: this,
|
||||
connection_id: this.connection_id,
|
||||
type: chans.channels[i].type,
|
||||
chan_id: chans.channels[i].id
|
||||
};
|
||||
if (chans.channels[i].type == Constants.SPICE_CHANNEL_DISPLAY) {
|
||||
if (chans.channels[i].id == 0) {
|
||||
this.display = new SpiceDisplayConn(conn);
|
||||
} else {
|
||||
this.log_warn("The spice-html5 client does not handle multiple heads.");
|
||||
}
|
||||
}
|
||||
else if (chans.channels[i].type == Constants.SPICE_CHANNEL_INPUTS)
|
||||
{
|
||||
else if (chans.channels[i].type == Constants.SPICE_CHANNEL_INPUTS) {
|
||||
this.inputs = new SpiceInputsConn(conn);
|
||||
this.inputs.mouse_mode = this.mouse_mode;
|
||||
}
|
||||
|
@ -178,9 +166,8 @@ SpiceMainConn.prototype.process_channel_message = function(msg)
|
|||
this.cursor = new SpicePlaybackConn(conn);
|
||||
else if (chans.channels[i].type == Constants.SPICE_CHANNEL_PORT)
|
||||
this.ports.push(new SpicePortConn(conn));
|
||||
else
|
||||
{
|
||||
if (! ("extra_channels" in this))
|
||||
else {
|
||||
if (!("extra_channels" in this))
|
||||
this.extra_channels = [];
|
||||
this.extra_channels[i] = new SpiceConn(conn);
|
||||
this.log_err("Channel type " + this.extra_channels[i].channel_type() + " not implemented");
|
||||
|
@ -191,29 +178,25 @@ SpiceMainConn.prototype.process_channel_message = function(msg)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_CONNECTED)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_CONNECTED) {
|
||||
this.connect_agent();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS) {
|
||||
var connected_tokens = new Messages.SpiceMsgMainAgentTokens(msg.data);
|
||||
this.agent_tokens = connected_tokens.num_tokens;
|
||||
this.connect_agent();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_TOKEN)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_TOKEN) {
|
||||
var remaining_tokens, tokens = new Messages.SpiceMsgMainAgentTokens(msg.data);
|
||||
this.agent_tokens += tokens.num_tokens;
|
||||
this.send_agent_message_queue();
|
||||
|
||||
remaining_tokens = this.agent_tokens;
|
||||
while (remaining_tokens > 0 && this.file_xfer_read_queue.length > 0)
|
||||
{
|
||||
while (remaining_tokens > 0 && this.file_xfer_read_queue.length > 0) {
|
||||
var xfer_task = this.file_xfer_read_queue.shift();
|
||||
this.file_xfer_read(xfer_task, xfer_task.read_bytes);
|
||||
remaining_tokens--;
|
||||
|
@ -221,24 +204,20 @@ SpiceMainConn.prototype.process_channel_message = function(msg)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_DISCONNECTED)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_DISCONNECTED) {
|
||||
this.agent_connected = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_DATA)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_DATA) {
|
||||
var agent_data = new Messages.SpiceMsgMainAgentData(msg.data);
|
||||
if (agent_data.type == Constants.VD_AGENT_ANNOUNCE_CAPABILITIES)
|
||||
{
|
||||
if (agent_data.type == Constants.VD_AGENT_ANNOUNCE_CAPABILITIES) {
|
||||
var agent_caps = new Messages.VDAgentAnnounceCapabilities(agent_data.data);
|
||||
if (agent_caps.request)
|
||||
this.announce_agent_capabilities(0);
|
||||
return true;
|
||||
}
|
||||
else if (agent_data.type == Constants.VD_AGENT_FILE_XFER_STATUS)
|
||||
{
|
||||
else if (agent_data.type == Constants.VD_AGENT_FILE_XFER_STATUS) {
|
||||
this.handle_file_xfer_status(new Messages.VDAgentFileXferStatusMessage(agent_data.data));
|
||||
return true;
|
||||
}
|
||||
|
@ -246,44 +225,37 @@ SpiceMainConn.prototype.process_channel_message = function(msg)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_SWITCH_HOST)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_SWITCH_HOST) {
|
||||
this.known_unimplemented(msg.type, "Main Migrate Switch Host");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_END)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_END) {
|
||||
this.known_unimplemented(msg.type, "Main Migrate End");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_NAME)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_NAME) {
|
||||
this.known_unimplemented(msg.type, "Main Name");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_UUID)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_UUID) {
|
||||
this.known_unimplemented(msg.type, "Main UUID");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_BEGIN_SEAMLESS)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_BEGIN_SEAMLESS) {
|
||||
this.known_unimplemented(msg.type, "Main Migrate Begin Seamless");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_ACK)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_ACK) {
|
||||
this.known_unimplemented(msg.type, "Main Migrate Dst Seamless ACK");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_NACK)
|
||||
{
|
||||
if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_NACK) {
|
||||
this.known_unimplemented(msg.type, "Main Migrate Dst Seamless NACK");
|
||||
return true;
|
||||
}
|
||||
|
@ -291,24 +263,20 @@ SpiceMainConn.prototype.process_channel_message = function(msg)
|
|||
return false;
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.stop = function(msg)
|
||||
{
|
||||
SpiceMainConn.prototype.stop = function (msg) {
|
||||
this.state = "closing";
|
||||
|
||||
if (this.inputs)
|
||||
{
|
||||
if (this.inputs) {
|
||||
this.inputs.cleanup();
|
||||
this.inputs = undefined;
|
||||
}
|
||||
|
||||
if (this.cursor)
|
||||
{
|
||||
if (this.cursor) {
|
||||
this.cursor.cleanup();
|
||||
this.cursor = undefined;
|
||||
}
|
||||
|
||||
if (this.display)
|
||||
{
|
||||
if (this.display) {
|
||||
this.display.cleanup();
|
||||
this.display.destroy_surfaces();
|
||||
this.display = undefined;
|
||||
|
@ -322,30 +290,26 @@ SpiceMainConn.prototype.stop = function(msg)
|
|||
this.extra_channels = undefined;
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.send_agent_message_queue = function(message)
|
||||
{
|
||||
SpiceMainConn.prototype.send_agent_message_queue = function (message) {
|
||||
if (!this.agent_connected)
|
||||
return;
|
||||
|
||||
if (message)
|
||||
this.agent_msg_queue.push(message);
|
||||
|
||||
while (this.agent_tokens > 0 && this.agent_msg_queue.length > 0)
|
||||
{
|
||||
while (this.agent_tokens > 0 && this.agent_msg_queue.length > 0) {
|
||||
var mr = this.agent_msg_queue.shift();
|
||||
this.send_msg(mr);
|
||||
this.agent_tokens--;
|
||||
}
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.send_agent_message = function(type, message)
|
||||
{
|
||||
SpiceMainConn.prototype.send_agent_message = function (type, message) {
|
||||
var agent_data = new Messages.SpiceMsgcMainAgentData(type, message);
|
||||
var sb = 0, maxsize = Constants.VD_AGENT_MAX_DATA_SIZE - Messages.SpiceMiniData.prototype.buffer_size();
|
||||
var data = new ArrayBuffer(agent_data.buffer_size());
|
||||
agent_data.to_buffer(data);
|
||||
while (sb < agent_data.buffer_size())
|
||||
{
|
||||
while (sb < agent_data.buffer_size()) {
|
||||
var eb = Math.min(sb + maxsize, agent_data.buffer_size());
|
||||
var mr = new Messages.SpiceMiniData();
|
||||
mr.type = Constants.SPICE_MSGC_MAIN_AGENT_DATA;
|
||||
|
@ -356,22 +320,19 @@ SpiceMainConn.prototype.send_agent_message = function(type, message)
|
|||
}
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.announce_agent_capabilities = function(request)
|
||||
{
|
||||
SpiceMainConn.prototype.announce_agent_capabilities = function (request) {
|
||||
var caps = new Messages.VDAgentAnnounceCapabilities(request, (1 << Constants.VD_AGENT_CAP_MOUSE_STATE) |
|
||||
(1 << Constants.VD_AGENT_CAP_MONITORS_CONFIG) |
|
||||
(1 << Constants.VD_AGENT_CAP_REPLY));
|
||||
(1 << Constants.VD_AGENT_CAP_MONITORS_CONFIG) |
|
||||
(1 << Constants.VD_AGENT_CAP_REPLY));
|
||||
this.send_agent_message(Constants.VD_AGENT_ANNOUNCE_CAPABILITIES, caps);
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.resize_window = function(flags, width, height, depth, x, y)
|
||||
{
|
||||
SpiceMainConn.prototype.resize_window = function (flags, width, height, depth, x, y) {
|
||||
var monitors_config = new Messages.VDAgentMonitorsConfig(flags, width, height, depth, x, y);
|
||||
this.send_agent_message(Constants.VD_AGENT_MONITORS_CONFIG, monitors_config);
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.file_xfer_start = function(file)
|
||||
{
|
||||
SpiceMainConn.prototype.file_xfer_start = function (file) {
|
||||
var task_id, xfer_start, task;
|
||||
|
||||
task_id = this.file_xfer_task_id++;
|
||||
|
@ -382,16 +343,13 @@ SpiceMainConn.prototype.file_xfer_start = function(file)
|
|||
this.send_agent_message(Constants.VD_AGENT_FILE_XFER_START, xfer_start);
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.handle_file_xfer_status = function(file_xfer_status)
|
||||
{
|
||||
SpiceMainConn.prototype.handle_file_xfer_status = function (file_xfer_status) {
|
||||
var xfer_error, xfer_task;
|
||||
if (!this.file_xfer_tasks[file_xfer_status.id])
|
||||
{
|
||||
if (!this.file_xfer_tasks[file_xfer_status.id]) {
|
||||
return;
|
||||
}
|
||||
xfer_task = this.file_xfer_tasks[file_xfer_status.id];
|
||||
switch (file_xfer_status.result)
|
||||
{
|
||||
switch (file_xfer_status.result) {
|
||||
case Constants.VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA:
|
||||
this.file_xfer_read(xfer_task);
|
||||
return;
|
||||
|
@ -411,8 +369,7 @@ SpiceMainConn.prototype.handle_file_xfer_status = function(file_xfer_status)
|
|||
this.file_xfer_completed(xfer_task, xfer_error)
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.file_xfer_read = function(file_xfer_task, start_byte)
|
||||
{
|
||||
SpiceMainConn.prototype.file_xfer_read = function (file_xfer_task, start_byte) {
|
||||
var FILE_XFER_CHUNK_SIZE = 32 * Constants.VD_AGENT_MAX_DATA_SIZE;
|
||||
var _this = this;
|
||||
var sb, eb;
|
||||
|
@ -420,36 +377,32 @@ SpiceMainConn.prototype.file_xfer_read = function(file_xfer_task, start_byte)
|
|||
|
||||
if (!file_xfer_task ||
|
||||
!this.file_xfer_tasks[file_xfer_task.id] ||
|
||||
(start_byte > 0 && start_byte == file_xfer_task.file.size))
|
||||
{
|
||||
(start_byte > 0 && start_byte == file_xfer_task.file.size)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (file_xfer_task.cancelled)
|
||||
{
|
||||
if (file_xfer_task.cancelled) {
|
||||
var xfer_status = new Messages.VDAgentFileXferStatusMessage(file_xfer_task.id,
|
||||
Constants.VD_AGENT_FILE_XFER_STATUS_CANCELLED);
|
||||
Constants.VD_AGENT_FILE_XFER_STATUS_CANCELLED);
|
||||
this.send_agent_message(Constants.VD_AGENT_FILE_XFER_STATUS, xfer_status);
|
||||
delete this.file_xfer_tasks[file_xfer_task.id];
|
||||
return;
|
||||
}
|
||||
|
||||
sb = start_byte || 0,
|
||||
eb = Math.min(sb + FILE_XFER_CHUNK_SIZE, file_xfer_task.file.size);
|
||||
eb = Math.min(sb + FILE_XFER_CHUNK_SIZE, file_xfer_task.file.size);
|
||||
|
||||
if (!this.agent_tokens)
|
||||
{
|
||||
if (!this.agent_tokens) {
|
||||
file_xfer_task.read_bytes = sb;
|
||||
this.file_xfer_read_queue.push(file_xfer_task);
|
||||
return;
|
||||
}
|
||||
|
||||
reader = new FileReader();
|
||||
reader.onload = function(e)
|
||||
{
|
||||
reader.onload = function (e) {
|
||||
var xfer_data = new Messages.VDAgentFileXferDataMessage(file_xfer_task.id,
|
||||
e.target.result.byteLength,
|
||||
e.target.result);
|
||||
e.target.result.byteLength,
|
||||
e.target.result);
|
||||
_this.send_agent_message(Constants.VD_AGENT_FILE_XFER_DATA, xfer_data);
|
||||
_this.file_xfer_read(file_xfer_task, eb);
|
||||
file_xfer_task.update_progressbar(eb);
|
||||
|
@ -459,20 +412,18 @@ SpiceMainConn.prototype.file_xfer_read = function(file_xfer_task, start_byte)
|
|||
reader.readAsArrayBuffer(slice);
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.file_xfer_completed = function(file_xfer_task, error)
|
||||
{
|
||||
SpiceMainConn.prototype.file_xfer_completed = function (file_xfer_task, error) {
|
||||
if (error)
|
||||
this.log_err(error);
|
||||
else
|
||||
this.log_info("transfer of '" + file_xfer_task.file.name +"' was successful");
|
||||
this.log_info("transfer of '" + file_xfer_task.file.name + "' was successful");
|
||||
|
||||
file_xfer_task.remove_progressbar();
|
||||
|
||||
delete this.file_xfer_tasks[file_xfer_task.id];
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.connect_agent = function()
|
||||
{
|
||||
SpiceMainConn.prototype.connect_agent = function () {
|
||||
this.agent_connected = true;
|
||||
|
||||
var agent_start = new Messages.SpiceMsgcMainAgentStart(~0);
|
||||
|
@ -487,11 +438,9 @@ SpiceMainConn.prototype.connect_agent = function()
|
|||
|
||||
}
|
||||
|
||||
SpiceMainConn.prototype.handle_mouse_mode = function(current, supported)
|
||||
{
|
||||
SpiceMainConn.prototype.handle_mouse_mode = function (current, supported) {
|
||||
this.mouse_mode = current;
|
||||
if (current != Constants.SPICE_MOUSE_MODE_CLIENT && (supported & Constants.SPICE_MOUSE_MODE_CLIENT))
|
||||
{
|
||||
if (current != Constants.SPICE_MOUSE_MODE_CLIENT && (supported & Constants.SPICE_MOUSE_MODE_CLIENT)) {
|
||||
var mode_request = new Messages.SpiceMsgcMainMouseModeRequest(Constants.SPICE_MOUSE_MODE_CLIENT);
|
||||
var mr = new Messages.SpiceMiniData();
|
||||
mr.build_msg(Constants.SPICE_MSGC_MAIN_MOUSE_MODE_REQUEST, mode_request);
|
||||
|
@ -503,17 +452,17 @@ SpiceMainConn.prototype.handle_mouse_mode = function(current, supported)
|
|||
}
|
||||
|
||||
/* Shift current time to attempt to get a time matching that of the server */
|
||||
SpiceMainConn.prototype.relative_now = function()
|
||||
{
|
||||
SpiceMainConn.prototype.relative_now = function () {
|
||||
var ret = (Date.now() - this.our_mm_time) + this.mm_time;
|
||||
return ret;
|
||||
}
|
||||
|
||||
export {
|
||||
SpiceMainConn,
|
||||
handle_file_dragover,
|
||||
handle_file_drop,
|
||||
resize_helper,
|
||||
handle_resize,
|
||||
sendCtrlAltDel,
|
||||
SpiceMainConn,
|
||||
handle_file_dragover,
|
||||
handle_file_drop,
|
||||
resize_helper,
|
||||
handle_resize,
|
||||
sendCtrlAltDel,
|
||||
sendCtrlAltFN,
|
||||
};
|
||||
|
|
|
@ -63,7 +63,6 @@ body
|
|||
|
||||
#spice-area
|
||||
{
|
||||
height: 100%;
|
||||
width: 95%;
|
||||
padding: 0;
|
||||
margin-left: auto;
|
||||
|
@ -74,13 +73,13 @@ body
|
|||
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.2);
|
||||
-moz-border-radius: 10px;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
.spice-screen
|
||||
{
|
||||
min-height: 600px;
|
||||
height: 100%;
|
||||
margin: 10px;
|
||||
margin: 5px;
|
||||
padding: 0;
|
||||
background-color: #333333;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue