From 2c08f20c25985ce3a484ceb9065504ac8b94cae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= Date: Thu, 14 Feb 2019 10:44:46 +0100 Subject: [PATCH] Introduce ES6 modules Avoid cluttering the global namespace. Use ES6 modules in order to to this. Signed-off-by: Jeremy White --- TODO | 3 - atKeynames.js | 186 +- bitmap.js | 15 +- cursor.js | 35 +- display.js | 282 +- enums.js | 596 +- filexfer.js | 6 + inputs.js | 128 +- lz.js | 28 +- main.js | 143 +- playback.js | 95 +- png.js | 6 + port.js | 15 +- quic.js | 51 +- resize.js | 5 + simulatecursor.js | 6 + spice.html | 50 +- spice_auto.html | 51 +- spiceconn.js | 107 +- spicedataview.js | 4 + spicemsg.js | 95 +- spicetype.js | 46 +- .../browser-es-module-loader/.npmignore | 0 thirdparty/browser-es-module-loader/README.md | 15 + .../dist/babel-worker.js | 55799 ++++++++++++++++ .../dist/browser-es-module-loader.js | 1486 + .../dist/browser-es-module-loader.js.map | 1 + .../browser-es-module-loader/rollup.config.js | 16 + .../src/babel-worker.js | 25 + .../src/browser-es-module-loader.js | 280 + thirdparty/jsbn.js | 4 + thirdparty/prng4.js | 5 + thirdparty/rng.js | 5 + thirdparty/rsa.js | 7 + thirdparty/sha1.js | 5 + ticket.js | 10 + utils.js | 197 +- webm.js | 38 +- wire.js | 8 + 39 files changed, 58894 insertions(+), 960 deletions(-) create mode 100644 thirdparty/browser-es-module-loader/.npmignore create mode 100644 thirdparty/browser-es-module-loader/README.md create mode 100644 thirdparty/browser-es-module-loader/dist/babel-worker.js create mode 100644 thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js create mode 100644 thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js.map create mode 100644 thirdparty/browser-es-module-loader/rollup.config.js create mode 100644 thirdparty/browser-es-module-loader/src/babel-worker.js create mode 100644 thirdparty/browser-es-module-loader/src/browser-es-module-loader.js diff --git a/TODO b/TODO index 64fc326..8f655d3 100644 --- a/TODO +++ b/TODO @@ -25,9 +25,6 @@ Medium Tasks: Big Tasks: - . Shift the code so it doesn't pollute the global namespace; that - will make it more usable as an embed or library - . Generate messages + enums from spice.proto . Video: diff --git a/atKeynames.js b/atKeynames.js index e1e27fd..110e9e9 100644 --- a/atKeynames.js +++ b/atKeynames.js @@ -82,6 +82,8 @@ * 2) Use the keyboards native set and translate it to common keysyms. */ + +var KeyNames = { /* * definition of the AT84/MF101/MF102 Keyboard: * ============================================================ @@ -89,95 +91,99 @@ * Key Name Main Also (hex) (dec) * ---------------- ---------- ------- ------ ------ */ + KEY_Escape :/* Escape 0x01 */ 1, + KEY_1 :/* 1 ! 0x02 */ 2, + KEY_2 :/* 2 @ 0x03 */ 3, + KEY_3 :/* 3 # 0x04 */ 4, + KEY_4 :/* 4 $ 0x05 */ 5, + KEY_5 :/* 5 % 0x06 */ 6, + KEY_6 :/* 6 ^ 0x07 */ 7, + KEY_7 :/* 7 & 0x08 */ 8, + KEY_8 :/* 8 * 0x09 */ 9, + KEY_9 :/* 9 ( 0x0a */ 10, + KEY_0 :/* 0 ) 0x0b */ 11, + KEY_Minus :/* - (Minus) _ (Under) 0x0c */ 12, + KEY_Equal :/* = (Equal) + 0x0d */ 13, + KEY_BackSpace :/* Back Space 0x0e */ 14, + KEY_Tab :/* Tab 0x0f */ 15, + KEY_Q :/* Q 0x10 */ 16, + KEY_W :/* W 0x11 */ 17, + KEY_E :/* E 0x12 */ 18, + KEY_R :/* R 0x13 */ 19, + KEY_T :/* T 0x14 */ 20, + KEY_Y :/* Y 0x15 */ 21, + KEY_U :/* U 0x16 */ 22, + KEY_I :/* I 0x17 */ 23, + KEY_O :/* O 0x18 */ 24, + KEY_P :/* P 0x19 */ 25, + KEY_LBrace :/* [ { 0x1a */ 26, + KEY_RBrace :/* ] } 0x1b */ 27, + KEY_Enter :/* Enter 0x1c */ 28, + KEY_LCtrl :/* Ctrl(left) 0x1d */ 29, + KEY_A :/* A 0x1e */ 30, + KEY_S :/* S 0x1f */ 31, + KEY_D :/* D 0x20 */ 32, + KEY_F :/* F 0x21 */ 33, + KEY_G :/* G 0x22 */ 34, + KEY_H :/* H 0x23 */ 35, + KEY_J :/* J 0x24 */ 36, + KEY_K :/* K 0x25 */ 37, + KEY_L :/* L 0x26 */ 38, + KEY_SemiColon :/* ;(SemiColon) :(Colon) 0x27 */ 39, + KEY_Quote :/* ' (Apostr) " (Quote) 0x28 */ 40, + KEY_Tilde :/* ` (Accent) ~ (Tilde) 0x29 */ 41, + KEY_ShiftL :/* Shift(left) 0x2a */ 42, + KEY_BSlash :/* \(BckSlash) |(VertBar)0x2b */ 43, + KEY_Z :/* Z 0x2c */ 44, + KEY_X :/* X 0x2d */ 45, + KEY_C :/* C 0x2e */ 46, + KEY_V :/* V 0x2f */ 47, + KEY_B :/* B 0x30 */ 48, + KEY_N :/* N 0x31 */ 49, + KEY_M :/* M 0x32 */ 50, + KEY_Comma :/* , (Comma) < (Less) 0x33 */ 51, + KEY_Period :/* . (Period) >(Greater)0x34 */ 52, + KEY_Slash :/* / (Slash) ? 0x35 */ 53, + KEY_ShiftR :/* Shift(right) 0x36 */ 54, + KEY_KP_Multiply :/* * 0x37 */ 55, + KEY_Alt :/* Alt(left) 0x38 */ 56, + KEY_Space :/* (SpaceBar) 0x39 */ 57, + KEY_CapsLock :/* CapsLock 0x3a */ 58, + KEY_F1 :/* F1 0x3b */ 59, + KEY_F2 :/* F2 0x3c */ 60, + KEY_F3 :/* F3 0x3d */ 61, + KEY_F4 :/* F4 0x3e */ 62, + KEY_F5 :/* F5 0x3f */ 63, + KEY_F6 :/* F6 0x40 */ 64, + KEY_F7 :/* F7 0x41 */ 65, + KEY_F8 :/* F8 0x42 */ 66, + KEY_F9 :/* F9 0x43 */ 67, + KEY_F10 :/* F10 0x44 */ 68, + KEY_NumLock :/* NumLock 0x45 */ 69, + KEY_ScrollLock :/* ScrollLock 0x46 */ 70, + KEY_KP_7 :/* 7 Home 0x47 */ 71, + KEY_KP_8 :/* 8 Up 0x48 */ 72, + KEY_KP_9 :/* 9 PgUp 0x49 */ 73, + KEY_KP_Minus :/* - (Minus) 0x4a */ 74, + KEY_KP_4 :/* 4 Left 0x4b */ 75, + KEY_KP_5 :/* 5 0x4c */ 76, + KEY_KP_6 :/* 6 Right 0x4d */ 77, + KEY_KP_Plus :/* + (Plus) 0x4e */ 78, + KEY_KP_1 :/* 1 End 0x4f */ 79, + KEY_KP_2 :/* 2 Down 0x50 */ 80, + KEY_KP_3 :/* 3 PgDown 0x51 */ 81, + KEY_KP_0 :/* 0 Insert 0x52 */ 82, + KEY_KP_Decimal :/* . (Decimal) Delete 0x53 */ 83, + KEY_SysReqest :/* SysReqest 0x54 */ 84, + /* NOTUSED 0x55 */ + KEY_Less :/* < (Less) >(Greater) 0x56 */ 86, + KEY_F11 :/* F11 0x57 */ 87, + KEY_F12 :/* F12 0x58 */ 88, -var KEY_Escape =/* Escape 0x01 */ 1 -var KEY_1 =/* 1 ! 0x02 */ 2 -var KEY_2 =/* 2 @ 0x03 */ 3 -var KEY_3 =/* 3 # 0x04 */ 4 -var KEY_4 =/* 4 $ 0x05 */ 5 -var KEY_5 =/* 5 % 0x06 */ 6 -var KEY_6 =/* 6 ^ 0x07 */ 7 -var KEY_7 =/* 7 & 0x08 */ 8 -var KEY_8 =/* 8 * 0x09 */ 9 -var KEY_9 =/* 9 ( 0x0a */ 10 -var KEY_0 =/* 0 ) 0x0b */ 11 -var KEY_Minus =/* - (Minus) _ (Under) 0x0c */ 12 -var KEY_Equal =/* = (Equal) + 0x0d */ 13 -var KEY_BackSpace =/* Back Space 0x0e */ 14 -var KEY_Tab =/* Tab 0x0f */ 15 -var KEY_Q =/* Q 0x10 */ 16 -var KEY_W =/* W 0x11 */ 17 -var KEY_E =/* E 0x12 */ 18 -var KEY_R =/* R 0x13 */ 19 -var KEY_T =/* T 0x14 */ 20 -var KEY_Y =/* Y 0x15 */ 21 -var KEY_U =/* U 0x16 */ 22 -var KEY_I =/* I 0x17 */ 23 -var KEY_O =/* O 0x18 */ 24 -var KEY_P =/* P 0x19 */ 25 -var KEY_LBrace =/* [ { 0x1a */ 26 -var KEY_RBrace =/* ] } 0x1b */ 27 -var KEY_Enter =/* Enter 0x1c */ 28 -var KEY_LCtrl =/* Ctrl(left) 0x1d */ 29 -var KEY_A =/* A 0x1e */ 30 -var KEY_S =/* S 0x1f */ 31 -var KEY_D =/* D 0x20 */ 32 -var KEY_F =/* F 0x21 */ 33 -var KEY_G =/* G 0x22 */ 34 -var KEY_H =/* H 0x23 */ 35 -var KEY_J =/* J 0x24 */ 36 -var KEY_K =/* K 0x25 */ 37 -var KEY_L =/* L 0x26 */ 38 -var KEY_SemiColon =/* ;(SemiColon) :(Colon) 0x27 */ 39 -var KEY_Quote =/* ' (Apostr) " (Quote) 0x28 */ 40 -var KEY_Tilde =/* ` (Accent) ~ (Tilde) 0x29 */ 41 -var KEY_ShiftL =/* Shift(left) 0x2a */ 42 -var KEY_BSlash =/* \(BckSlash) |(VertBar)0x2b */ 43 -var KEY_Z =/* Z 0x2c */ 44 -var KEY_X =/* X 0x2d */ 45 -var KEY_C =/* C 0x2e */ 46 -var KEY_V =/* V 0x2f */ 47 -var KEY_B =/* B 0x30 */ 48 -var KEY_N =/* N 0x31 */ 49 -var KEY_M =/* M 0x32 */ 50 -var KEY_Comma =/* , (Comma) < (Less) 0x33 */ 51 -var KEY_Period =/* . (Period) >(Greater)0x34 */ 52 -var KEY_Slash =/* / (Slash) ? 0x35 */ 53 -var KEY_ShiftR =/* Shift(right) 0x36 */ 54 -var KEY_KP_Multiply =/* * 0x37 */ 55 -var KEY_Alt =/* Alt(left) 0x38 */ 56 -var KEY_Space =/* (SpaceBar) 0x39 */ 57 -var KEY_CapsLock =/* CapsLock 0x3a */ 58 -var KEY_F1 =/* F1 0x3b */ 59 -var KEY_F2 =/* F2 0x3c */ 60 -var KEY_F3 =/* F3 0x3d */ 61 -var KEY_F4 =/* F4 0x3e */ 62 -var KEY_F5 =/* F5 0x3f */ 63 -var KEY_F6 =/* F6 0x40 */ 64 -var KEY_F7 =/* F7 0x41 */ 65 -var KEY_F8 =/* F8 0x42 */ 66 -var KEY_F9 =/* F9 0x43 */ 67 -var KEY_F10 =/* F10 0x44 */ 68 -var KEY_NumLock =/* NumLock 0x45 */ 69 -var KEY_ScrollLock =/* ScrollLock 0x46 */ 70 -var KEY_KP_7 =/* 7 Home 0x47 */ 71 -var KEY_KP_8 =/* 8 Up 0x48 */ 72 -var KEY_KP_9 =/* 9 PgUp 0x49 */ 73 -var KEY_KP_Minus =/* - (Minus) 0x4a */ 74 -var KEY_KP_4 =/* 4 Left 0x4b */ 75 -var KEY_KP_5 =/* 5 0x4c */ 76 -var KEY_KP_6 =/* 6 Right 0x4d */ 77 -var KEY_KP_Plus =/* + (Plus) 0x4e */ 78 -var KEY_KP_1 =/* 1 End 0x4f */ 79 -var KEY_KP_2 =/* 2 Down 0x50 */ 80 -var KEY_KP_3 =/* 3 PgDown 0x51 */ 81 -var KEY_KP_0 =/* 0 Insert 0x52 */ 82 -var KEY_KP_Decimal =/* . (Decimal) Delete 0x53 */ 83 -var KEY_SysReqest =/* SysReqest 0x54 */ 84 - /* NOTUSED 0x55 */ -var KEY_Less =/* < (Less) >(Greater) 0x56 */ 86 -var KEY_F11 =/* F11 0x57 */ 87 -var KEY_F12 =/* F12 0x58 */ 88 + KEY_Prefix0 :/* special 0x60 */ 96, + KEY_Prefix1 :/* specail 0x61 */ 97, +}; -var KEY_Prefix0 =/* special 0x60 */ 96 -var KEY_Prefix1 =/* specail 0x61 */ 97 +export { + KeyNames, +}; diff --git a/bitmap.js b/bitmap.js index 91278d7..d15ce70 100644 --- a/bitmap.js +++ b/bitmap.js @@ -23,16 +23,19 @@ ** bitmap.js ** Handle SPICE_IMAGE_TYPE_BITMAP **--------------------------------------------------------------------------*/ + +import { Constants } from './enums.js'; + function convert_spice_bitmap_to_web(context, spice_bitmap) { var ret; var offset, x, src_offset = 0, src_dec = 0; var u8 = new Uint8Array(spice_bitmap.data); - if (spice_bitmap.format != SPICE_BITMAP_FMT_32BIT && - spice_bitmap.format != SPICE_BITMAP_FMT_RGBA) + if (spice_bitmap.format != Constants.SPICE_BITMAP_FMT_32BIT && + spice_bitmap.format != Constants.SPICE_BITMAP_FMT_RGBA) return undefined; - if (!(spice_bitmap.flags & SPICE_BITMAP_FLAGS_TOP_DOWN)) + if (!(spice_bitmap.flags & Constants.SPICE_BITMAP_FLAGS_TOP_DOWN)) { src_offset = (spice_bitmap.y - 1 ) * spice_bitmap.stride; src_dec = 2 * spice_bitmap.stride; @@ -47,7 +50,7 @@ function convert_spice_bitmap_to_web(context, spice_bitmap) ret.data[offset + 2 ] = u8[src_offset + 0]; // FIXME - We effectively treat all images as having SPICE_IMAGE_FLAGS_HIGH_BITS_SET - if (spice_bitmap.format == SPICE_BITMAP_FMT_32BIT) + if (spice_bitmap.format == Constants.SPICE_BITMAP_FMT_32BIT) ret.data[offset + 3] = 255; else ret.data[offset + 3] = u8[src_offset]; @@ -55,3 +58,7 @@ function convert_spice_bitmap_to_web(context, spice_bitmap) return ret; } + +export { + convert_spice_bitmap_to_web, +}; diff --git a/cursor.js b/cursor.js index d3f4d55..a3be8da 100644 --- a/cursor.js +++ b/cursor.js @@ -18,6 +18,15 @@ along with spice-html5. If not, see . */ +import { create_rgba_png } from './png.js'; +import { Constants } from './enums.js'; +import { DEBUG } from './utils.js'; +import { + SpiceMsgCursorInit, + SpiceMsgCursorSet, +} from './spicemsg.js'; +import { SpiceSimulateCursor } from './simulatecursor.js'; +import { SpiceConn } from './spiceconn.js'; /*---------------------------------------------------------------------------- ** SpiceCursorConn @@ -31,12 +40,12 @@ function SpiceCursorConn() SpiceCursorConn.prototype = Object.create(SpiceConn.prototype); SpiceCursorConn.prototype.process_channel_message = function(msg) { - if (msg.type == SPICE_MSG_CURSOR_INIT) + if (msg.type == Constants.SPICE_MSG_CURSOR_INIT) { var cursor_init = new SpiceMsgCursorInit(msg.data); DEBUG > 1 && console.log("SpiceMsgCursorInit"); if (this.parent && this.parent.inputs && - this.parent.inputs.mouse_mode == SPICE_MOUSE_MODE_SERVER) + this.parent.inputs.mouse_mode == Constants.SPICE_MOUSE_MODE_SERVER) { // FIXME - this imagines that the server actually // provides the current cursor position, @@ -49,11 +58,11 @@ SpiceCursorConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_CURSOR_SET) + if (msg.type == Constants.SPICE_MSG_CURSOR_SET) { var cursor_set = new SpiceMsgCursorSet(msg.data); DEBUG > 1 && console.log("SpiceMsgCursorSet"); - if (cursor_set.flags & SPICE_CURSOR_FLAGS_NONE) + if (cursor_set.flags & Constants.SPICE_CURSOR_FLAGS_NONE) { document.getElementById(this.parent.screen_id).style.cursor = "none"; return true; @@ -62,7 +71,7 @@ SpiceCursorConn.prototype.process_channel_message = function(msg) if (cursor_set.flags > 0) this.log_warn("FIXME: No support for cursor flags " + cursor_set.flags); - if (cursor_set.cursor.header.type != SPICE_CURSOR_TYPE_ALPHA) + if (cursor_set.cursor.header.type != Constants.SPICE_CURSOR_TYPE_ALPHA) { this.log_warn("FIXME: No support for cursor type " + cursor_set.cursor.header.type); return false; @@ -73,39 +82,39 @@ SpiceCursorConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_CURSOR_MOVE) + if (msg.type == Constants.SPICE_MSG_CURSOR_MOVE) { this.known_unimplemented(msg.type, "Cursor Move"); return true; } - if (msg.type == SPICE_MSG_CURSOR_HIDE) + if (msg.type == Constants.SPICE_MSG_CURSOR_HIDE) { DEBUG > 1 && console.log("SpiceMsgCursorHide"); document.getElementById(this.parent.screen_id).style.cursor = "none"; return true; } - if (msg.type == SPICE_MSG_CURSOR_TRAIL) + if (msg.type == Constants.SPICE_MSG_CURSOR_TRAIL) { this.known_unimplemented(msg.type, "Cursor Trail"); return true; } - if (msg.type == SPICE_MSG_CURSOR_RESET) + if (msg.type == Constants.SPICE_MSG_CURSOR_RESET) { DEBUG > 1 && console.log("SpiceMsgCursorReset"); document.getElementById(this.parent.screen_id).style.cursor = "auto"; return true; } - if (msg.type == SPICE_MSG_CURSOR_INVAL_ONE) + if (msg.type == Constants.SPICE_MSG_CURSOR_INVAL_ONE) { this.known_unimplemented(msg.type, "Cursor Inval One"); return true; } - if (msg.type == SPICE_MSG_CURSOR_INVAL_ALL) + if (msg.type == Constants.SPICE_MSG_CURSOR_INVAL_ALL) { DEBUG > 1 && console.log("SpiceMsgCursorInvalAll"); // FIXME - There may be something useful to do here... @@ -126,3 +135,7 @@ SpiceCursorConn.prototype.set_cursor = function(cursor) if (window.getComputedStyle(screen, null).cursor == 'auto') SpiceSimulateCursor.simulate_cursor(this, cursor, screen, pngstr); } + +export { + SpiceCursorConn, +}; diff --git a/display.js b/display.js index f6c74f5..b3525f7 100644 --- a/display.js +++ b/display.js @@ -18,6 +18,16 @@ along with spice-html5. If not, see . */ +import * as Webm from './webm.js'; +import * as Messages from './spicemsg.js'; +import * as Quic from './quic.js'; +import * as Utils from './utils.js'; +import * as Inputs from './inputs.js'; +import { Constants } from './enums.js'; +import { SpiceConn } from './spiceconn.js'; +import { SpiceRect } from './spicetype.js'; +import { convert_spice_lz_to_web } from './lz.js'; +import { convert_spice_bitmap_to_web } from './bitmap.js'; /*---------------------------------------------------------------------------- ** FIXME: putImageData does not support Alpha blending @@ -62,37 +72,37 @@ function SpiceDisplayConn() SpiceDisplayConn.prototype = Object.create(SpiceConn.prototype); SpiceDisplayConn.prototype.process_channel_message = function(msg) { - if (msg.type == SPICE_MSG_DISPLAY_MODE) + if (msg.type == Constants.SPICE_MSG_DISPLAY_MODE) { this.known_unimplemented(msg.type, "Display Mode"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_MARK) + if (msg.type == Constants.SPICE_MSG_DISPLAY_MARK) { // FIXME - DISPLAY_MARK not implemented (may be hard or impossible) this.known_unimplemented(msg.type, "Display Mark"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_RESET) + if (msg.type == Constants.SPICE_MSG_DISPLAY_RESET) { - DEBUG > 2 && console.log("Display reset"); + Utils.DEBUG > 2 && console.log("Display reset"); this.surfaces[this.primary_surface].canvas.context.restore(); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_COPY) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_COPY) { - var draw_copy = new SpiceMsgDisplayDrawCopy(msg.data); + var draw_copy = new Messages.SpiceMsgDisplayDrawCopy(msg.data); - DEBUG > 1 && this.log_draw("DrawCopy", draw_copy); + Utils.DEBUG > 1 && this.log_draw("DrawCopy", draw_copy); if (! draw_copy.base.box.is_same_size(draw_copy.data.src_area)) this.log_warn("FIXME: DrawCopy src_area is a different size than base.box; we do not handle that yet."); - if (draw_copy.base.clip.type != SPICE_CLIP_TYPE_NONE) + if (draw_copy.base.clip.type != Constants.SPICE_CLIP_TYPE_NONE) this.log_warn("FIXME: DrawCopy we don't handle clipping yet"); - if (draw_copy.data.rop_descriptor != SPICE_ROPD_OP_PUT) + if (draw_copy.data.rop_descriptor != Constants.SPICE_ROPD_OP_PUT) this.log_warn("FIXME: DrawCopy we don't handle ropd type: " + draw_copy.data.rop_descriptor); if (draw_copy.data.mask.flags) this.log_warn("FIXME: DrawCopy we don't handle mask flag: " + draw_copy.data.mask.flags); @@ -102,14 +112,14 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) if (draw_copy.data && draw_copy.data.src_bitmap) { if (draw_copy.data.src_bitmap.descriptor.flags && - draw_copy.data.src_bitmap.descriptor.flags != SPICE_IMAGE_FLAGS_CACHE_ME && - draw_copy.data.src_bitmap.descriptor.flags != SPICE_IMAGE_FLAGS_HIGH_BITS_SET) + draw_copy.data.src_bitmap.descriptor.flags != Constants.SPICE_IMAGE_FLAGS_CACHE_ME && + draw_copy.data.src_bitmap.descriptor.flags != Constants.SPICE_IMAGE_FLAGS_HIGH_BITS_SET) { this.log_warn("FIXME: DrawCopy unhandled image flags: " + draw_copy.data.src_bitmap.descriptor.flags); - DEBUG <= 1 && this.log_draw("DrawCopy", draw_copy); + Utils.DEBUG <= 1 && this.log_draw("DrawCopy", draw_copy); } - if (draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_QUIC) + if (draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_QUIC) { var canvas = this.surfaces[draw_copy.base.surface_id].canvas; if (! draw_copy.data.src_bitmap.quic) @@ -117,7 +127,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) this.log_warn("FIXME: DrawCopy could not handle this QUIC file."); return false; } - var source_img = convert_spice_quic_to_web(canvas.context, + var source_img = Quic.convert_spice_quic_to_web(canvas.context, draw_copy.data.src_bitmap.quic); return this.draw_copy_helper( @@ -125,12 +135,12 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) src_area: draw_copy.data.src_area, image_data: source_img, tag: "copyquic." + draw_copy.data.src_bitmap.quic.type, - has_alpha: (draw_copy.data.src_bitmap.quic.type == QUIC_IMAGE_TYPE_RGBA ? true : false) , + has_alpha: (draw_copy.data.src_bitmap.quic.type == Quic.Constants.QUIC_IMAGE_TYPE_RGBA ? true : false) , descriptor : draw_copy.data.src_bitmap.descriptor }); } - else if (draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_FROM_CACHE || - draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_FROM_CACHE_LOSSLESS) + else if (draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_FROM_CACHE || + draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_FROM_CACHE_LOSSLESS) { if (! this.cache || ! this.cache[draw_copy.data.src_bitmap.descriptor.id]) { @@ -149,7 +159,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) /* FIXME - LOSSLESS CACHE ramifications not understood or handled */ } - else if (draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_SURFACE) + else if (draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_SURFACE) { var source_context = this.surfaces[draw_copy.data.src_bitmap.surface_id].canvas.context; var target_context = this.surfaces[draw_copy.base.surface_id].canvas.context; @@ -174,11 +184,11 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) src_area: computed_src_area, image_data: source_img, tag: "copysurf." + draw_copy.data.src_bitmap.surface_id, - has_alpha: this.surfaces[draw_copy.data.src_bitmap.surface_id].format == SPICE_SURFACE_FMT_32_xRGB ? false : true, + has_alpha: this.surfaces[draw_copy.data.src_bitmap.surface_id].format == Constants.SPICE_SURFACE_FMT_32_xRGB ? false : true, descriptor : draw_copy.data.src_bitmap.descriptor }); } - else if (draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_JPEG) + else if (draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_JPEG) { if (! draw_copy.data.src_bitmap.jpeg) { @@ -211,7 +221,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return true; } - else if (draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_JPEG_ALPHA) + else if (draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_JPEG_ALPHA) { if (! draw_copy.data.src_bitmap.jpeg_alpha) { @@ -240,7 +250,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) sc : this, }; - if (this.surfaces[draw_copy.base.surface_id].format == SPICE_SURFACE_FMT_32_ARGB) + if (this.surfaces[draw_copy.base.surface_id].format == Constants.SPICE_SURFACE_FMT_32_ARGB) { var canvas = this.surfaces[draw_copy.base.surface_id].canvas; @@ -252,7 +262,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return true; } - else if (draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_BITMAP) + else if (draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_BITMAP) { var canvas = this.surfaces[draw_copy.base.surface_id].canvas; if (! draw_copy.data.src_bitmap.bitmap) @@ -275,11 +285,11 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) src_area: draw_copy.data.src_area, image_data: source_img, tag: "bitmap." + draw_copy.data.src_bitmap.bitmap.format, - has_alpha: draw_copy.data.src_bitmap.bitmap == SPICE_BITMAP_FMT_32BIT ? false : true, + has_alpha: draw_copy.data.src_bitmap.bitmap == Constants.SPICE_BITMAP_FMT_32BIT ? false : true, descriptor : draw_copy.data.src_bitmap.descriptor }); } - else if (draw_copy.data.src_bitmap.descriptor.type == SPICE_IMAGE_TYPE_LZ_RGB) + else if (draw_copy.data.src_bitmap.descriptor.type == Constants.SPICE_IMAGE_TYPE_LZ_RGB) { var canvas = this.surfaces[draw_copy.base.surface_id].canvas; if (! draw_copy.data.src_bitmap.lz_rgb) @@ -302,7 +312,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) src_area: draw_copy.data.src_area, image_data: source_img, tag: "lz_rgb." + draw_copy.data.src_bitmap.lz_rgb.type, - has_alpha: draw_copy.data.src_bitmap.lz_rgb.type == LZ_IMAGE_TYPE_RGBA ? true : false , + has_alpha: draw_copy.data.src_bitmap.lz_rgb.type == Constants.LZ_IMAGE_TYPE_RGBA ? true : false , descriptor : draw_copy.data.src_bitmap.descriptor }); } @@ -318,20 +328,20 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return false; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_FILL) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_FILL) { - var draw_fill = new SpiceMsgDisplayDrawFill(msg.data); + var draw_fill = new Messages.SpiceMsgDisplayDrawFill(msg.data); - DEBUG > 1 && this.log_draw("DrawFill", draw_fill); + Utils.DEBUG > 1 && this.log_draw("DrawFill", draw_fill); - if (draw_fill.data.rop_descriptor != SPICE_ROPD_OP_PUT) + if (draw_fill.data.rop_descriptor != Constants.SPICE_ROPD_OP_PUT) this.log_warn("FIXME: DrawFill we don't handle ropd type: " + draw_fill.data.rop_descriptor); if (draw_fill.data.mask.flags) this.log_warn("FIXME: DrawFill we don't handle mask flag: " + draw_fill.data.mask.flags); if (draw_fill.data.mask.bitmap) this.log_warn("FIXME: DrawFill we don't handle mask"); - if (draw_fill.data.brush.type == SPICE_BRUSH_TYPE_SOLID) + if (draw_fill.data.brush.type == Constants.SPICE_BRUSH_TYPE_SOLID) { // FIXME - do brushes ever have alpha? var color = draw_fill.data.brush.color & 0xffffff; @@ -343,7 +353,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) draw_fill.base.box.right - draw_fill.base.box.left, draw_fill.base.box.bottom - draw_fill.base.box.top); - if (DUMP_DRAWS && this.parent.dump_id) + if (Utils.DUMP_DRAWS && this.parent.dump_id) { var debug_canvas = document.createElement("canvas"); debug_canvas.setAttribute('width', this.surfaces[draw_fill.base.surface_id].canvas.width); @@ -367,65 +377,65 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_OPAQUE) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_OPAQUE) { this.known_unimplemented(msg.type, "Display Draw Opaque"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_BLEND) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_BLEND) { this.known_unimplemented(msg.type, "Display Draw Blend"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_BLACKNESS) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_BLACKNESS) { this.known_unimplemented(msg.type, "Display Draw Blackness"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_WHITENESS) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_WHITENESS) { this.known_unimplemented(msg.type, "Display Draw Whiteness"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_INVERS) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_INVERS) { this.known_unimplemented(msg.type, "Display Draw Invers"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_ROP3) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_ROP3) { this.known_unimplemented(msg.type, "Display Draw ROP3"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_STROKE) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_STROKE) { this.known_unimplemented(msg.type, "Display Draw Stroke"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_TRANSPARENT) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_TRANSPARENT) { this.known_unimplemented(msg.type, "Display Draw Transparent"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND) { this.known_unimplemented(msg.type, "Display Draw Alpha Blend"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_COPY_BITS) + if (msg.type == Constants.SPICE_MSG_DISPLAY_COPY_BITS) { - var copy_bits = new SpiceMsgDisplayCopyBits(msg.data); + var copy_bits = new Messages.SpiceMsgDisplayCopyBits(msg.data); - DEBUG > 1 && this.log_draw("CopyBits", copy_bits); + Utils.DEBUG > 1 && this.log_draw("CopyBits", copy_bits); var source_canvas = this.surfaces[copy_bits.base.surface_id].canvas; var source_context = source_canvas.context; @@ -442,7 +452,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) //source_context.putImageData(source_img, copy_bits.base.box.left, copy_bits.base.box.top); putImageDataWithAlpha(source_context, source_img, copy_bits.base.box.left, copy_bits.base.box.top); - if (DUMP_DRAWS && this.parent.dump_id) + if (Utils.DUMP_DRAWS && this.parent.dump_id) { var debug_canvas = document.createElement("canvas"); debug_canvas.setAttribute('width', width); @@ -457,36 +467,36 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS) + if (msg.type == Constants.SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS) { this.known_unimplemented(msg.type, "Display Inval All Pixmaps"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_INVAL_PALETTE) + if (msg.type == Constants.SPICE_MSG_DISPLAY_INVAL_PALETTE) { this.known_unimplemented(msg.type, "Display Inval Palette"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_INVAL_ALL_PALETTES) + if (msg.type == Constants.SPICE_MSG_DISPLAY_INVAL_ALL_PALETTES) { this.known_unimplemented(msg.type, "Inval All Palettes"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_SURFACE_CREATE) + if (msg.type == Constants.SPICE_MSG_DISPLAY_SURFACE_CREATE) { if (! ("surfaces" in this)) this.surfaces = []; - var m = new SpiceMsgSurfaceCreate(msg.data); - DEBUG > 1 && console.log(this.type + ": MsgSurfaceCreate id " + m.surface.surface_id + var m = new Messages.SpiceMsgSurfaceCreate(msg.data); + Utils.DEBUG > 1 && console.log(this.type + ": MsgSurfaceCreate id " + m.surface.surface_id + "; " + m.surface.width + "x" + m.surface.height + "; format " + m.surface.format + "; flags " + m.surface.flags); - if (m.surface.format != SPICE_SURFACE_FMT_32_xRGB && - m.surface.format != SPICE_SURFACE_FMT_32_ARGB) + if (m.surface.format != Constants.SPICE_SURFACE_FMT_32_xRGB && + m.surface.format != Constants.SPICE_SURFACE_FMT_32_ARGB) { this.log_warn("FIXME: cannot handle surface format " + m.surface.format + " yet."); return false; @@ -499,14 +509,14 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) canvas.setAttribute('tabindex', m.surface.surface_id); canvas.context = canvas.getContext("2d"); - if (DUMP_CANVASES && this.parent.dump_id) + if (Utils.DUMP_CANVASES && this.parent.dump_id) document.getElementById(this.parent.dump_id).appendChild(canvas); m.surface.canvas = canvas; m.surface.draw_count = 0; this.surfaces[m.surface.surface_id] = m.surface; - if (m.surface.flags & SPICE_SURFACE_FLAGS_PRIMARY) + if (m.surface.flags & Constants.SPICE_SURFACE_FLAGS_PRIMARY) { this.primary_surface = m.surface.surface_id; @@ -521,18 +531,18 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_DISPLAY_SURFACE_DESTROY) + if (msg.type == Constants.SPICE_MSG_DISPLAY_SURFACE_DESTROY) { - var m = new SpiceMsgSurfaceDestroy(msg.data); - DEBUG > 1 && console.log(this.type + ": MsgSurfaceDestroy id " + m.surface_id); + var m = new Messages.SpiceMsgSurfaceDestroy(msg.data); + Utils.DEBUG > 1 && console.log(this.type + ": MsgSurfaceDestroy id " + m.surface_id); this.delete_surface(m.surface_id); return true; } - if (msg.type == SPICE_MSG_DISPLAY_STREAM_CREATE) + if (msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_CREATE) { - var m = new SpiceMsgDisplayStreamCreate(msg.data); - STREAM_DEBUG > 0 && console.log(this.type + ": MsgStreamCreate id" + m.id + "; type " + m.codec_type + + var m = new Messages.SpiceMsgDisplayStreamCreate(msg.data); + Utils.STREAM_DEBUG > 0 && console.log(this.type + ": MsgStreamCreate id" + m.id + "; type " + m.codec_type + "; width " + m.stream_width + "; height " + m.stream_height + "; left " + m.dest.left + "; top " + m.dest.top ); @@ -543,7 +553,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) else this.streams[m.id] = m; - if (m.codec_type == SPICE_VIDEO_CODEC_TYPE_VP8) + if (m.codec_type == Constants.SPICE_VIDEO_CODEC_TYPE_VP8) { var media = new MediaSource(); var v = document.createElement("video"); @@ -579,21 +589,21 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) media.spiceconn = this; v.spice_stream = s; } - else if (m.codec_type == SPICE_VIDEO_CODEC_TYPE_MJPEG) + else if (m.codec_type == Constants.SPICE_VIDEO_CODEC_TYPE_MJPEG) this.streams[m.id].frames_loading = 0; else console.log("Unhandled stream codec: "+m.codec_type); return true; } - if (msg.type == SPICE_MSG_DISPLAY_STREAM_DATA || - msg.type == SPICE_MSG_DISPLAY_STREAM_DATA_SIZED) + if (msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_DATA || + msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_DATA_SIZED) { var m; - if (msg.type == SPICE_MSG_DISPLAY_STREAM_DATA_SIZED) - m = new SpiceMsgDisplayStreamDataSized(msg.data); + if (msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_DATA_SIZED) + m = new Messages.SpiceMsgDisplayStreamDataSized(msg.data); else - m = new SpiceMsgDisplayStreamData(msg.data); + m = new Messages.SpiceMsgDisplayStreamData(msg.data); if (!this.streams[m.base.id]) { @@ -603,20 +613,20 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) var time_until_due = m.base.multi_media_time - this.parent.relative_now(); - if (this.streams[m.base.id].codec_type === SPICE_VIDEO_CODEC_TYPE_MJPEG) + if (this.streams[m.base.id].codec_type === Constants.SPICE_VIDEO_CODEC_TYPE_MJPEG) process_mjpeg_stream_data(this, m, time_until_due); - if (this.streams[m.base.id].codec_type === SPICE_VIDEO_CODEC_TYPE_VP8) + if (this.streams[m.base.id].codec_type === Constants.SPICE_VIDEO_CODEC_TYPE_VP8) process_video_stream_data(this.streams[m.base.id], m); return true; } - if (msg.type == SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT) + if (msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT) { - var m = new SpiceMsgDisplayStreamActivateReport(msg.data); + var m = new Messages.SpiceMsgDisplayStreamActivateReport(msg.data); - var report = new SpiceMsgcDisplayStreamReport(m.stream_id, m.unique_id); + var report = new Messages.SpiceMsgcDisplayStreamReport(m.stream_id, m.unique_id); if (this.streams[m.stream_id]) { this.streams[m.stream_id].report = report; @@ -627,20 +637,20 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_DISPLAY_STREAM_CLIP) + if (msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_CLIP) { - var m = new SpiceMsgDisplayStreamClip(msg.data); - STREAM_DEBUG > 1 && console.log(this.type + ": MsgStreamClip id" + m.id); + var m = new Messages.SpiceMsgDisplayStreamClip(msg.data); + Utils.STREAM_DEBUG > 1 && console.log(this.type + ": MsgStreamClip id" + m.id); this.streams[m.id].clip = m.clip; return true; } - if (msg.type == SPICE_MSG_DISPLAY_STREAM_DESTROY) + if (msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_DESTROY) { - var m = new SpiceMsgDisplayStreamDestroy(msg.data); - STREAM_DEBUG > 0 && console.log(this.type + ": MsgStreamDestroy id" + m.id); + var m = new Messages.SpiceMsgDisplayStreamDestroy(msg.data); + Utils.STREAM_DEBUG > 0 && console.log(this.type + ": MsgStreamDestroy id" + m.id); - if (this.streams[m.id].codec_type == SPICE_VIDEO_CODEC_TYPE_VP8) + if (this.streams[m.id].codec_type == Constants.SPICE_VIDEO_CODEC_TYPE_VP8) { document.getElementById(this.parent.screen_id).removeChild(this.streams[m.id].video); this.streams[m.id].source_buffer = null; @@ -651,30 +661,30 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_DISPLAY_STREAM_DESTROY_ALL) + if (msg.type == Constants.SPICE_MSG_DISPLAY_STREAM_DESTROY_ALL) { this.known_unimplemented(msg.type, "Display Stream Destroy All"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_INVAL_LIST) + if (msg.type == Constants.SPICE_MSG_DISPLAY_INVAL_LIST) { - var m = new SpiceMsgDisplayInvalList(msg.data); + var m = new Messages.SpiceMsgDisplayInvalList(msg.data); var i; - DEBUG > 1 && console.log(this.type + ": MsgInvalList " + m.count + " items"); + Utils.DEBUG > 1 && console.log(this.type + ": MsgInvalList " + m.count + " items"); for (i = 0; i < m.count; i++) if (this.cache[m.resources[i].id] != undefined) delete this.cache[m.resources[i].id]; return true; } - if (msg.type == SPICE_MSG_DISPLAY_MONITORS_CONFIG) + if (msg.type == Constants.SPICE_MSG_DISPLAY_MONITORS_CONFIG) { this.known_unimplemented(msg.type, "Display Monitors Config"); return true; } - if (msg.type == SPICE_MSG_DISPLAY_DRAW_COMPOSITE) + if (msg.type == Constants.SPICE_MSG_DISPLAY_DRAW_COMPOSITE) { this.known_unimplemented(msg.type, "Display Draw Composite"); return true; @@ -686,7 +696,7 @@ SpiceDisplayConn.prototype.process_channel_message = function(msg) SpiceDisplayConn.prototype.delete_surface = function(surface_id) { var canvas = document.getElementById("spice_surface_" + surface_id); - if (DUMP_CANVASES && this.parent.dump_id) + if (Utils.DUMP_CANVASES && this.parent.dump_id) document.getElementById(this.parent.dump_id).removeChild(canvas); if (this.primary_surface == surface_id) { @@ -707,7 +717,7 @@ SpiceDisplayConn.prototype.draw_copy_helper = function(o) { /* FIXME - This is based on trial + error, not a serious thoughtful analysis of what Spice requires. See display.js for more. */ - if (this.surfaces[o.base.surface_id].format == SPICE_SURFACE_FMT_32_xRGB) + if (this.surfaces[o.base.surface_id].format == Constants.SPICE_SURFACE_FMT_32_xRGB) { stripAlpha(o.image_data); canvas.context.putImageData(o.image_data, o.base.box.left, o.base.box.top); @@ -724,14 +734,14 @@ SpiceDisplayConn.prototype.draw_copy_helper = function(o) this.log_warn("FIXME: DrawCopy not shifting draw copies just yet..."); } - if (o.descriptor && (o.descriptor.flags & SPICE_IMAGE_FLAGS_CACHE_ME)) + if (o.descriptor && (o.descriptor.flags & Constants.SPICE_IMAGE_FLAGS_CACHE_ME)) { if (! ("cache" in this)) this.cache = {}; this.cache[o.descriptor.id] = o.image_data; } - if (DUMP_DRAWS && this.parent.dump_id) + if (Utils.DUMP_DRAWS && this.parent.dump_id) { var debug_canvas = document.createElement("canvas"); debug_canvas.setAttribute('width', o.image_data.width); @@ -794,9 +804,9 @@ SpiceDisplayConn.prototype.log_draw = function(prefix, draw) if (draw.data.brush) { - if (draw.data.brush.type == SPICE_BRUSH_TYPE_SOLID) + if (draw.data.brush.type == Constants.SPICE_BRUSH_TYPE_SOLID) str += "; brush.color 0x" + draw.data.brush.color.toString(16); - if (draw.data.brush.type == SPICE_BRUSH_TYPE_PATTERN) + if (draw.data.brush.type == Constants.SPICE_BRUSH_TYPE_PATTERN) { str += "; brush.pat "; if (draw.data.brush.pattern.pat != null) @@ -830,15 +840,15 @@ SpiceDisplayConn.prototype.hook_events = function() { var canvas = this.surfaces[this.primary_surface].canvas; canvas.sc = this.parent; - canvas.addEventListener('mousemove', handle_mousemove); - canvas.addEventListener('mousedown', handle_mousedown); - canvas.addEventListener('contextmenu', handle_contextmenu); - canvas.addEventListener('mouseup', handle_mouseup); - canvas.addEventListener('keydown', handle_keydown); - canvas.addEventListener('keyup', handle_keyup); + canvas.addEventListener('mousemove', Inputs.handle_mousemove); + canvas.addEventListener('mousedown', Inputs.handle_mousedown); + canvas.addEventListener('contextmenu', Inputs.handle_contextmenu); + canvas.addEventListener('mouseup', Inputs.handle_mouseup); + canvas.addEventListener('keydown', Inputs.handle_keydown); + canvas.addEventListener('keyup', Inputs.handle_keyup); canvas.addEventListener('mouseout', handle_mouseout); canvas.addEventListener('mouseover', handle_mouseover); - canvas.addEventListener('wheel', handle_mousewheel); + canvas.addEventListener('wheel', Inputs.handle_mousewheel); canvas.focus(); } } @@ -848,15 +858,15 @@ SpiceDisplayConn.prototype.unhook_events = function() if (this.primary_surface !== undefined) { var canvas = this.surfaces[this.primary_surface].canvas; - canvas.removeEventListener('mousemove', handle_mousemove); - canvas.removeEventListener('mousedown', handle_mousedown); - canvas.removeEventListener('contextmenu', handle_contextmenu); - canvas.removeEventListener('mouseup', handle_mouseup); - canvas.removeEventListener('keydown', handle_keydown); - canvas.removeEventListener('keyup', handle_keyup); + canvas.removeEventListener('mousemove', Inputs.handle_mousemove); + canvas.removeEventListener('mousedown', Inputs.handle_mousedown); + canvas.removeEventListener('contextmenu', Inputs.handle_contextmenu); + canvas.removeEventListener('mouseup', Inputs.handle_mouseup); + canvas.removeEventListener('keydown', Inputs.handle_keydown); + canvas.removeEventListener('keyup', Inputs.handle_keyup); canvas.removeEventListener('mouseout', handle_mouseout); canvas.removeEventListener('mouseover', handle_mouseover); - canvas.removeEventListener('wheel', handle_mousewheel); + canvas.removeEventListener('wheel', Inputs.handle_mousewheel); } } @@ -902,7 +912,7 @@ function handle_draw_jpeg_onload() // This can happen; if the jpeg image loads after our surface // has been destroyed (e.g. open a menu, close it quickly), // we'll find we have no surface. - DEBUG > 2 && this.o.sc.log_info("Discarding jpeg; presumed lost surface " + this.o.base.surface_id); + Utils.DEBUG > 2 && this.o.sc.log_info("Discarding jpeg; presumed lost surface " + this.o.base.surface_id); temp_canvas = document.createElement("canvas"); temp_canvas.setAttribute('width', this.o.base.box.right); temp_canvas.setAttribute('height', this.o.base.box.bottom); @@ -924,7 +934,7 @@ function handle_draw_jpeg_onload() context.drawImage(c, this.o.base.box.left, this.o.base.box.top); if (this.o.descriptor && - (this.o.descriptor.flags & SPICE_IMAGE_FLAGS_CACHE_ME)) + (this.o.descriptor.flags & Constants.SPICE_IMAGE_FLAGS_CACHE_ME)) { if (! ("cache" in this.o.sc)) this.o.sc.cache = {}; @@ -942,10 +952,10 @@ function handle_draw_jpeg_onload() // Give the Garbage collector a clue to recycle this; avoids // fairly massive memory leaks during video playback this.onload = undefined; - this.src = EMPTY_GIF_IMAGE; + this.src = Utils.EMPTY_GIF_IMAGE; if (this.o.descriptor && - (this.o.descriptor.flags & SPICE_IMAGE_FLAGS_CACHE_ME)) + (this.o.descriptor.flags & Constants.SPICE_IMAGE_FLAGS_CACHE_ME)) { if (! ("cache" in this.o.sc)) this.o.sc.cache = {}; @@ -959,7 +969,7 @@ function handle_draw_jpeg_onload() if (temp_canvas == null) { - if (DUMP_DRAWS && this.o.sc.parent.dump_id) + if (Utils.DUMP_DRAWS && this.o.sc.parent.dump_id) { var debug_canvas = document.createElement("canvas"); debug_canvas.setAttribute('id', this.o.tag + "." + @@ -998,7 +1008,7 @@ function process_mjpeg_stream_data(sc, m, time_until_due) tmpstr += '0'; tmpstr += m.data[i].toString(16); } - var strm_base = new SpiceMsgDisplayBase(); + var strm_base = new Messages.SpiceMsgDisplayBase(); strm_base.surface_id = sc.streams[m.base.id].surface_id; strm_base.box = m.dest || sc.streams[m.base.id].dest; strm_base.clip = sc.streams[m.base.id].clip; @@ -1028,8 +1038,8 @@ function process_stream_data_report(sc, id, msg_mmtime, time_until_due) sc.streams[id].report.end_frame_mm_time = msg_mmtime; sc.streams[id].report.last_frame_delay = time_until_due; - var msg = new SpiceMiniData(); - msg.build_msg(SPICE_MSGC_DISPLAY_STREAM_REPORT, sc.streams[id].report); + var msg = new Messages.SpiceMiniData(); + msg.build_msg(Constants.SPICE_MSGC_DISPLAY_STREAM_REPORT, sc.streams[id].report); sc.send_msg(msg); sc.streams[id].report.start_frame_mm_time = 0; @@ -1046,10 +1056,10 @@ function handle_video_source_open(e) if (stream.source_buffer) return; - var s = this.addSourceBuffer(SPICE_VP8_CODEC); + var s = this.addSourceBuffer(Webm.Constants.SPICE_VP8_CODEC); if (! s) { - p.log_err('Codec ' + SPICE_VP8_CODEC + ' not available.'); + p.log_err('Codec ' + Webm.Constants.SPICE_VP8_CODEC + ' not available.'); return; } @@ -1059,9 +1069,9 @@ function handle_video_source_open(e) listen_for_video_events(stream); - var h = new webm_Header(); - var te = new webm_VideoTrackEntry(this.stream.stream_width, this.stream.stream_height); - var t = new webm_Tracks(te); + var h = new Webm.Header(); + var te = new Webm.VideoTrackEntry(this.stream.stream_width, this.stream.stream_height); + var t = new Webm.Tracks(te); var mb = new ArrayBuffer(h.buffer_size() + t.buffer_size()) @@ -1123,7 +1133,7 @@ function handle_append_video_buffer_done(e) if (!stream.video) { - if (STREAM_DEBUG > 0) + if (Utils.STREAM_DEBUG > 0) console.log("Stream id " + stream.id + " received updateend after video is gone."); return; } @@ -1136,8 +1146,8 @@ function handle_append_video_buffer_done(e) stream.video.currentTime = stream.video.buffered.start(stream.video.buffered.length - 1); } - if (STREAM_DEBUG > 1) - console.log(stream.video.currentTime + ":id " + stream.id + " updateend " + dump_media_element(stream.video)); + if (Utils.STREAM_DEBUG > 1) + console.log(stream.video.currentTime + ":id " + stream.id + " updateend " + Utils.dump_media_element(stream.video)); } function handle_video_buffer_error(e) @@ -1167,7 +1177,7 @@ function push_or_queue(stream, msg, mb) function video_simple_block(stream, msg, keyframe) { - var simple = new webm_SimpleBlock(msg.base.multi_media_time - stream.cluster_time, msg.data, keyframe); + var simple = new Webm.SimpleBlock(msg.base.multi_media_time - stream.cluster_time, msg.data, keyframe); var mb = new ArrayBuffer(simple.buffer_size()); simple.to_buffer(mb); @@ -1177,7 +1187,7 @@ function video_simple_block(stream, msg, keyframe) function new_video_cluster(stream, msg) { stream.cluster_time = msg.base.multi_media_time; - var c = new webm_Cluster(stream.cluster_time - stream.start_time, msg.data); + var c = new Webm.Cluster(stream.cluster_time - stream.start_time, msg.data); var mb = new ArrayBuffer(c.buffer_size()); c.to_buffer(mb); @@ -1195,7 +1205,7 @@ function process_video_stream_data(stream, msg) new_video_cluster(stream, msg); } - else if (msg.base.multi_media_time - stream.cluster_time >= MAX_CLUSTER_TIME) + else if (msg.base.multi_media_time - stream.cluster_time >= Webm.Constants.MAX_CLUSTER_TIME) new_video_cluster(stream, msg); else video_simple_block(stream, msg, false); @@ -1206,18 +1216,18 @@ function video_handle_event_debug(e) var s = this.spice_stream; if (s.video) { - if (STREAM_DEBUG > 0 || s.video.buffered.len > 1) + if (Utils.STREAM_DEBUG > 0 || s.video.buffered.len > 1) console.log(s.video.currentTime + ":id " + s.id + " event " + e.type + - dump_media_element(s.video)); + Utils.dump_media_element(s.video)); } - if (STREAM_DEBUG > 1 && s.media) - console.log(" media_source " + dump_media_source(s.media)); + if (Utils.STREAM_DEBUG > 1 && s.media) + console.log(" media_source " + Utils.dump_media_source(s.media)); - if (STREAM_DEBUG > 1 && s.source_buffer) - console.log(" source_buffer " + dump_source_buffer(s.source_buffer)); + if (Utils.STREAM_DEBUG > 1 && s.source_buffer) + console.log(" source_buffer " + Utils.dump_source_buffer(s.source_buffer)); - if (STREAM_DEBUG > 1 || s.queue.length > 1) + if (Utils.STREAM_DEBUG > 1 || s.queue.length > 1) console.log(' queue len ' + s.queue.length + '; append_okay: ' + s.append_okay); } @@ -1246,8 +1256,12 @@ function listen_for_video_events(stream) ]; video_0_events.forEach(video_debug_listen_for_one_event, stream.video); - if (STREAM_DEBUG > 0) + if (Utils.STREAM_DEBUG > 0) video_1_events.forEach(video_debug_listen_for_one_event, stream.video); - if (STREAM_DEBUG > 1) + if (Utils.STREAM_DEBUG > 1) video_2_events.forEach(video_debug_listen_for_one_event, stream.video); } + +export { + SpiceDisplayConn, +}; diff --git a/enums.js b/enums.js index b6e013c..9d31148 100644 --- a/enums.js +++ b/enums.js @@ -23,355 +23,357 @@ ** enums.js ** 'constants' for Spice **--------------------------------------------------------------------------*/ -var SPICE_MAGIC = "REDQ"; -var SPICE_VERSION_MAJOR = 2; -var SPICE_VERSION_MINOR = 2; +export var Constants = { + SPICE_MAGIC : "REDQ", + SPICE_VERSION_MAJOR : 2, + SPICE_VERSION_MINOR : 2, -var SPICE_CONNECT_TIMEOUT = (30 * 1000); + SPICE_CONNECT_TIMEOUT : (30 * 1000), -var SPICE_COMMON_CAP_PROTOCOL_AUTH_SELECTION = 0; -var SPICE_COMMON_CAP_AUTH_SPICE = 1; -var SPICE_COMMON_CAP_AUTH_SASL = 2; -var SPICE_COMMON_CAP_MINI_HEADER = 3; + SPICE_COMMON_CAP_PROTOCOL_AUTH_SELECTION : 0, + SPICE_COMMON_CAP_AUTH_SPICE : 1, + SPICE_COMMON_CAP_AUTH_SASL : 2, + SPICE_COMMON_CAP_MINI_HEADER : 3, -var SPICE_TICKET_KEY_PAIR_LENGTH = 1024; -var SPICE_TICKET_PUBKEY_BYTES = (SPICE_TICKET_KEY_PAIR_LENGTH / 8 + 34); + SPICE_TICKET_KEY_PAIR_LENGTH : 1024, + SPICE_TICKET_PUBKEY_BYTES : (1024 / 8 +34), // (SPICE_TICKET_KEY_PAIR_LENGTH / 8 + 34) -var SPICE_LINK_ERR_OK = 0, - SPICE_LINK_ERR_ERROR = 1, - SPICE_LINK_ERR_INVALID_MAGIC = 2, - SPICE_LINK_ERR_INVALID_DATA = 3, - SPICE_LINK_ERR_VERSION_MISMATCH = 4, - SPICE_LINK_ERR_NEED_SECURED = 5, - SPICE_LINK_ERR_NEED_UNSECURED = 6, - SPICE_LINK_ERR_PERMISSION_DENIED = 7, - SPICE_LINK_ERR_BAD_CONNECTION_ID = 8, - SPICE_LINK_ERR_CHANNEL_NOT_AVAILABLE = 9; + SPICE_LINK_ERR_OK : 0, + SPICE_LINK_ERR_ERROR : 1, + SPICE_LINK_ERR_INVALID_MAGIC : 2, + SPICE_LINK_ERR_INVALID_DATA : 3, + SPICE_LINK_ERR_VERSION_MISMATCH : 4, + SPICE_LINK_ERR_NEED_SECURED : 5, + SPICE_LINK_ERR_NEED_UNSECURED : 6, + SPICE_LINK_ERR_PERMISSION_DENIED : 7, + SPICE_LINK_ERR_BAD_CONNECTION_ID : 8, + SPICE_LINK_ERR_CHANNEL_NOT_AVAILABLE : 9, -var SPICE_MSG_MIGRATE = 1; -var SPICE_MSG_MIGRATE_DATA = 2; -var SPICE_MSG_SET_ACK = 3; -var SPICE_MSG_PING = 4; -var SPICE_MSG_WAIT_FOR_CHANNELS = 5; -var SPICE_MSG_DISCONNECTING = 6; -var SPICE_MSG_NOTIFY = 7; -var SPICE_MSG_LIST = 8; + SPICE_MSG_MIGRATE : 1, + SPICE_MSG_MIGRATE_DATA : 2, + SPICE_MSG_SET_ACK : 3, + SPICE_MSG_PING : 4, + SPICE_MSG_WAIT_FOR_CHANNELS : 5, + SPICE_MSG_DISCONNECTING : 6, + SPICE_MSG_NOTIFY : 7, + SPICE_MSG_LIST : 8, -var SPICE_MSG_MAIN_MIGRATE_BEGIN = 101; -var SPICE_MSG_MAIN_MIGRATE_CANCEL = 102; -var SPICE_MSG_MAIN_INIT = 103; -var SPICE_MSG_MAIN_CHANNELS_LIST = 104; -var SPICE_MSG_MAIN_MOUSE_MODE = 105; -var SPICE_MSG_MAIN_MULTI_MEDIA_TIME = 106; -var SPICE_MSG_MAIN_AGENT_CONNECTED = 107; -var SPICE_MSG_MAIN_AGENT_DISCONNECTED = 108; -var SPICE_MSG_MAIN_AGENT_DATA = 109; -var SPICE_MSG_MAIN_AGENT_TOKEN = 110; -var SPICE_MSG_MAIN_MIGRATE_SWITCH_HOST = 111; -var SPICE_MSG_MAIN_MIGRATE_END = 112; -var SPICE_MSG_MAIN_NAME = 113; -var SPICE_MSG_MAIN_UUID = 114; -var SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS = 115; -var SPICE_MSG_MAIN_MIGRATE_BEGIN_SEAMLESS = 116; -var SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_ACK = 117; -var SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_NACK = 118; -var SPICE_MSG_END_MAIN = 119; + SPICE_MSG_MAIN_MIGRATE_BEGIN : 101, + SPICE_MSG_MAIN_MIGRATE_CANCEL : 102, + SPICE_MSG_MAIN_INIT : 103, + SPICE_MSG_MAIN_CHANNELS_LIST : 104, + SPICE_MSG_MAIN_MOUSE_MODE : 105, + SPICE_MSG_MAIN_MULTI_MEDIA_TIME : 106, + SPICE_MSG_MAIN_AGENT_CONNECTED : 107, + SPICE_MSG_MAIN_AGENT_DISCONNECTED : 108, + SPICE_MSG_MAIN_AGENT_DATA : 109, + SPICE_MSG_MAIN_AGENT_TOKEN : 110, + SPICE_MSG_MAIN_MIGRATE_SWITCH_HOST : 111, + SPICE_MSG_MAIN_MIGRATE_END : 112, + SPICE_MSG_MAIN_NAME : 113, + SPICE_MSG_MAIN_UUID : 114, + SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS : 115, + SPICE_MSG_MAIN_MIGRATE_BEGIN_SEAMLESS : 116, + SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_ACK : 117, + SPICE_MSG_MAIN_MIGRATE_DST_SEAMLESS_NACK : 118, + SPICE_MSG_END_MAIN : 119, -var SPICE_MSGC_ACK_SYNC = 1; -var SPICE_MSGC_ACK = 2; -var SPICE_MSGC_PONG = 3; -var SPICE_MSGC_MIGRATE_FLUSH_MARK = 4; -var SPICE_MSGC_MIGRATE_DATA = 5; -var SPICE_MSGC_DISCONNECTING = 6; + SPICE_MSGC_ACK_SYNC : 1, + SPICE_MSGC_ACK : 2, + SPICE_MSGC_PONG : 3, + SPICE_MSGC_MIGRATE_FLUSH_MARK : 4, + SPICE_MSGC_MIGRATE_DATA : 5, + SPICE_MSGC_DISCONNECTING : 6, -var SPICE_MSGC_MAIN_CLIENT_INFO = 101; -var SPICE_MSGC_MAIN_MIGRATE_CONNECTED = 102; -var SPICE_MSGC_MAIN_MIGRATE_CONNECT_ERROR = 103; -var SPICE_MSGC_MAIN_ATTACH_CHANNELS = 104; -var SPICE_MSGC_MAIN_MOUSE_MODE_REQUEST = 105; -var SPICE_MSGC_MAIN_AGENT_START = 106; -var SPICE_MSGC_MAIN_AGENT_DATA = 107; -var SPICE_MSGC_MAIN_AGENT_TOKEN = 108; -var SPICE_MSGC_MAIN_MIGRATE_END = 109; -var SPICE_MSGC_END_MAIN = 110; + SPICE_MSGC_MAIN_CLIENT_INFO : 101, + SPICE_MSGC_MAIN_MIGRATE_CONNECTED : 102, + SPICE_MSGC_MAIN_MIGRATE_CONNECT_ERROR : 103, + SPICE_MSGC_MAIN_ATTACH_CHANNELS : 104, + SPICE_MSGC_MAIN_MOUSE_MODE_REQUEST : 105, + SPICE_MSGC_MAIN_AGENT_START : 106, + SPICE_MSGC_MAIN_AGENT_DATA : 107, + SPICE_MSGC_MAIN_AGENT_TOKEN : 108, + SPICE_MSGC_MAIN_MIGRATE_END : 109, + SPICE_MSGC_END_MAIN : 110, -var SPICE_MSG_DISPLAY_MODE = 101; -var SPICE_MSG_DISPLAY_MARK = 102; -var SPICE_MSG_DISPLAY_RESET = 103; -var SPICE_MSG_DISPLAY_COPY_BITS = 104; -var SPICE_MSG_DISPLAY_INVAL_LIST = 105; -var SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS = 106; -var SPICE_MSG_DISPLAY_INVAL_PALETTE = 107; -var SPICE_MSG_DISPLAY_INVAL_ALL_PALETTES= 108; + SPICE_MSG_DISPLAY_MODE : 101, + SPICE_MSG_DISPLAY_MARK : 102, + SPICE_MSG_DISPLAY_RESET : 103, + SPICE_MSG_DISPLAY_COPY_BITS : 104, + SPICE_MSG_DISPLAY_INVAL_LIST : 105, + SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS : 106, + SPICE_MSG_DISPLAY_INVAL_PALETTE : 107, + SPICE_MSG_DISPLAY_INVAL_ALL_PALETTES: 108, -var SPICE_MSG_DISPLAY_STREAM_CREATE = 122; -var SPICE_MSG_DISPLAY_STREAM_DATA = 123; -var SPICE_MSG_DISPLAY_STREAM_CLIP = 124; -var SPICE_MSG_DISPLAY_STREAM_DESTROY = 125; -var SPICE_MSG_DISPLAY_STREAM_DESTROY_ALL= 126; + SPICE_MSG_DISPLAY_STREAM_CREATE : 122, + SPICE_MSG_DISPLAY_STREAM_DATA : 123, + SPICE_MSG_DISPLAY_STREAM_CLIP : 124, + SPICE_MSG_DISPLAY_STREAM_DESTROY : 125, + SPICE_MSG_DISPLAY_STREAM_DESTROY_ALL: 126, -var SPICE_MSG_DISPLAY_DRAW_FILL = 302; -var SPICE_MSG_DISPLAY_DRAW_OPAQUE = 303; -var SPICE_MSG_DISPLAY_DRAW_COPY = 304; -var SPICE_MSG_DISPLAY_DRAW_BLEND = 305; -var SPICE_MSG_DISPLAY_DRAW_BLACKNESS = 306; -var SPICE_MSG_DISPLAY_DRAW_WHITENESS = 307; -var SPICE_MSG_DISPLAY_DRAW_INVERS = 308; -var SPICE_MSG_DISPLAY_DRAW_ROP3 = 309; -var SPICE_MSG_DISPLAY_DRAW_STROKE = 310; -var SPICE_MSG_DISPLAY_DRAW_TEXT = 311; -var SPICE_MSG_DISPLAY_DRAW_TRANSPARENT = 312; -var SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND = 313; -var SPICE_MSG_DISPLAY_SURFACE_CREATE = 314; -var SPICE_MSG_DISPLAY_SURFACE_DESTROY = 315; -var SPICE_MSG_DISPLAY_STREAM_DATA_SIZED = 316; -var SPICE_MSG_DISPLAY_MONITORS_CONFIG = 317; -var SPICE_MSG_DISPLAY_DRAW_COMPOSITE = 318; -var SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT = 319; + SPICE_MSG_DISPLAY_DRAW_FILL : 302, + SPICE_MSG_DISPLAY_DRAW_OPAQUE : 303, + SPICE_MSG_DISPLAY_DRAW_COPY : 304, + SPICE_MSG_DISPLAY_DRAW_BLEND : 305, + SPICE_MSG_DISPLAY_DRAW_BLACKNESS : 306, + SPICE_MSG_DISPLAY_DRAW_WHITENESS : 307, + SPICE_MSG_DISPLAY_DRAW_INVERS : 308, + SPICE_MSG_DISPLAY_DRAW_ROP3 : 309, + SPICE_MSG_DISPLAY_DRAW_STROKE : 310, + SPICE_MSG_DISPLAY_DRAW_TEXT : 311, + SPICE_MSG_DISPLAY_DRAW_TRANSPARENT : 312, + SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND : 313, + SPICE_MSG_DISPLAY_SURFACE_CREATE : 314, + SPICE_MSG_DISPLAY_SURFACE_DESTROY : 315, + SPICE_MSG_DISPLAY_STREAM_DATA_SIZED : 316, + SPICE_MSG_DISPLAY_MONITORS_CONFIG : 317, + SPICE_MSG_DISPLAY_DRAW_COMPOSITE : 318, + SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT : 319, -var SPICE_MSGC_DISPLAY_INIT = 101; -var SPICE_MSGC_DISPLAY_STREAM_REPORT = 102; + SPICE_MSGC_DISPLAY_INIT : 101, + SPICE_MSGC_DISPLAY_STREAM_REPORT : 102, -var SPICE_MSG_INPUTS_INIT = 101; -var SPICE_MSG_INPUTS_KEY_MODIFIERS = 102; + SPICE_MSG_INPUTS_INIT : 101, + SPICE_MSG_INPUTS_KEY_MODIFIERS : 102, -var SPICE_MSG_INPUTS_MOUSE_MOTION_ACK = 111; + SPICE_MSG_INPUTS_MOUSE_MOTION_ACK : 111, -var SPICE_MSGC_INPUTS_KEY_DOWN = 101; -var SPICE_MSGC_INPUTS_KEY_UP = 102; -var SPICE_MSGC_INPUTS_KEY_MODIFIERS = 103; + SPICE_MSGC_INPUTS_KEY_DOWN : 101, + SPICE_MSGC_INPUTS_KEY_UP : 102, + SPICE_MSGC_INPUTS_KEY_MODIFIERS : 103, -var SPICE_MSGC_INPUTS_MOUSE_MOTION = 111; -var SPICE_MSGC_INPUTS_MOUSE_POSITION = 112; -var SPICE_MSGC_INPUTS_MOUSE_PRESS = 113; -var SPICE_MSGC_INPUTS_MOUSE_RELEASE = 114; + SPICE_MSGC_INPUTS_MOUSE_MOTION : 111, + SPICE_MSGC_INPUTS_MOUSE_POSITION : 112, + SPICE_MSGC_INPUTS_MOUSE_PRESS : 113, + SPICE_MSGC_INPUTS_MOUSE_RELEASE : 114, -var SPICE_MSG_CURSOR_INIT = 101; -var SPICE_MSG_CURSOR_RESET = 102; -var SPICE_MSG_CURSOR_SET = 103; -var SPICE_MSG_CURSOR_MOVE = 104; -var SPICE_MSG_CURSOR_HIDE = 105; -var SPICE_MSG_CURSOR_TRAIL = 106; -var SPICE_MSG_CURSOR_INVAL_ONE = 107; -var SPICE_MSG_CURSOR_INVAL_ALL = 108; + SPICE_MSG_CURSOR_INIT : 101, + SPICE_MSG_CURSOR_RESET : 102, + SPICE_MSG_CURSOR_SET : 103, + SPICE_MSG_CURSOR_MOVE : 104, + SPICE_MSG_CURSOR_HIDE : 105, + SPICE_MSG_CURSOR_TRAIL : 106, + SPICE_MSG_CURSOR_INVAL_ONE : 107, + SPICE_MSG_CURSOR_INVAL_ALL : 108, -var SPICE_MSG_PLAYBACK_DATA = 101; -var SPICE_MSG_PLAYBACK_MODE = 102; -var SPICE_MSG_PLAYBACK_START = 103; -var SPICE_MSG_PLAYBACK_STOP = 104; -var SPICE_MSG_PLAYBACK_VOLUME = 105; -var SPICE_MSG_PLAYBACK_MUTE = 106; -var SPICE_MSG_PLAYBACK_LATENCY = 107; + SPICE_MSG_PLAYBACK_DATA : 101, + SPICE_MSG_PLAYBACK_MODE : 102, + SPICE_MSG_PLAYBACK_START : 103, + SPICE_MSG_PLAYBACK_STOP : 104, + SPICE_MSG_PLAYBACK_VOLUME : 105, + SPICE_MSG_PLAYBACK_MUTE : 106, + SPICE_MSG_PLAYBACK_LATENCY : 107, -var SPICE_MSG_SPICEVMC_DATA = 101; -var SPICE_MSG_PORT_INIT = 201; -var SPICE_MSG_PORT_EVENT = 202; -var SPICE_MSG_END_PORT = 203; + SPICE_MSG_SPICEVMC_DATA : 101, + SPICE_MSG_PORT_INIT : 201, + SPICE_MSG_PORT_EVENT : 202, + SPICE_MSG_END_PORT : 203, -var SPICE_MSGC_SPICEVMC_DATA = 101; -var SPICE_MSGC_PORT_EVENT = 201; -var SPICE_MSGC_END_PORT = 202; + SPICE_MSGC_SPICEVMC_DATA : 101, + SPICE_MSGC_PORT_EVENT : 201, + SPICE_MSGC_END_PORT : 202, -var SPICE_PLAYBACK_CAP_CELT_0_5_1 = 0; -var SPICE_PLAYBACK_CAP_VOLUME = 1; -var SPICE_PLAYBACK_CAP_LATENCY = 2; -var SPICE_PLAYBACK_CAP_OPUS = 3; + SPICE_PLAYBACK_CAP_CELT_0_5_1 : 0, + SPICE_PLAYBACK_CAP_VOLUME : 1, + SPICE_PLAYBACK_CAP_LATENCY : 2, + SPICE_PLAYBACK_CAP_OPUS : 3, -var SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE = 0; -var SPICE_MAIN_CAP_NAME_AND_UUID = 1; -var SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS = 2; -var SPICE_MAIN_CAP_SEAMLESS_MIGRATE = 3; + SPICE_MAIN_CAP_SEMI_SEAMLESS_MIGRATE : 0, + SPICE_MAIN_CAP_NAME_AND_UUID : 1, + SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS : 2, + SPICE_MAIN_CAP_SEAMLESS_MIGRATE : 3, -var SPICE_DISPLAY_CAP_SIZED_STREAM = 0; -var SPICE_DISPLAY_CAP_MONITORS_CONFIG = 1; -var SPICE_DISPLAY_CAP_COMPOSITE = 2; -var SPICE_DISPLAY_CAP_A8_SURFACE = 3; -var SPICE_DISPLAY_CAP_STREAM_REPORT = 4; -var SPICE_DISPLAY_CAP_LZ4_COMPRESSION = 5; -var SPICE_DISPLAY_CAP_PREF_COMPRESSION = 6; -var SPICE_DISPLAY_CAP_GL_SCANOUT = 7; -var SPICE_DISPLAY_CAP_MULTI_CODEC = 8; -var SPICE_DISPLAY_CAP_CODEC_MJPEG = 9; -var SPICE_DISPLAY_CAP_CODEC_VP8 = 10; + SPICE_DISPLAY_CAP_SIZED_STREAM : 0, + SPICE_DISPLAY_CAP_MONITORS_CONFIG : 1, + SPICE_DISPLAY_CAP_COMPOSITE : 2, + SPICE_DISPLAY_CAP_A8_SURFACE : 3, + SPICE_DISPLAY_CAP_STREAM_REPORT : 4, + SPICE_DISPLAY_CAP_LZ4_COMPRESSION : 5, + SPICE_DISPLAY_CAP_PREF_COMPRESSION : 6, + SPICE_DISPLAY_CAP_GL_SCANOUT : 7, + SPICE_DISPLAY_CAP_MULTI_CODEC : 8, + SPICE_DISPLAY_CAP_CODEC_MJPEG : 9, + SPICE_DISPLAY_CAP_CODEC_VP8 : 10, -var SPICE_AUDIO_DATA_MODE_INVALID = 0; -var SPICE_AUDIO_DATA_MODE_RAW = 1; -var SPICE_AUDIO_DATA_MODE_CELT_0_5_1 = 2; -var SPICE_AUDIO_DATA_MODE_OPUS = 3; + SPICE_AUDIO_DATA_MODE_INVALID : 0, + SPICE_AUDIO_DATA_MODE_RAW : 1, + SPICE_AUDIO_DATA_MODE_CELT_0_5_1 : 2, + SPICE_AUDIO_DATA_MODE_OPUS : 3, -var SPICE_AUDIO_FMT_INVALID = 0; -var SPICE_AUDIO_FMT_S16 = 1; + SPICE_AUDIO_FMT_INVALID : 0, + SPICE_AUDIO_FMT_S16 : 1, -var SPICE_CHANNEL_MAIN = 1; -var SPICE_CHANNEL_DISPLAY = 2; -var SPICE_CHANNEL_INPUTS = 3; -var SPICE_CHANNEL_CURSOR = 4; -var SPICE_CHANNEL_PLAYBACK = 5; -var SPICE_CHANNEL_RECORD = 6; -var SPICE_CHANNEL_TUNNEL = 7; -var SPICE_CHANNEL_SMARTCARD = 8; -var SPICE_CHANNEL_USBREDIR = 9; -var SPICE_CHANNEL_PORT = 10; -var SPICE_CHANNEL_WEBDAV = 11; + SPICE_CHANNEL_MAIN : 1, + SPICE_CHANNEL_DISPLAY : 2, + SPICE_CHANNEL_INPUTS : 3, + SPICE_CHANNEL_CURSOR : 4, + SPICE_CHANNEL_PLAYBACK : 5, + SPICE_CHANNEL_RECORD : 6, + SPICE_CHANNEL_TUNNEL : 7, + SPICE_CHANNEL_SMARTCARD : 8, + SPICE_CHANNEL_USBREDIR : 9, + SPICE_CHANNEL_PORT : 10, + SPICE_CHANNEL_WEBDAV : 11, -var SPICE_SURFACE_FLAGS_PRIMARY = (1 << 0); + SPICE_SURFACE_FLAGS_PRIMARY : (1 << 0), -var SPICE_NOTIFY_SEVERITY_INFO = 0; -var SPICE_NOTIFY_SEVERITY_WARN = 1; -var SPICE_NOTIFY_SEVERITY_ERROR = 2; + SPICE_NOTIFY_SEVERITY_INFO : 0, + SPICE_NOTIFY_SEVERITY_WARN : 1, + SPICE_NOTIFY_SEVERITY_ERROR : 2, -var SPICE_MOUSE_MODE_SERVER = (1 << 0), - SPICE_MOUSE_MODE_CLIENT = (1 << 1), - SPICE_MOUSE_MODE_MASK = 0x3; + SPICE_MOUSE_MODE_SERVER : (1 << 0), + SPICE_MOUSE_MODE_CLIENT : (1 << 1), + SPICE_MOUSE_MODE_MASK : 0x3, -var SPICE_CLIP_TYPE_NONE = 0; -var SPICE_CLIP_TYPE_RECTS = 1; + SPICE_CLIP_TYPE_NONE : 0, + SPICE_CLIP_TYPE_RECTS : 1, -var SPICE_IMAGE_TYPE_BITMAP = 0; -var SPICE_IMAGE_TYPE_QUIC = 1; -var SPICE_IMAGE_TYPE_RESERVED = 2; -var SPICE_IMAGE_TYPE_LZ_PLT = 100; -var SPICE_IMAGE_TYPE_LZ_RGB = 101; -var SPICE_IMAGE_TYPE_GLZ_RGB = 102; -var SPICE_IMAGE_TYPE_FROM_CACHE = 103; -var SPICE_IMAGE_TYPE_SURFACE = 104; -var SPICE_IMAGE_TYPE_JPEG = 105; -var SPICE_IMAGE_TYPE_FROM_CACHE_LOSSLESS = 106; -var SPICE_IMAGE_TYPE_ZLIB_GLZ_RGB = 107; -var SPICE_IMAGE_TYPE_JPEG_ALPHA = 108; + SPICE_IMAGE_TYPE_BITMAP : 0, + SPICE_IMAGE_TYPE_QUIC : 1, + SPICE_IMAGE_TYPE_RESERVED : 2, + SPICE_IMAGE_TYPE_LZ_PLT : 100, + SPICE_IMAGE_TYPE_LZ_RGB : 101, + SPICE_IMAGE_TYPE_GLZ_RGB : 102, + SPICE_IMAGE_TYPE_FROM_CACHE : 103, + SPICE_IMAGE_TYPE_SURFACE : 104, + SPICE_IMAGE_TYPE_JPEG : 105, + SPICE_IMAGE_TYPE_FROM_CACHE_LOSSLESS : 106, + SPICE_IMAGE_TYPE_ZLIB_GLZ_RGB : 107, + SPICE_IMAGE_TYPE_JPEG_ALPHA : 108, -var SPICE_IMAGE_FLAGS_CACHE_ME = (1 << 0), - SPICE_IMAGE_FLAGS_HIGH_BITS_SET = (1 << 1), - SPICE_IMAGE_FLAGS_CACHE_REPLACE_ME = (1 << 2); + SPICE_IMAGE_FLAGS_CACHE_ME : (1 << 0), + SPICE_IMAGE_FLAGS_HIGH_BITS_SET : (1 << 1), + SPICE_IMAGE_FLAGS_CACHE_REPLACE_ME : (1 << 2), -var SPICE_BITMAP_FLAGS_PAL_CACHE_ME = (1 << 0), - SPICE_BITMAP_FLAGS_PAL_FROM_CACHE = (1 << 1), - SPICE_BITMAP_FLAGS_TOP_DOWN = (1 << 2), - SPICE_BITMAP_FLAGS_MASK = 0x7; + SPICE_BITMAP_FLAGS_PAL_CACHE_ME : (1 << 0), + SPICE_BITMAP_FLAGS_PAL_FROM_CACHE : (1 << 1), + SPICE_BITMAP_FLAGS_TOP_DOWN : (1 << 2), + SPICE_BITMAP_FLAGS_MASK : 0x7, -var SPICE_BITMAP_FMT_INVALID = 0, - SPICE_BITMAP_FMT_1BIT_LE = 1, - SPICE_BITMAP_FMT_1BIT_BE = 2, - SPICE_BITMAP_FMT_4BIT_LE = 3, - SPICE_BITMAP_FMT_4BIT_BE = 4, - SPICE_BITMAP_FMT_8BIT = 5, - SPICE_BITMAP_FMT_16BIT = 6, - SPICE_BITMAP_FMT_24BIT = 7, - SPICE_BITMAP_FMT_32BIT = 8, - SPICE_BITMAP_FMT_RGBA = 9; + SPICE_BITMAP_FMT_INVALID : 0, + SPICE_BITMAP_FMT_1BIT_LE : 1, + SPICE_BITMAP_FMT_1BIT_BE : 2, + SPICE_BITMAP_FMT_4BIT_LE : 3, + SPICE_BITMAP_FMT_4BIT_BE : 4, + SPICE_BITMAP_FMT_8BIT : 5, + SPICE_BITMAP_FMT_16BIT : 6, + SPICE_BITMAP_FMT_24BIT : 7, + SPICE_BITMAP_FMT_32BIT : 8, + SPICE_BITMAP_FMT_RGBA : 9, -var SPICE_CURSOR_FLAGS_NONE = (1 << 0), - SPICE_CURSOR_FLAGS_CACHE_ME = (1 << 1), - SPICE_CURSOR_FLAGS_FROM_CACHE = (1 << 2), - SPICE_CURSOR_FLAGS_MASK = 0x7; + SPICE_CURSOR_FLAGS_NONE : (1 << 0), + SPICE_CURSOR_FLAGS_CACHE_ME : (1 << 1), + SPICE_CURSOR_FLAGS_FROM_CACHE : (1 << 2), + SPICE_CURSOR_FLAGS_MASK : 0x7, -var SPICE_MOUSE_BUTTON_MASK_LEFT = (1 << 0), - SPICE_MOUSE_BUTTON_MASK_MIDDLE = (1 << 1), - SPICE_MOUSE_BUTTON_MASK_RIGHT = (1 << 2), - SPICE_MOUSE_BUTTON_MASK_MASK = 0x7; + SPICE_MOUSE_BUTTON_MASK_LEFT : (1 << 0), + SPICE_MOUSE_BUTTON_MASK_MIDDLE : (1 << 1), + SPICE_MOUSE_BUTTON_MASK_RIGHT : (1 << 2), + SPICE_MOUSE_BUTTON_MASK_MASK : 0x7, -var SPICE_MOUSE_BUTTON_INVALID = 0; -var SPICE_MOUSE_BUTTON_LEFT = 1; -var SPICE_MOUSE_BUTTON_MIDDLE = 2; -var SPICE_MOUSE_BUTTON_RIGHT = 3; -var SPICE_MOUSE_BUTTON_UP = 4; -var SPICE_MOUSE_BUTTON_DOWN = 5; + SPICE_MOUSE_BUTTON_INVALID : 0, + SPICE_MOUSE_BUTTON_LEFT : 1, + SPICE_MOUSE_BUTTON_MIDDLE : 2, + SPICE_MOUSE_BUTTON_RIGHT : 3, + SPICE_MOUSE_BUTTON_UP : 4, + SPICE_MOUSE_BUTTON_DOWN : 5, -var SPICE_BRUSH_TYPE_NONE = 0, - SPICE_BRUSH_TYPE_SOLID = 1, - SPICE_BRUSH_TYPE_PATTERN = 2; + SPICE_BRUSH_TYPE_NONE : 0, + SPICE_BRUSH_TYPE_SOLID : 1, + SPICE_BRUSH_TYPE_PATTERN : 2, -var SPICE_SURFACE_FMT_INVALID = 0, - SPICE_SURFACE_FMT_1_A = 1, - SPICE_SURFACE_FMT_8_A = 8, - SPICE_SURFACE_FMT_16_555 = 16, - SPICE_SURFACE_FMT_32_xRGB = 32, - SPICE_SURFACE_FMT_16_565 = 80, - SPICE_SURFACE_FMT_32_ARGB = 96; + SPICE_SURFACE_FMT_INVALID : 0, + SPICE_SURFACE_FMT_1_A : 1, + SPICE_SURFACE_FMT_8_A : 8, + SPICE_SURFACE_FMT_16_555 : 16, + SPICE_SURFACE_FMT_32_xRGB : 32, + SPICE_SURFACE_FMT_16_565 : 80, + SPICE_SURFACE_FMT_32_ARGB : 96, -var SPICE_ROPD_INVERS_SRC = (1 << 0), - SPICE_ROPD_INVERS_BRUSH = (1 << 1), - SPICE_ROPD_INVERS_DEST = (1 << 2), - SPICE_ROPD_OP_PUT = (1 << 3), - SPICE_ROPD_OP_OR = (1 << 4), - SPICE_ROPD_OP_AND = (1 << 5), - SPICE_ROPD_OP_XOR = (1 << 6), - SPICE_ROPD_OP_BLACKNESS = (1 << 7), - SPICE_ROPD_OP_WHITENESS = (1 << 8), - SPICE_ROPD_OP_INVERS = (1 << 9), - SPICE_ROPD_INVERS_RES = (1 << 10), - SPICE_ROPD_MASK = 0x7ff; + SPICE_ROPD_INVERS_SRC : (1 << 0), + SPICE_ROPD_INVERS_BRUSH : (1 << 1), + SPICE_ROPD_INVERS_DEST : (1 << 2), + SPICE_ROPD_OP_PUT : (1 << 3), + SPICE_ROPD_OP_OR : (1 << 4), + SPICE_ROPD_OP_AND : (1 << 5), + SPICE_ROPD_OP_XOR : (1 << 6), + SPICE_ROPD_OP_BLACKNESS : (1 << 7), + SPICE_ROPD_OP_WHITENESS : (1 << 8), + SPICE_ROPD_OP_INVERS : (1 << 9), + SPICE_ROPD_INVERS_RES : (1 << 10), + SPICE_ROPD_MASK : 0x7ff, -var LZ_IMAGE_TYPE_INVALID = 0, - LZ_IMAGE_TYPE_PLT1_LE = 1, - LZ_IMAGE_TYPE_PLT1_BE = 2, // PLT stands for palette - LZ_IMAGE_TYPE_PLT4_LE = 3, - LZ_IMAGE_TYPE_PLT4_BE = 4, - LZ_IMAGE_TYPE_PLT8 = 5, - LZ_IMAGE_TYPE_RGB16 = 6, - LZ_IMAGE_TYPE_RGB24 = 7, - LZ_IMAGE_TYPE_RGB32 = 8, - LZ_IMAGE_TYPE_RGBA = 9, - LZ_IMAGE_TYPE_XXXA = 10; + LZ_IMAGE_TYPE_INVALID : 0, + LZ_IMAGE_TYPE_PLT1_LE : 1, + LZ_IMAGE_TYPE_PLT1_BE : 2, // PLT stands for palette + LZ_IMAGE_TYPE_PLT4_LE : 3, + LZ_IMAGE_TYPE_PLT4_BE : 4, + LZ_IMAGE_TYPE_PLT8 : 5, + LZ_IMAGE_TYPE_RGB16 : 6, + LZ_IMAGE_TYPE_RGB24 : 7, + LZ_IMAGE_TYPE_RGB32 : 8, + LZ_IMAGE_TYPE_RGBA : 9, + LZ_IMAGE_TYPE_XXXA : 10, -var QUIC_IMAGE_TYPE_INVALID = 0, - QUIC_IMAGE_TYPE_GRAY = 1, - QUIC_IMAGE_TYPE_RGB16 = 2, - QUIC_IMAGE_TYPE_RGB24 = 3, - QUIC_IMAGE_TYPE_RGB32 = 4, - QUIC_IMAGE_TYPE_RGBA = 5; + QUIC_IMAGE_TYPE_INVALID : 0, + QUIC_IMAGE_TYPE_GRAY : 1, + QUIC_IMAGE_TYPE_RGB16 : 2, + QUIC_IMAGE_TYPE_RGB24 : 3, + QUIC_IMAGE_TYPE_RGB32 : 4, + QUIC_IMAGE_TYPE_RGBA : 5, -var SPICE_INPUT_MOTION_ACK_BUNCH = 4; + SPICE_INPUT_MOTION_ACK_BUNCH : 4, -var SPICE_CURSOR_TYPE_ALPHA = 0, - SPICE_CURSOR_TYPE_MONO = 1, - SPICE_CURSOR_TYPE_COLOR4 = 2, - SPICE_CURSOR_TYPE_COLOR8 = 3, - SPICE_CURSOR_TYPE_COLOR16 = 4, - SPICE_CURSOR_TYPE_COLOR24 = 5, - SPICE_CURSOR_TYPE_COLOR32 = 6; + SPICE_CURSOR_TYPE_ALPHA : 0, + SPICE_CURSOR_TYPE_MONO : 1, + SPICE_CURSOR_TYPE_COLOR4 : 2, + SPICE_CURSOR_TYPE_COLOR8 : 3, + SPICE_CURSOR_TYPE_COLOR16 : 4, + SPICE_CURSOR_TYPE_COLOR24 : 5, + SPICE_CURSOR_TYPE_COLOR32 : 6, -var SPICE_VIDEO_CODEC_TYPE_MJPEG = 1; -var SPICE_VIDEO_CODEC_TYPE_VP8 = 2; + SPICE_VIDEO_CODEC_TYPE_MJPEG : 1, + SPICE_VIDEO_CODEC_TYPE_VP8 : 2, -var VD_AGENT_PROTOCOL = 1; -var VD_AGENT_MAX_DATA_SIZE = 2048; + VD_AGENT_PROTOCOL : 1, + VD_AGENT_MAX_DATA_SIZE : 2048, -var VD_AGENT_MOUSE_STATE = 1, - VD_AGENT_MONITORS_CONFIG = 2, - VD_AGENT_REPLY = 3, - VD_AGENT_CLIPBOARD = 4, - VD_AGENT_DISPLAY_CONFIG = 5, - VD_AGENT_ANNOUNCE_CAPABILITIES = 6, - VD_AGENT_CLIPBOARD_GRAB = 7, - VD_AGENT_CLIPBOARD_REQUEST = 8, - VD_AGENT_CLIPBOARD_RELEASE = 9, - VD_AGENT_FILE_XFER_START =10, - VD_AGENT_FILE_XFER_STATUS =11, - VD_AGENT_FILE_XFER_DATA =12, - VD_AGENT_CLIENT_DISCONNECTED =13, - VD_AGENT_MAX_CLIPBOARD =14; + VD_AGENT_MOUSE_STATE : 1, + VD_AGENT_MONITORS_CONFIG : 2, + VD_AGENT_REPLY : 3, + VD_AGENT_CLIPBOARD : 4, + VD_AGENT_DISPLAY_CONFIG : 5, + VD_AGENT_ANNOUNCE_CAPABILITIES : 6, + VD_AGENT_CLIPBOARD_GRAB : 7, + VD_AGENT_CLIPBOARD_REQUEST : 8, + VD_AGENT_CLIPBOARD_RELEASE : 9, + VD_AGENT_FILE_XFER_START :10, + VD_AGENT_FILE_XFER_STATUS :11, + VD_AGENT_FILE_XFER_DATA :12, + VD_AGENT_CLIENT_DISCONNECTED :13, + VD_AGENT_MAX_CLIPBOARD :14, -var VD_AGENT_CAP_MOUSE_STATE = 0, - VD_AGENT_CAP_MONITORS_CONFIG = 1, - VD_AGENT_CAP_REPLY = 2, - VD_AGENT_CAP_CLIPBOARD = 3, - VD_AGENT_CAP_DISPLAY_CONFIG = 4, - VD_AGENT_CAP_CLIPBOARD_BY_DEMAND = 5, - VD_AGENT_CAP_CLIPBOARD_SELECTION = 6, - VD_AGENT_CAP_SPARSE_MONITORS_CONFIG = 7, - VD_AGENT_CAP_GUEST_LINEEND_LF = 8, - VD_AGENT_CAP_GUEST_LINEEND_CRLF = 9, - VD_AGENT_CAP_MAX_CLIPBOARD = 10, - VD_AGENT_END_CAP = 11; + VD_AGENT_CAP_MOUSE_STATE : 0, + VD_AGENT_CAP_MONITORS_CONFIG : 1, + VD_AGENT_CAP_REPLY : 2, + VD_AGENT_CAP_CLIPBOARD : 3, + VD_AGENT_CAP_DISPLAY_CONFIG : 4, + VD_AGENT_CAP_CLIPBOARD_BY_DEMAND : 5, + VD_AGENT_CAP_CLIPBOARD_SELECTION : 6, + VD_AGENT_CAP_SPARSE_MONITORS_CONFIG : 7, + VD_AGENT_CAP_GUEST_LINEEND_LF : 8, + VD_AGENT_CAP_GUEST_LINEEND_CRLF : 9, + VD_AGENT_CAP_MAX_CLIPBOARD : 10, + VD_AGENT_END_CAP : 11, -var VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA = 0, - VD_AGENT_FILE_XFER_STATUS_CANCELLED = 1, - VD_AGENT_FILE_XFER_STATUS_ERROR = 2, - VD_AGENT_FILE_XFER_STATUS_SUCCESS = 3; + VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA : 0, + VD_AGENT_FILE_XFER_STATUS_CANCELLED : 1, + VD_AGENT_FILE_XFER_STATUS_ERROR : 2, + VD_AGENT_FILE_XFER_STATUS_SUCCESS : 3, +}; diff --git a/filexfer.js b/filexfer.js index d850db2..c42e96b 100644 --- a/filexfer.js +++ b/filexfer.js @@ -86,3 +86,9 @@ function handle_file_drop(e) } } + +export { + SpiceFileXferTask, + handle_file_dragover, + handle_file_drop, +}; diff --git a/inputs.js b/inputs.js index 29f4970..0c4e183 100644 --- a/inputs.js +++ b/inputs.js @@ -18,6 +18,12 @@ along with spice-html5. If not, see . */ +import * as Messages from './spicemsg.js'; +import { Constants } from './enums.js'; +import { KeyNames } from './atKeynames.js'; +import { SpiceConn } from './spiceconn.js'; +import { DEBUG } from './utils.js'; + /*---------------------------------------------------------------------------- ** Modifier Keystates ** These need to be tracked because focus in and out can get the keyboard @@ -45,26 +51,26 @@ function SpiceInputsConn() SpiceInputsConn.prototype = Object.create(SpiceConn.prototype); SpiceInputsConn.prototype.process_channel_message = function(msg) { - if (msg.type == SPICE_MSG_INPUTS_INIT) + if (msg.type == Constants.SPICE_MSG_INPUTS_INIT) { - var inputs_init = new SpiceMsgInputsInit(msg.data); + 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 == SPICE_MSG_INPUTS_KEY_MODIFIERS) + if (msg.type == Constants.SPICE_MSG_INPUTS_KEY_MODIFIERS) { - var key = new SpiceMsgInputsKeyModifiers(msg.data); + 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 == 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 -= SPICE_INPUT_MOTION_ACK_BUNCH; + this.waiting_for_ack -= Constants.SPICE_INPUT_MOTION_ACK_BUNCH; return true; } return false; @@ -74,21 +80,21 @@ SpiceInputsConn.prototype.process_channel_message = function(msg) function handle_mousemove(e) { - var msg = new SpiceMiniData(); + var msg = new Messages.SpiceMiniData(); var move; - if (this.sc.mouse_mode == SPICE_MOUSE_MODE_CLIENT) + if (this.sc.mouse_mode == Constants.SPICE_MOUSE_MODE_CLIENT) { - move = new SpiceMsgcMousePosition(this.sc, e) - msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_POSITION, move); + move = new Messages.SpiceMsgcMousePosition(this.sc, e) + msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_POSITION, move); } else { - move = new SpiceMsgcMouseMotion(this.sc, e) - msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_MOTION, move); + 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 * SPICE_INPUT_MOTION_ACK_BUNCH)) + 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++; @@ -111,9 +117,9 @@ function handle_mousemove(e) function handle_mousedown(e) { - var press = new SpiceMsgcMousePress(this.sc, e) - var msg = new SpiceMiniData(); - msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_PRESS, press); + var press = new Messages.SpiceMsgcMousePress(this.sc, e) + var msg = new Messages.SpiceMiniData(); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_PRESS, press); if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready") this.sc.inputs.send_msg(msg); @@ -128,9 +134,9 @@ function handle_contextmenu(e) function handle_mouseup(e) { - var release = new SpiceMsgcMouseRelease(this.sc, e) - var msg = new SpiceMiniData(); - msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_RELEASE, release); + var release = new Messages.SpiceMsgcMouseRelease(this.sc, e) + var msg = new Messages.SpiceMiniData(); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_RELEASE, release); if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready") this.sc.inputs.send_msg(msg); @@ -139,21 +145,21 @@ function handle_mouseup(e) function handle_mousewheel(e) { - var press = new SpiceMsgcMousePress; - var release = new SpiceMsgcMouseRelease; + var press = new Messages.SpiceMsgcMousePress; + var release = new Messages.SpiceMsgcMouseRelease; if (e.deltaY < 0) - press.button = release.button = SPICE_MOUSE_BUTTON_UP; + press.button = release.button = Constants.SPICE_MOUSE_BUTTON_UP; else - press.button = release.button = SPICE_MOUSE_BUTTON_DOWN; + press.button = release.button = Constants.SPICE_MOUSE_BUTTON_DOWN; press.buttons_state = 0; release.buttons_state = 0; - var msg = new SpiceMiniData(); - msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_PRESS, press); + var msg = new Messages.SpiceMiniData(); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_PRESS, press); if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready") this.sc.inputs.send_msg(msg); - msg.build_msg(SPICE_MSGC_INPUTS_MOUSE_RELEASE, release); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_MOUSE_RELEASE, release); if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready") this.sc.inputs.send_msg(msg); @@ -162,10 +168,10 @@ function handle_mousewheel(e) function handle_keydown(e) { - var key = new SpiceMsgcKeyDown(e) - var msg = new SpiceMiniData(); + var key = new Messages.SpiceMsgcKeyDown(e) + var msg = new Messages.SpiceMiniData(); check_and_update_modifiers(e, key.code, this.sc); - msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_DOWN, key); if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready") this.sc.inputs.send_msg(msg); @@ -174,10 +180,10 @@ function handle_keydown(e) function handle_keyup(e) { - var key = new SpiceMsgcKeyUp(e) - var msg = new SpiceMiniData(); + var key = new Messages.SpiceMsgcKeyUp(e) + var msg = new Messages.SpiceMiniData(); check_and_update_modifiers(e, key.code, this.sc); - msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_UP, key); if (this.sc && this.sc.inputs && this.sc.inputs.state === "ready") this.sc.inputs.send_msg(msg); @@ -187,37 +193,37 @@ function handle_keyup(e) function sendCtrlAltDel() { if (sc && sc.inputs && sc.inputs.state === "ready"){ - var key = new SpiceMsgcKeyDown(); - var msg = new SpiceMiniData(); + var key = new Messages.SpiceMsgcKeyDown(); + var msg = new Messages.SpiceMiniData(); - update_modifier(true, KEY_LCtrl, sc); - update_modifier(true, KEY_Alt, sc); + update_modifier(true, KeyNames.KEY_LCtrl, sc); + update_modifier(true, KeyNames.KEY_Alt, sc); - key.code = KEY_KP_Decimal; - msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key); + key.code = KeyNames.KEY_KP_Decimal; + msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_DOWN, key); sc.inputs.send_msg(msg); - msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_UP, key); sc.inputs.send_msg(msg); - if(Ctrl_state == false) update_modifier(false, KEY_LCtrl, sc); - if(Alt_state == false) update_modifier(false, 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) { - var msg = new SpiceMiniData(); + var msg = new Messages.SpiceMiniData(); if (!state) { - var key = new SpiceMsgcKeyUp() + var key = new Messages.SpiceMsgcKeyUp() key.code =(0x80|code); - msg.build_msg(SPICE_MSGC_INPUTS_KEY_UP, key); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_UP, key); } else { - var key = new SpiceMsgcKeyDown() + var key = new Messages.SpiceMsgcKeyDown() key.code = code; - msg.build_msg(SPICE_MSGC_INPUTS_KEY_DOWN, key); + msg.build_msg(Constants.SPICE_MSGC_INPUTS_KEY_DOWN, key); } sc.inputs.send_msg(msg); @@ -233,19 +239,19 @@ function check_and_update_modifiers(e, code, sc) Meta_state = e.metaKey; } - if (code === KEY_ShiftL) + if (code === KeyNames.KEY_ShiftL) Shift_state = true; - else if (code === KEY_Alt) + else if (code === KeyNames.KEY_Alt) Alt_state = true; - else if (code === KEY_LCtrl) + else if (code === KeyNames.KEY_LCtrl) Ctrl_state = true; else if (code === 0xE0B5) Meta_state = true; - else if (code === (0x80|KEY_ShiftL)) + else if (code === (0x80|KeyNames.KEY_ShiftL)) Shift_state = false; - else if (code === (0x80|KEY_Alt)) + else if (code === (0x80|KeyNames.KEY_Alt)) Alt_state = false; - else if (code === (0x80|KEY_LCtrl)) + else if (code === (0x80|KeyNames.KEY_LCtrl)) Ctrl_state = false; else if (code === (0x80|0xE0B5)) Meta_state = false; @@ -255,19 +261,19 @@ function check_and_update_modifiers(e, code, sc) if (Shift_state != e.shiftKey) { console.log("Shift state out of sync"); - update_modifier(e.shiftKey, KEY_ShiftL, sc); + update_modifier(e.shiftKey, KeyNames.KEY_ShiftL, sc); Shift_state = e.shiftKey; } if (Alt_state != e.altKey) { console.log("Alt state out of sync"); - update_modifier(e.altKey, KEY_Alt, sc); + update_modifier(e.altKey, KeyNames.KEY_Alt, sc); Alt_state = e.altKey; } if (Ctrl_state != e.ctrlKey) { console.log("Ctrl state out of sync"); - update_modifier(e.ctrlKey, KEY_LCtrl, sc); + update_modifier(e.ctrlKey, KeyNames.KEY_LCtrl, sc); Ctrl_state = e.ctrlKey; } if (Meta_state != e.metaKey) @@ -278,3 +284,15 @@ 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, +}; diff --git a/lz.js b/lz.js index 53c1141..700cfda 100644 --- a/lz.js +++ b/lz.js @@ -18,6 +18,7 @@ along with spice-html5. If not, see . */ +import { Constants } from './enums.js'; /*---------------------------------------------------------------------------- ** lz.js @@ -30,6 +31,7 @@ function lz_rgb32_decompress(in_buf, at, out_buf, type, default_alpha) var op = 0; var ctrl; var ctr = 0; + var i = 0; for (ctrl = in_buf[encoder++]; (op * 4) < out_buf.length; ctrl = in_buf[encoder++]) { @@ -62,7 +64,7 @@ function lz_rgb32_decompress(in_buf, at, out_buf, type, default_alpha) } } len += 1; - if (type == LZ_IMAGE_TYPE_RGBA) + if (type == Constants.LZ_IMAGE_TYPE_RGBA) len += 2; ofs += 1; @@ -72,7 +74,7 @@ function lz_rgb32_decompress(in_buf, at, out_buf, type, default_alpha) var b = ref; //if (type == LZ_IMAGE_TYPE_RGBA) console.log("alpha " + out_buf[(b*4)+3] + " dupped into pixel " + op + " through pixel " + (op + len)); for (; len; --len) { - if (type == LZ_IMAGE_TYPE_RGBA) + if (type == Constants.LZ_IMAGE_TYPE_RGBA) { out_buf[(op*4) + 3] = out_buf[(b*4)+3]; } @@ -86,7 +88,7 @@ function lz_rgb32_decompress(in_buf, at, out_buf, type, default_alpha) } else { //if (type == LZ_IMAGE_TYPE_RGBA) console.log("alpha copied to pixel " + op + " through " + (op + len) + " from " + ref); for (; len; --len) { - if (type == LZ_IMAGE_TYPE_RGBA) + if (type == Constants.LZ_IMAGE_TYPE_RGBA) { out_buf[(op*4) + 3] = out_buf[(ref*4)+3]; } @@ -101,7 +103,7 @@ function lz_rgb32_decompress(in_buf, at, out_buf, type, default_alpha) } else { ctrl++; - if (type == LZ_IMAGE_TYPE_RGBA) + if (type == Constants.LZ_IMAGE_TYPE_RGBA) { //console.log("alpha " + in_buf[encoder] + " set into pixel " + op); out_buf[(op*4) + 3] = in_buf[encoder++]; @@ -119,7 +121,7 @@ function lz_rgb32_decompress(in_buf, at, out_buf, type, default_alpha) for (--ctrl; ctrl; ctrl--) { - if (type == LZ_IMAGE_TYPE_RGBA) + if (type == Constants.LZ_IMAGE_TYPE_RGBA) { //console.log("alpha " + in_buf[encoder] + " set into pixel " + op); out_buf[(op*4) + 3] = in_buf[encoder++]; @@ -157,26 +159,30 @@ function flip_image_data(img) function convert_spice_lz_to_web(context, lz_image) { var at; - if (lz_image.type === LZ_IMAGE_TYPE_RGB32 || lz_image.type === LZ_IMAGE_TYPE_RGBA) + if (lz_image.type === Constants.LZ_IMAGE_TYPE_RGB32 || lz_image.type === Constants.LZ_IMAGE_TYPE_RGBA) { var u8 = new Uint8Array(lz_image.data); var ret = context.createImageData(lz_image.width, lz_image.height); - at = lz_rgb32_decompress(u8, 0, ret.data, LZ_IMAGE_TYPE_RGB32, lz_image.type != LZ_IMAGE_TYPE_RGBA); + at = lz_rgb32_decompress(u8, 0, ret.data, Constants.LZ_IMAGE_TYPE_RGB32, lz_image.type != Constants.LZ_IMAGE_TYPE_RGBA); if (!lz_image.top_down) flip_image_data(ret); - if (lz_image.type == LZ_IMAGE_TYPE_RGBA) - lz_rgb32_decompress(u8, at, ret.data, LZ_IMAGE_TYPE_RGBA, false); + if (lz_image.type == Constants.LZ_IMAGE_TYPE_RGBA) + lz_rgb32_decompress(u8, at, ret.data, Constants.LZ_IMAGE_TYPE_RGBA, false); } - else if (lz_image.type === LZ_IMAGE_TYPE_XXXA) + else if (lz_image.type === Constants.LZ_IMAGE_TYPE_XXXA) { var u8 = new Uint8Array(lz_image.data); var ret = context.createImageData(lz_image.width, lz_image.height); - lz_rgb32_decompress(u8, 0, ret.data, LZ_IMAGE_TYPE_RGBA, false); + lz_rgb32_decompress(u8, 0, ret.data, Constants.LZ_IMAGE_TYPE_RGBA, false); } else return undefined; return ret; } + +export { + convert_spice_lz_to_web, +}; diff --git a/main.js b/main.js index 6976f9c..6664207 100644 --- a/main.js +++ b/main.js @@ -18,6 +18,17 @@ along with spice-html5. If not, see . */ +import * as Messages from './spicemsg.js'; +import { Constants } from './enums.js'; +import { SpiceCursorConn } from './cursor.js'; +import { SpiceConn } from './spiceconn.js'; +import { DEBUG } from './utils.js'; +import { SpiceFileXferTask } from './filexfer.js'; +import { SpiceInputsConn } from './inputs.js'; +import { SpiceDisplayConn } from './display.js'; +import { SpicePlaybackConn } from './playback.js'; +import { SpicePortConn } from './port.js'; + /*---------------------------------------------------------------------------- ** SpiceMainConn ** This is the master Javascript class for establishing and @@ -65,23 +76,23 @@ function SpiceMainConn() SpiceMainConn.prototype = Object.create(SpiceConn.prototype); SpiceMainConn.prototype.process_channel_message = function(msg) { - if (msg.type == SPICE_MSG_MAIN_MIGRATE_BEGIN) + if (msg.type == Constants.SPICE_MSG_MAIN_MIGRATE_BEGIN) { this.known_unimplemented(msg.type, "Main Migrate Begin"); return true; } - if (msg.type == 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 == 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 SpiceMsgMainInit(msg.data); + this.main_init = new Messages.SpiceMsgMainInit(msg.data); this.connection_id = this.main_init.session_id; this.agent_tokens = this.main_init.agent_tokens; @@ -108,33 +119,33 @@ SpiceMainConn.prototype.process_channel_message = function(msg) if (this.main_init.agent_connected) this.connect_agent(); - var attach = new SpiceMiniData; - attach.type = SPICE_MSGC_MAIN_ATTACH_CHANNELS; + var attach = new Messages.SpiceMiniData; + attach.type = Constants.SPICE_MSGC_MAIN_ATTACH_CHANNELS; attach.size = attach.buffer_size(); this.send_msg(attach); return true; } - if (msg.type == SPICE_MSG_MAIN_MOUSE_MODE) + if (msg.type == Constants.SPICE_MSG_MAIN_MOUSE_MODE) { - var mode = new SpiceMsgMainMouseMode(msg.data); + 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 == 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 == 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 SpiceMsgChannels(msg.data); + chans = new Messages.SpiceMsgChannels(msg.data); for (i = 0; i < chans.channels.length; i++) { var conn = { @@ -144,7 +155,7 @@ SpiceMainConn.prototype.process_channel_message = function(msg) type : chans.channels[i].type, chan_id : chans.channels[i].id }; - if (chans.channels[i].type == SPICE_CHANNEL_DISPLAY) + if (chans.channels[i].type == Constants.SPICE_CHANNEL_DISPLAY) { if (chans.channels[i].id == 0) { this.display = new SpiceDisplayConn(conn); @@ -152,16 +163,16 @@ SpiceMainConn.prototype.process_channel_message = function(msg) this.log_warn("The spice-html5 client does not handle multiple heads."); } } - else if (chans.channels[i].type == 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; } - else if (chans.channels[i].type == SPICE_CHANNEL_CURSOR) + else if (chans.channels[i].type == Constants.SPICE_CHANNEL_CURSOR) this.cursor = new SpiceCursorConn(conn); - else if (chans.channels[i].type == SPICE_CHANNEL_PLAYBACK) + else if (chans.channels[i].type == Constants.SPICE_CHANNEL_PLAYBACK) this.cursor = new SpicePlaybackConn(conn); - else if (chans.channels[i].type == SPICE_CHANNEL_PORT) + else if (chans.channels[i].type == Constants.SPICE_CHANNEL_PORT) this.ports.push(new SpicePortConn(conn)); else { @@ -176,23 +187,23 @@ SpiceMainConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_MAIN_AGENT_CONNECTED) + if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_CONNECTED) { this.connect_agent(); return true; } - if (msg.type == SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS) + if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_CONNECTED_TOKENS) { - var connected_tokens = new SpiceMsgMainAgentTokens(msg.data); + var connected_tokens = new Messages.SpiceMsgMainAgentTokens(msg.data); this.agent_tokens = connected_tokens.num_tokens; this.connect_agent(); return true; } - if (msg.type == SPICE_MSG_MAIN_AGENT_TOKEN) + if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_TOKEN) { - var remaining_tokens, tokens = new SpiceMsgMainAgentTokens(msg.data); + var remaining_tokens, tokens = new Messages.SpiceMsgMainAgentTokens(msg.data); this.agent_tokens += tokens.num_tokens; this.send_agent_message_queue(); @@ -206,68 +217,68 @@ SpiceMainConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_MAIN_AGENT_DISCONNECTED) + if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_DISCONNECTED) { this.agent_connected = false; return true; } - if (msg.type == SPICE_MSG_MAIN_AGENT_DATA) + if (msg.type == Constants.SPICE_MSG_MAIN_AGENT_DATA) { - var agent_data = new SpiceMsgMainAgentData(msg.data); - if (agent_data.type == VD_AGENT_ANNOUNCE_CAPABILITIES) + var agent_data = new Messages.SpiceMsgMainAgentData(msg.data); + if (agent_data.type == Constants.VD_AGENT_ANNOUNCE_CAPABILITIES) { - var agent_caps = new VDAgentAnnounceCapabilities(agent_data.data); + 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 == VD_AGENT_FILE_XFER_STATUS) + else if (agent_data.type == Constants.VD_AGENT_FILE_XFER_STATUS) { - this.handle_file_xfer_status(new VDAgentFileXferStatusMessage(agent_data.data)); + this.handle_file_xfer_status(new Messages.VDAgentFileXferStatusMessage(agent_data.data)); return true; } return false; } - if (msg.type == 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 == 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 == SPICE_MSG_MAIN_NAME) + if (msg.type == Constants.SPICE_MSG_MAIN_NAME) { this.known_unimplemented(msg.type, "Main Name"); return true; } - if (msg.type == SPICE_MSG_MAIN_UUID) + if (msg.type == Constants.SPICE_MSG_MAIN_UUID) { this.known_unimplemented(msg.type, "Main UUID"); return true; } - if (msg.type == 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 == 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 == 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; @@ -325,15 +336,15 @@ SpiceMainConn.prototype.send_agent_message_queue = function(message) SpiceMainConn.prototype.send_agent_message = function(type, message) { - var agent_data = new SpiceMsgcMainAgentData(type, message); - var sb = 0, maxsize = VD_AGENT_MAX_DATA_SIZE - SpiceMiniData.prototype.buffer_size(); + 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()) { var eb = Math.min(sb + maxsize, agent_data.buffer_size()); - var mr = new SpiceMiniData(); - mr.type = SPICE_MSGC_MAIN_AGENT_DATA; + var mr = new Messages.SpiceMiniData(); + mr.type = Constants.SPICE_MSGC_MAIN_AGENT_DATA; mr.size = eb - sb; mr.data = data.slice(sb, eb); this.send_agent_message_queue(mr); @@ -343,16 +354,16 @@ SpiceMainConn.prototype.send_agent_message = function(type, message) SpiceMainConn.prototype.announce_agent_capabilities = function(request) { - var caps = new VDAgentAnnounceCapabilities(request, (1 << VD_AGENT_CAP_MOUSE_STATE) | - (1 << VD_AGENT_CAP_MONITORS_CONFIG) | - (1 << VD_AGENT_CAP_REPLY)); - this.send_agent_message(VD_AGENT_ANNOUNCE_CAPABILITIES, caps); + 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)); + this.send_agent_message(Constants.VD_AGENT_ANNOUNCE_CAPABILITIES, caps); } SpiceMainConn.prototype.resize_window = function(flags, width, height, depth, x, y) { - var monitors_config = new VDAgentMonitorsConfig(flags, width, height, depth, x, y); - this.send_agent_message(VD_AGENT_MONITORS_CONFIG, monitors_config); + 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) @@ -363,8 +374,8 @@ SpiceMainConn.prototype.file_xfer_start = function(file) task = new SpiceFileXferTask(task_id, file); task.create_progressbar(); this.file_xfer_tasks[task_id] = task; - xfer_start = new VDAgentFileXferStartMessage(task_id, file.name, file.size); - this.send_agent_message(VD_AGENT_FILE_XFER_START, xfer_start); + xfer_start = new Messages.VDAgentFileXferStartMessage(task_id, file.name, file.size); + this.send_agent_message(Constants.VD_AGENT_FILE_XFER_START, xfer_start); } SpiceMainConn.prototype.handle_file_xfer_status = function(file_xfer_status) @@ -377,16 +388,16 @@ SpiceMainConn.prototype.handle_file_xfer_status = function(file_xfer_status) xfer_task = this.file_xfer_tasks[file_xfer_status.id]; switch (file_xfer_status.result) { - case VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA: + case Constants.VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA: this.file_xfer_read(xfer_task); return; - case VD_AGENT_FILE_XFER_STATUS_CANCELLED: + case Constants.VD_AGENT_FILE_XFER_STATUS_CANCELLED: xfer_error = "transfer is cancelled by spice agent"; break; - case VD_AGENT_FILE_XFER_STATUS_ERROR: + case Constants.VD_AGENT_FILE_XFER_STATUS_ERROR: xfer_error = "some errors occurred in the spice agent"; break; - case VD_AGENT_FILE_XFER_STATUS_SUCCESS: + case Constants.VD_AGENT_FILE_XFER_STATUS_SUCCESS: break; default: xfer_error = "unhandled status type: " + file_xfer_status.result; @@ -398,7 +409,7 @@ SpiceMainConn.prototype.handle_file_xfer_status = function(file_xfer_status) SpiceMainConn.prototype.file_xfer_read = function(file_xfer_task, start_byte) { - var FILE_XFER_CHUNK_SIZE = 32 * VD_AGENT_MAX_DATA_SIZE; + var FILE_XFER_CHUNK_SIZE = 32 * Constants.VD_AGENT_MAX_DATA_SIZE; var _this = this; var sb, eb; var slice, reader; @@ -412,9 +423,9 @@ SpiceMainConn.prototype.file_xfer_read = function(file_xfer_task, start_byte) if (file_xfer_task.cancelled) { - var xfer_status = new VDAgentFileXferStatusMessage(file_xfer_task.id, - VD_AGENT_FILE_XFER_STATUS_CANCELLED); - this.send_agent_message(VD_AGENT_FILE_XFER_STATUS, xfer_status); + var xfer_status = new Messages.VDAgentFileXferStatusMessage(file_xfer_task.id, + 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; } @@ -432,10 +443,10 @@ SpiceMainConn.prototype.file_xfer_read = function(file_xfer_task, start_byte) reader = new FileReader(); reader.onload = function(e) { - var xfer_data = new VDAgentFileXferDataMessage(file_xfer_task.id, + var xfer_data = new Messages.VDAgentFileXferDataMessage(file_xfer_task.id, e.target.result.byteLength, e.target.result); - _this.send_agent_message(VD_AGENT_FILE_XFER_DATA, xfer_data); + _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); }; @@ -460,9 +471,9 @@ SpiceMainConn.prototype.connect_agent = function() { this.agent_connected = true; - var agent_start = new SpiceMsgcMainAgentStart(~0); - var mr = new SpiceMiniData(); - mr.build_msg(SPICE_MSGC_MAIN_AGENT_START, agent_start); + var agent_start = new Messages.SpiceMsgcMainAgentStart(~0); + var mr = new Messages.SpiceMiniData(); + mr.build_msg(Constants.SPICE_MSGC_MAIN_AGENT_START, agent_start); this.send_msg(mr); this.announce_agent_capabilities(1); @@ -475,11 +486,11 @@ SpiceMainConn.prototype.connect_agent = function() SpiceMainConn.prototype.handle_mouse_mode = function(current, supported) { this.mouse_mode = current; - if (current != SPICE_MOUSE_MODE_CLIENT && (supported & SPICE_MOUSE_MODE_CLIENT)) + if (current != Constants.SPICE_MOUSE_MODE_CLIENT && (supported & Constants.SPICE_MOUSE_MODE_CLIENT)) { - var mode_request = new SpiceMsgcMainMouseModeRequest(SPICE_MOUSE_MODE_CLIENT); - var mr = new SpiceMiniData(); - mr.build_msg(SPICE_MSGC_MAIN_MOUSE_MODE_REQUEST, mode_request); + 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); this.send_msg(mr); } @@ -493,3 +504,7 @@ SpiceMainConn.prototype.relative_now = function() var ret = (Date.now() - this.our_mm_time) + this.mm_time; return ret; } + +export { + SpiceMainConn, +}; diff --git a/playback.js b/playback.js index 5af9233..f477f76 100644 --- a/playback.js +++ b/playback.js @@ -22,6 +22,13 @@ ** SpicePlaybackConn ** Drive the Spice Playback channel (sound out) **--------------------------------------------------------------------------*/ + +import * as Utils from './utils.js'; +import * as Webm from './webm.js'; +import * as Messages from './spicemsg.js'; +import { Constants } from './enums.js'; +import { SpiceConn } from './spiceconn.js'; + function SpicePlaybackConn() { SpiceConn.apply(this, arguments); @@ -40,25 +47,25 @@ SpicePlaybackConn.prototype.process_channel_message = function(msg) return false; } - if (msg.type == SPICE_MSG_PLAYBACK_START) + if (msg.type == Constants.SPICE_MSG_PLAYBACK_START) { - var start = new SpiceMsgPlaybackStart(msg.data); + var start = new Messages.SpiceMsgPlaybackStart(msg.data); - PLAYBACK_DEBUG > 0 && console.log("PlaybackStart; frequency " + start.frequency); + Utils.PLAYBACK_DEBUG > 0 && console.log("PlaybackStart; frequency " + start.frequency); - if (start.frequency != OPUS_FREQUENCY) + if (start.frequency != Webm.Constants.OPUS_FREQUENCY) { this.log_err('This player cannot handle frequency ' + start.frequency); return false; } - if (start.channels != OPUS_CHANNELS) + if (start.channels != Webm.Constants.OPUS_CHANNELS) { this.log_err('This player cannot handle ' + start.channels + ' channels'); return false; } - if (start.format != SPICE_AUDIO_FMT_S16) + if (start.format != Constants.SPICE_AUDIO_FMT_S16) { this.log_err('This player cannot format ' + start.format); return false; @@ -85,9 +92,9 @@ SpicePlaybackConn.prototype.process_channel_message = function(msg) } } - if (msg.type == SPICE_MSG_PLAYBACK_DATA) + if (msg.type == Constants.SPICE_MSG_PLAYBACK_DATA) { - var data = new SpiceMsgPlaybackData(msg.data); + var data = new Messages.SpiceMsgPlaybackData(msg.data); if (! this.source_buffer) return true; @@ -115,28 +122,28 @@ SpicePlaybackConn.prototype.process_channel_message = function(msg) will resync. */ - if (this.start_time != 0 && data.time != (this.last_data_time + EXPECTED_PACKET_DURATION)) + if (this.start_time != 0 && data.time != (this.last_data_time + Webm.Constants.EXPECTED_PACKET_DURATION)) { - if (Math.abs(data.time - (EXPECTED_PACKET_DURATION + this.last_data_time)) < MAX_CLUSTER_TIME) + if (Math.abs(data.time - (Webm.Constants.EXPECTED_PACKET_DURATION + this.last_data_time)) < Webm.Constants.MAX_CLUSTER_TIME) { - PLAYBACK_DEBUG > 1 && console.log("Hacking time of " + data.time + " to " + - (this.last_data_time + EXPECTED_PACKET_DURATION)); - data.time = this.last_data_time + EXPECTED_PACKET_DURATION; + Utils.PLAYBACK_DEBUG > 1 && console.log("Hacking time of " + data.time + " to " + + (this.last_data_time + Webm.Constants.EXPECTED_PACKET_DURATION)); + data.time = this.last_data_time + Webm.Constants.EXPECTED_PACKET_DURATION; } else { - PLAYBACK_DEBUG > 1 && console.log("Apparent gap in audio time; now is " + data.time + " last was " + this.last_data_time); + Utils.PLAYBACK_DEBUG > 1 && console.log("Apparent gap in audio time; now is " + data.time + " last was " + this.last_data_time); } } this.last_data_time = data.time; - PLAYBACK_DEBUG > 1 && console.log("PlaybackData; time " + data.time + "; length " + data.data.byteLength); + Utils.PLAYBACK_DEBUG > 1 && console.log("PlaybackData; time " + data.time + "; length " + data.data.byteLength); if (this.start_time == 0) this.start_playback(data); - else if (data.time - this.cluster_time >= MAX_CLUSTER_TIME) + else if (data.time - this.cluster_time >= Webm.Constants.MAX_CLUSTER_TIME) this.new_cluster(data); else @@ -145,10 +152,10 @@ SpicePlaybackConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_PLAYBACK_MODE) + if (msg.type == Constants.SPICE_MSG_PLAYBACK_MODE) { - var mode = new SpiceMsgPlaybackMode(msg.data); - if (mode.mode != SPICE_AUDIO_DATA_MODE_OPUS) + var mode = new Messages.SpiceMsgPlaybackMode(msg.data); + if (mode.mode != Constants.SPICE_AUDIO_DATA_MODE_OPUS) { this.log_err('This player cannot handle mode ' + mode.mode); delete this.source_buffer; @@ -156,9 +163,9 @@ SpicePlaybackConn.prototype.process_channel_message = function(msg) return true; } - if (msg.type == SPICE_MSG_PLAYBACK_STOP) + if (msg.type == Constants.SPICE_MSG_PLAYBACK_STOP) { - PLAYBACK_DEBUG > 0 && console.log("PlaybackStop"); + Utils.PLAYBACK_DEBUG > 0 && console.log("PlaybackStop"); if (this.source_buffer) { document.getElementById(this.parent.screen_id).removeChild(this.audio); @@ -176,19 +183,19 @@ SpicePlaybackConn.prototype.process_channel_message = function(msg) } } - if (msg.type == SPICE_MSG_PLAYBACK_VOLUME) + if (msg.type == Constants.SPICE_MSG_PLAYBACK_VOLUME) { this.known_unimplemented(msg.type, "Playback Volume"); return true; } - if (msg.type == SPICE_MSG_PLAYBACK_MUTE) + if (msg.type == Constants.SPICE_MSG_PLAYBACK_MUTE) { this.known_unimplemented(msg.type, "Playback Mute"); return true; } - if (msg.type == SPICE_MSG_PLAYBACK_LATENCY) + if (msg.type == Constants.SPICE_MSG_PLAYBACK_LATENCY) { this.known_unimplemented(msg.type, "Playback Latency"); return true; @@ -201,9 +208,9 @@ SpicePlaybackConn.prototype.start_playback = function(data) { this.start_time = data.time; - var h = new webm_Header(); - var te = new webm_AudioTrackEntry; - var t = new webm_Tracks(te); + var h = new Webm.Header(); + var te = new Webm.AudioTrackEntry; + var t = new Webm.Tracks(te); var mb = new ArrayBuffer(h.buffer_size() + t.buffer_size()) @@ -221,7 +228,7 @@ SpicePlaybackConn.prototype.new_cluster = function(data) { this.cluster_time = data.time; - var c = new webm_Cluster(data.time - this.start_time); + var c = new Webm.Cluster(data.time - this.start_time); var mb = new ArrayBuffer(c.buffer_size()); this.bytes_written += c.to_buffer(mb); @@ -236,7 +243,7 @@ SpicePlaybackConn.prototype.new_cluster = function(data) SpicePlaybackConn.prototype.simple_block = function(data, keyframe) { - var sb = new webm_SimpleBlock(data.time - this.cluster_time, data.data, keyframe); + var sb = new Webm.SimpleBlock(data.time - this.cluster_time, data.data, keyframe); var mb = new ArrayBuffer(sb.buffer_size()); this.bytes_written += sb.to_buffer(mb); @@ -254,14 +261,14 @@ function handle_source_open(e) if (p.source_buffer) return; - p.source_buffer = this.addSourceBuffer(SPICE_PLAYBACK_CODEC); + p.source_buffer = this.addSourceBuffer(Webm.Constants.SPICE_PLAYBACK_CODEC); if (! p.source_buffer) { - p.log_err('Codec ' + SPICE_PLAYBACK_CODEC + ' not available.'); + p.log_err('Codec ' + Webm.Constants.SPICE_PLAYBACK_CODEC + ' not available.'); return; } - if (PLAYBACK_DEBUG > 0) + if (Utils.PLAYBACK_DEBUG > 0) playback_handle_event_debug.call(this, e); listen_for_audio_events(p); @@ -315,7 +322,7 @@ function handle_append_buffer_done(e) { var p = this.spiceconn; - if (PLAYBACK_DEBUG > 1) + if (Utils.PLAYBACK_DEBUG > 1) playback_handle_event_debug.call(this, e); if (p.queue.length > 0) @@ -352,18 +359,18 @@ function playback_handle_event_debug(e) var p = this.spiceconn; if (p.audio) { - if (PLAYBACK_DEBUG > 0 || p.audio.buffered.len > 1) + if (Utils.PLAYBACK_DEBUG > 0 || p.audio.buffered.len > 1) console.log(p.audio.currentTime + ": event " + e.type + - dump_media_element(p.audio)); + Utils.dump_media_element(p.audio)); } - if (PLAYBACK_DEBUG > 1 && p.media_source) - console.log(" media_source " + dump_media_source(p.media_source)); + if (Utils.PLAYBACK_DEBUG > 1 && p.media_source) + console.log(" media_source " + Utils.dump_media_source(p.media_source)); - if (PLAYBACK_DEBUG > 1 && p.source_buffer) - console.log(" source_buffer " + dump_source_buffer(p.source_buffer)); + if (Utils.PLAYBACK_DEBUG > 1 && p.source_buffer) + console.log(" source_buffer " + Utils.dump_source_buffer(p.source_buffer)); - if (PLAYBACK_DEBUG > 0 || p.queue.length > 1) + if (Utils.PLAYBACK_DEBUG > 0 || p.queue.length > 1) console.log(' queue len ' + p.queue.length + '; append_okay: ' + p.append_okay); } @@ -391,8 +398,12 @@ function listen_for_audio_events(spiceconn) ]; audio_0_events.forEach(playback_debug_listen_for_one_event, spiceconn.audio); - if (PLAYBACK_DEBUG > 0) + if (Utils.PLAYBACK_DEBUG > 0) audio_1_events.forEach(playback_debug_listen_for_one_event, spiceconn.audio); - if (PLAYBACK_DEBUG > 1) + if (Utils.PLAYBACK_DEBUG > 1) audio_2_events.forEach(playback_debug_listen_for_one_event, spiceconn.audio); } + +export { + SpicePlaybackConn, +}; diff --git a/png.js b/png.js index 6a26151..d6dd7ab 100644 --- a/png.js +++ b/png.js @@ -22,6 +22,8 @@ ** crc logic from rfc2083 ported to Javascript **--------------------------------------------------------------------------*/ +import { SpiceDataView } from './spicedataview.js'; + var rfc2083_crc_table = Array(256); var rfc2083_crc_table_computed = 0; /* Make the table for a fast CRC. */ @@ -254,3 +256,7 @@ function create_rgba_png(width, height, bytes) return "%89PNG%0D%0A%1A%0A" + str; } + +export { + create_rgba_png, +}; diff --git a/port.js b/port.js index ee22073..74523ae 100644 --- a/port.js +++ b/port.js @@ -19,6 +19,11 @@ along with spice-html5. If not, see . */ +import { Constants } from './enums.js'; +import { DEBUG } from './utils.js'; +import { SpiceConn } from './spiceconn.js'; +import { SpiceMsgPortInit } from './spicemsg.js'; + /*---------------------------------------------------------------------------- ** SpicePortConn ** Drive the Spice Port Channel @@ -34,7 +39,7 @@ SpicePortConn.prototype = Object.create(SpiceConn.prototype); SpicePortConn.prototype.process_channel_message = function(msg) { - if (msg.type == SPICE_MSG_PORT_INIT) + if (msg.type == Constants.SPICE_MSG_PORT_INIT) { if (this.port_name === null) { @@ -47,7 +52,7 @@ SpicePortConn.prototype.process_channel_message = function(msg) DEBUG > 0 && console.log('SPICE port: Port', this.port_name, 'is already initialized.'); } - else if (msg.type == SPICE_MSG_PORT_EVENT) + else if (msg.type == Constants.SPICE_MSG_PORT_EVENT) { DEBUG > 0 && console.log('SPICE port: Port event received for', this.portName, msg); var event = new CustomEvent('spice-port-event', { @@ -62,7 +67,7 @@ SpicePortConn.prototype.process_channel_message = function(msg) window.dispatchEvent(event); return true; } - else if (msg.type == SPICE_MSG_SPICEVMC_DATA) + else if (msg.type == Constants.SPICE_MSG_SPICEVMC_DATA) { DEBUG > 0 && console.log('SPICE port: Data received in port', this.portName, msg); var event = new CustomEvent('spice-port-data', { @@ -83,3 +88,7 @@ SpicePortConn.prototype.process_channel_message = function(msg) return false; }; + +export { + SpicePortConn, +}; diff --git a/quic.js b/quic.js index 22ea3c7..216937f 100644 --- a/quic.js +++ b/quic.js @@ -22,12 +22,15 @@ var encoder; -var QUIC_IMAGE_TYPE_INVALID = 0; -var QUIC_IMAGE_TYPE_GRAY = 1; -var QUIC_IMAGE_TYPE_RGB16 = 2; -var QUIC_IMAGE_TYPE_RGB24 = 3; -var QUIC_IMAGE_TYPE_RGB32 = 4; -var QUIC_IMAGE_TYPE_RGBA = 5; +var Constants = { + QUIC_IMAGE_TYPE_INVALID : 0, + QUIC_IMAGE_TYPE_GRAY : 1, + QUIC_IMAGE_TYPE_RGB16 : 2, + QUIC_IMAGE_TYPE_RGB24 : 3, + QUIC_IMAGE_TYPE_RGB32 : 4, + QUIC_IMAGE_TYPE_RGBA : 5, +}; + var DEFevol = 3; var DEFwmimax = 6; var DEFwminext = 2048; @@ -191,17 +194,17 @@ function family_init(family, bpc, limit) function quic_image_bpc(type) { switch (type) { - case QUIC_IMAGE_TYPE_GRAY: + case Constants.QUIC_IMAGE_TYPE_GRAY: return 8; - case QUIC_IMAGE_TYPE_RGB16: + case Constants.QUIC_IMAGE_TYPE_RGB16: return 5; - case QUIC_IMAGE_TYPE_RGB24: + case Constants.QUIC_IMAGE_TYPE_RGB24: return 8; - case QUIC_IMAGE_TYPE_RGB32: + case Constants.QUIC_IMAGE_TYPE_RGB32: return 8; - case QUIC_IMAGE_TYPE_RGBA: + case Constants.QUIC_IMAGE_TYPE_RGBA: return 8; - case QUIC_IMAGE_TYPE_INVALID: + case Constants.QUIC_IMAGE_TYPE_INVALID: default: console.log("quic: bad image type\n"); return 0; @@ -1189,8 +1192,8 @@ QuicEncoder.prototype.quic_decode = function(buf, stride) switch (this.type) { - case QUIC_IMAGE_TYPE_RGB32: - case QUIC_IMAGE_TYPE_RGB24: + case Constants.QUIC_IMAGE_TYPE_RGB32: + case Constants.QUIC_IMAGE_TYPE_RGB24: this.channels[0].correlate_row.zero = 0; this.channels[1].correlate_row.zero = 0; this.channels[2].correlate_row.zero = 0; @@ -1208,11 +1211,11 @@ QuicEncoder.prototype.quic_decode = function(buf, stride) this.rows_completed++; }; break; - case QUIC_IMAGE_TYPE_RGB16: + case Constants.QUIC_IMAGE_TYPE_RGB16: console.log("quic: unsupported output format\n"); return false; break; - case QUIC_IMAGE_TYPE_RGBA: + case Constants.QUIC_IMAGE_TYPE_RGBA: this.channels[0].correlate_row.zero = 0; this.channels[1].correlate_row.zero = 0; this.channels[2].correlate_row.zero = 0; @@ -1237,12 +1240,12 @@ QuicEncoder.prototype.quic_decode = function(buf, stride) } break; - case QUIC_IMAGE_TYPE_GRAY: + case Constants.QUIC_IMAGE_TYPE_GRAY: console.log("quic: unsupported output format\n"); return false; break; - case QUIC_IMAGE_TYPE_INVALID: + case Constants.QUIC_IMAGE_TYPE_INVALID: default: console.log("quic: bad image type\n"); return false; @@ -1255,8 +1258,8 @@ QuicEncoder.prototype.simple_quic_decode = function(buf) var stride = 4; /* FIXME - proper stride calc please */ if (!this.quic_decode_begin(buf)) return undefined; - if (this.type != QUIC_IMAGE_TYPE_RGB32 && this.type != QUIC_IMAGE_TYPE_RGB24 - && this.type != QUIC_IMAGE_TYPE_RGBA) + if (this.type != Constants.QUIC_IMAGE_TYPE_RGB32 && this.type != Constants.QUIC_IMAGE_TYPE_RGB24 + && this.type != Constants.QUIC_IMAGE_TYPE_RGBA) return undefined; var out = new Uint8Array(this.width*this.height*4); out[0] = 69; @@ -1299,7 +1302,7 @@ function convert_spice_quic_to_web(context, spice_quic) ret.data[i + 0] = spice_quic.outptr[i + 2]; ret.data[i + 1] = spice_quic.outptr[i + 1]; ret.data[i + 2] = spice_quic.outptr[i + 0]; - if (spice_quic.type !== QUIC_IMAGE_TYPE_RGBA) + if (spice_quic.type !== Constants.QUIC_IMAGE_TYPE_RGBA) ret.data[i + 3] = 255; else ret.data[i + 3] = 255 - spice_quic.outptr[i + 3]; @@ -1334,3 +1337,9 @@ if (need_init) if (!encoder) throw("quic: failed to create encoder"); } + +export { + Constants, + SpiceQuic, + convert_spice_quic_to_web, +}; diff --git a/resize.js b/resize.js index 51fb1cc..32282fd 100644 --- a/resize.js +++ b/resize.js @@ -80,3 +80,8 @@ function handle_resize(e) sc.spice_resize_timer = window.setTimeout(resize_helper, 200, sc); } + +export { + resize_helper, + handle_resize, +}; diff --git a/simulatecursor.js b/simulatecursor.js index ffd9089..07d483a 100644 --- a/simulatecursor.js +++ b/simulatecursor.js @@ -25,6 +25,10 @@ ** is a preloaded cursor available, we will use that. Failing that, we will ** simulate a cursor using an image that is moved around the screen. **--------------------------------------------------------------------------*/ + +import { SpiceDataView } from './spicedataview.js'; +import { hex_sha1 } from './thirdparty/sha1.js'; + var SpiceSimulateCursor = { cursors : new Array(), @@ -200,3 +204,5 @@ SpiceSimulateCursor.ICONDIRENTRY.prototype = return 16; } }; + +export { SpiceSimulateCursor }; diff --git a/spice.html b/spice.html index 7abfcff..f55f218 100644 --- a/spice.html +++ b/spice.html @@ -28,38 +28,27 @@ Spice Javascript client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -184,7 +174,7 @@ - +
diff --git a/spice_auto.html b/spice_auto.html index 2f04fc9..ad4e171 100644 --- a/spice_auto.html +++ b/spice_auto.html @@ -28,38 +28,27 @@ Spice Javascript client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +