From 4f8a1fd50d345e40e873e6689921705f18cd333a Mon Sep 17 00:00:00 2001 From: catborise Date: Wed, 24 Jun 2020 12:39:32 +0300 Subject: [PATCH] fix console password & sendkey & css fixes & add scale vb --- console/templates/console-base.html | 167 ++++---- console/templates/console-spice-full.html | 299 +++++++------- console/templates/console-spice-lite.html | 347 +++++++++-------- console/templates/console-vnc-lite.html | 454 +++++++++------------- console/views.py | 4 + static/js/novnc/app/styles/lite.css | 2 +- static/js/spice-html5/inputs.js | 158 ++++---- static/js/spice-html5/main.js | 217 ++++------- static/js/spice-html5/spice.css | 5 +- 9 files changed, 767 insertions(+), 886 deletions(-) diff --git a/console/templates/console-base.html b/console/templates/console-base.html index be027ec..7875f7e 100644 --- a/console/templates/console-base.html +++ b/console/templates/console-base.html @@ -1,6 +1,7 @@ {% load staticfiles %} {% load i18n %} + @@ -9,19 +10,13 @@ -{% block head %}{% endblock %} + {% block head %}{% endblock %} -
- + {% block content %}{% endblock %} +
+ + -{% block content %}{% endblock %} - - - - - + {% endif %} + -{% block foot %}{% endblock %} + {% block foot %}{% endblock %} - + + \ No newline at end of file diff --git a/console/templates/console-spice-full.html b/console/templates/console-spice-full.html index aac780d..6c3d635 100644 --- a/console/templates/console-spice-full.html +++ b/console/templates/console-spice-full.html @@ -27,138 +27,116 @@ {% load staticfiles %} {% block head %} - WebVirtCloud - Spice Client - Full - +WebVirtCloud - Spice Client - Full + - - - + + + - - + + + - + function sendctrlaltfn(f) { + SpiceHtml5.sendCtrlAltFN(sc, f); + return false; + } + + /* SPICE port event listeners + window.addEventListener('spice-port-data', function(event) { + // Here we convert data to text, but really we can obtain binary data also + var msg_text = arraybuffer_to_str(new Uint8Array(event.detail.data)); + DEBUG > 0 && console.log('SPICE port', event.detail.channel.portName, 'message text:', msg_text); + }); + + window.addEventListener('spice-port-event', function(event) { + DEBUG > 0 && console.log('SPICE port', event.detail.channel.portName, 'event data:', event.detail.spiceEvent); + }); + */ + document.getElementById("fullscreen_button").addEventListener('click', fullscreen); + document.getElementById('ctrlaltdel').addEventListener('click', function () { sendCtrlAltDel(sc); }); + document.getElementById('ctrlaltf1').addEventListener('click', function () { sendctrlaltfn(0) }); + document.getElementById('ctrlaltf2').addEventListener('click', function () { sendctrlaltfn(1) }); + document.getElementById('ctrlaltf3').addEventListener('click', function () { sendctrlaltfn(2) }); + document.getElementById('ctrlaltf4').addEventListener('click', function () { sendctrlaltfn(3) }); + document.getElementById('ctrlaltf5').addEventListener('click', function () { sendctrlaltfn(4) }); + document.getElementById('ctrlaltf6').addEventListener('click', function () { sendctrlaltfn(5) }); + document.getElementById('ctrlaltf7').addEventListener('click', function () { sendctrlaltfn(6) }); + document.getElementById('ctrlaltf8').addEventListener('click', function () { sendctrlaltfn(7) }); + document.getElementById('ctrlaltf9').addEventListener('click', function () { sendctrlaltfn(8) }); + document.getElementById('ctrlaltf10').addEventListener('click', function () { sendctrlaltfn(9) }); + document.getElementById('ctrlaltf11').addEventListener('click', function () { sendctrlaltfn(10) }); + document.getElementById('ctrlaltf12').addEventListener('click', function () { sendctrlaltfn(11) }); + connect(undefined); + {% endblock %} {% block content %} -
-
-
+
+
+
-
+
-
- -
-{% endblock %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/console/templates/console-vnc-lite.html b/console/templates/console-vnc-lite.html index 70e10e6..3fd7db2 100755 --- a/console/templates/console-vnc-lite.html +++ b/console/templates/console-vnc-lite.html @@ -3,306 +3,228 @@ {% load staticfiles %} {% block head %} - - WebVirtCloud - noVNC - Lite + http://example.com/?host=HOST&port=PORT&scale=true +--> +WebVirtCloud - noVNC - Lite - + - - + + - - - - - - - - - - - - - - - - - + + - - - - - - - - - + + - - + + - + + - - - + let rfb; + let desktopName; - - + {% endblock %} - {% block content %} -
-
-
{% trans 'Loading' %}
-
- - - - - - -
+
+
+
{% trans 'Loading' %}
+
+ + + + + +
-
-{% endblock %} +
+
+ +
+{% endblock %} \ No newline at end of file diff --git a/console/views.py b/console/views.py index 27d864f..e7fc64a 100644 --- a/console/views.py +++ b/console/views.py @@ -16,6 +16,10 @@ def console(request): if request.method == 'GET': token = request.GET.get('token', '') view_type = request.GET.get('view', 'lite') + view_only = request.GET.get('view_only', 0) + scale = request.GET.get('scale', 0) + resize_session = request.GET.get('resize_session', 0) + clip_viewport = request.GET.get('clip_viewport', 0) try: temptoken = token.split('-', 1) diff --git a/static/js/novnc/app/styles/lite.css b/static/js/novnc/app/styles/lite.css index a6a9218..39d45ef 100755 --- a/static/js/novnc/app/styles/lite.css +++ b/static/js/novnc/app/styles/lite.css @@ -10,7 +10,7 @@ body { margin:0; background-color:#313131; border-bottom-right-radius: 800px 600px; - height:100%; + height: 100%; display: flex; flex-direction: column; } diff --git a/static/js/spice-html5/inputs.js b/static/js/spice-html5/inputs.js index c6fd3f7..ff9f3e6 100755 --- a/static/js/spice-html5/inputs.js +++ b/static/js/spice-html5/inputs.js @@ -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 }; diff --git a/static/js/spice-html5/main.js b/static/js/spice-html5/main.js index 4a37b55..eac6f57 100755 --- a/static/js/spice-html5/main.js +++ b/static/js/spice-html5/main.js @@ -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, }; diff --git a/static/js/spice-html5/spice.css b/static/js/spice-html5/spice.css index 968ba16..2ffe5e6 100755 --- a/static/js/spice-html5/spice.css +++ b/static/js/spice-html5/spice.css @@ -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; }