@novnc/novnc
Advanced tools
Comparing version 1.5.0-g96c76f7 to 1.5.0-g9cdbd28
@@ -19,3 +19,3 @@ # Using the noVNC JavaScript library | ||
## Conversion of Modules | ||
## Conversion of modules | ||
@@ -22,0 +22,0 @@ noVNC is written using ECMAScript 6 modules. This is not supported by older |
@@ -31,3 +31,3 @@ "use strict"; | ||
value: function () { | ||
var _importKey2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(key, extractable, keyUsages) { | ||
var _importKey2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(key, extractable, keyUsages) { | ||
return _regeneratorRuntime().wrap(function _callee$(_context) { | ||
@@ -56,3 +56,3 @@ while (1) switch (_context.prev = _context.next) { | ||
value: function () { | ||
var _encrypt = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_algorithm, plaintext) { | ||
var _encrypt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_algorithm, plaintext) { | ||
var x, n, i, y; | ||
@@ -106,3 +106,3 @@ return _regeneratorRuntime().wrap(function _callee2$(_context2) { | ||
value: function () { | ||
var _importKey3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(key, _algorithm, extractable, keyUsages) { | ||
var _importKey3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(key, _algorithm, extractable, keyUsages) { | ||
var cipher; | ||
@@ -151,3 +151,3 @@ return _regeneratorRuntime().wrap(function _callee3$(_context3) { | ||
value: function () { | ||
var _encryptBlock2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(block) { | ||
var _encryptBlock2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(block) { | ||
var encrypted; | ||
@@ -179,3 +179,3 @@ return _regeneratorRuntime().wrap(function _callee4$(_context4) { | ||
value: function () { | ||
var _initCMAC2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() { | ||
var _initCMAC2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() { | ||
var k1, k2, v, i, lut; | ||
@@ -215,3 +215,3 @@ return _regeneratorRuntime().wrap(function _callee5$(_context5) { | ||
value: function () { | ||
var _encryptCTR2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(data, counter) { | ||
var _encryptCTR2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(data, counter) { | ||
var encrypted; | ||
@@ -244,3 +244,3 @@ return _regeneratorRuntime().wrap(function _callee6$(_context6) { | ||
value: function () { | ||
var _decryptCTR2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(data, counter) { | ||
var _decryptCTR2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(data, counter) { | ||
var decrypted; | ||
@@ -273,3 +273,3 @@ return _regeneratorRuntime().wrap(function _callee7$(_context7) { | ||
value: function () { | ||
var _computeCMAC2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(data, prefixBlock) { | ||
var _computeCMAC2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(data, prefixBlock) { | ||
var n, m, r, cbcData, i, _i, cbcEncrypted, mac; | ||
@@ -325,3 +325,3 @@ return _regeneratorRuntime().wrap(function _callee8$(_context8) { | ||
value: function () { | ||
var _importKey4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(key) { | ||
var _importKey4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(key) { | ||
return _regeneratorRuntime().wrap(function _callee9$(_context9) { | ||
@@ -359,3 +359,3 @@ while (1) switch (_context9.prev = _context9.next) { | ||
value: function () { | ||
var _encrypt2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(algorithm, message) { | ||
var _encrypt2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10(algorithm, message) { | ||
var ad, nonce, nCMAC, encrypted, adCMAC, mac, i, res; | ||
@@ -404,3 +404,3 @@ return _regeneratorRuntime().wrap(function _callee10$(_context10) { | ||
value: function () { | ||
var _decrypt = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(algorithm, data) { | ||
var _decrypt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(algorithm, data) { | ||
var encrypted, ad, nonce, mac, nCMAC, adCMAC, computedMac, i, _i2, res; | ||
@@ -470,3 +470,3 @@ return _regeneratorRuntime().wrap(function _callee11$(_context11) { | ||
value: function () { | ||
var _importKey5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12(key, _algorithm, _extractable, _keyUsages) { | ||
var _importKey5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12(key, _algorithm, _extractable, _keyUsages) { | ||
var cipher; | ||
@@ -473,0 +473,0 @@ return _regeneratorRuntime().wrap(function _callee12$(_context12) { |
@@ -13,3 +13,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2021 The noVNC Authors | ||
* Copyright (C) 2021 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -26,3 +26,3 @@ * | ||
function _MD() { | ||
_MD = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(d) { | ||
_MD = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(d) { | ||
var s, i; | ||
@@ -29,0 +29,0 @@ return _regeneratorRuntime().wrap(function _callee$(_context) { |
@@ -56,3 +56,3 @@ "use strict"; | ||
value: function () { | ||
var _generateKey2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(algorithm, extractable) { | ||
var _generateKey2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(algorithm, extractable) { | ||
var key, privateKey; | ||
@@ -100,3 +100,3 @@ return _regeneratorRuntime().wrap(function _callee$(_context) { | ||
value: function () { | ||
var _importKey2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(key, extractable) { | ||
var _importKey2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(key, extractable) { | ||
var n, e; | ||
@@ -137,3 +137,3 @@ return _regeneratorRuntime().wrap(function _callee2$(_context2) { | ||
value: function () { | ||
var _encrypt = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_algorithm, message) { | ||
var _encrypt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_algorithm, message) { | ||
var ps, i, em, emBigInt, c; | ||
@@ -175,3 +175,3 @@ return _regeneratorRuntime().wrap(function _callee3$(_context3) { | ||
value: function () { | ||
var _decrypt = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_algorithm, message) { | ||
var _decrypt = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_algorithm, message) { | ||
var msgBigInt, emBigInt, em, i; | ||
@@ -233,3 +233,3 @@ return _regeneratorRuntime().wrap(function _callee4$(_context4) { | ||
value: function () { | ||
var _exportKey = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() { | ||
var _exportKey = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() { | ||
return _regeneratorRuntime().wrap(function _callee5$(_context5) { | ||
@@ -263,3 +263,3 @@ while (1) switch (_context5.prev = _context5.next) { | ||
value: function () { | ||
var _generateKey3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(algorithm, extractable, _keyUsages) { | ||
var _generateKey3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(algorithm, extractable, _keyUsages) { | ||
var cipher; | ||
@@ -290,3 +290,3 @@ return _regeneratorRuntime().wrap(function _callee6$(_context6) { | ||
value: function () { | ||
var _importKey3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(key, _algorithm, extractable, keyUsages) { | ||
var _importKey3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(key, _algorithm, extractable, keyUsages) { | ||
var cipher; | ||
@@ -293,0 +293,0 @@ return _regeneratorRuntime().wrap(function _callee7$(_context7) { |
@@ -15,3 +15,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -18,0 +18,0 @@ * |
@@ -17,3 +17,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -20,0 +20,0 @@ * |
@@ -22,3 +22,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -25,0 +25,0 @@ * |
@@ -15,3 +15,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -18,0 +18,0 @@ * |
@@ -15,3 +15,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -18,0 +18,0 @@ * |
@@ -19,3 +19,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* (c) 2012 Michael Tinglof, Joe Balaz, Les Piech (Mercuri.ca) | ||
@@ -22,0 +22,0 @@ * Licensed under MPL 2.0 (see LICENSE.txt) |
@@ -23,3 +23,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -26,0 +26,0 @@ * |
@@ -16,3 +16,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2021 The noVNC Authors | ||
* Copyright (C) 2021 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -19,0 +19,0 @@ * |
@@ -17,3 +17,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2020 The noVNC Authors | ||
* Copyright (C) 2020 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -20,0 +20,0 @@ * |
@@ -20,3 +20,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -388,2 +388,14 @@ * | ||
}, { | ||
key: "videoFrame", | ||
value: function videoFrame(x, y, width, height, frame) { | ||
this._renderQPush({ | ||
'type': 'frame', | ||
'frame': frame, | ||
'x': x, | ||
'y': y, | ||
'width': width, | ||
'height': height | ||
}); | ||
} | ||
}, { | ||
key: "blitImage", | ||
@@ -415,5 +427,19 @@ value: function blitImage(x, y, width, height, arr, offset, fromQueue) { | ||
key: "drawImage", | ||
value: function drawImage(img, x, y) { | ||
this._drawCtx.drawImage(img, x, y); | ||
this._damage(x, y, img.width, img.height); | ||
value: function drawImage(img) { | ||
var _this$_drawCtx; | ||
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | ||
args[_key - 1] = arguments[_key]; | ||
} | ||
(_this$_drawCtx = this._drawCtx).drawImage.apply(_this$_drawCtx, [img].concat(args)); | ||
if (args.length <= 4) { | ||
var x = args[0], | ||
y = args[1]; | ||
this._damage(x, y, img.width, img.height); | ||
} else { | ||
var sw = args[2], | ||
sh = args[3], | ||
dx = args[4], | ||
dy = args[5]; | ||
this._damage(dx, dy, sw, sh); | ||
} | ||
} | ||
@@ -487,37 +513,72 @@ }, { | ||
value: function _scanRenderQ() { | ||
var _this2 = this; | ||
var ready = true; | ||
var _loop = function _loop() { | ||
var a = _this2._renderQ[0]; | ||
switch (a.type) { | ||
case 'flip': | ||
_this2.flip(true); | ||
break; | ||
case 'copy': | ||
_this2.copyImage(a.oldX, a.oldY, a.x, a.y, a.width, a.height, true); | ||
break; | ||
case 'fill': | ||
_this2.fillRect(a.x, a.y, a.width, a.height, a.color, true); | ||
break; | ||
case 'blit': | ||
_this2.blitImage(a.x, a.y, a.width, a.height, a.data, 0, true); | ||
break; | ||
case 'img': | ||
if (a.img.complete) { | ||
if (a.img.width !== a.width || a.img.height !== a.height) { | ||
Log.Error("Decoded image has incorrect dimensions. Got " + a.img.width + "x" + a.img.height + ". Expected " + a.width + "x" + a.height + "."); | ||
return { | ||
v: void 0 | ||
}; | ||
} | ||
_this2.drawImage(a.img, a.x, a.y); | ||
} else { | ||
a.img._noVNCDisplay = _this2; | ||
a.img.addEventListener('load', _this2._resumeRenderQ); | ||
// We need to wait for this image to 'load' | ||
// to keep things in-order | ||
ready = false; | ||
} | ||
break; | ||
case 'frame': | ||
if (a.frame.ready) { | ||
// The encoded frame may be larger than the rect due to | ||
// limitations of the encoder, so we need to crop the | ||
// frame. | ||
var frame = a.frame.frame; | ||
if (frame.codedWidth < a.width || frame.codedHeight < a.height) { | ||
Log.Warn("Decoded video frame does not cover its full rectangle area. Expecting at least " + a.width + "x" + a.height + " but got " + frame.codedWidth + "x" + frame.codedHeight); | ||
} | ||
var sx = 0; | ||
var sy = 0; | ||
var sw = a.width; | ||
var sh = a.height; | ||
var dx = a.x; | ||
var dy = a.y; | ||
var dw = sw; | ||
var dh = sh; | ||
_this2.drawImage(frame, sx, sy, sw, sh, dx, dy, dw, dh); | ||
frame.close(); | ||
} else { | ||
var display = _this2; | ||
a.frame.promise.then(function () { | ||
display._scanRenderQ(); | ||
}); | ||
ready = false; | ||
} | ||
break; | ||
} | ||
if (ready) { | ||
_this2._renderQ.shift(); | ||
} | ||
}, | ||
_ret; | ||
while (ready && this._renderQ.length > 0) { | ||
var a = this._renderQ[0]; | ||
switch (a.type) { | ||
case 'flip': | ||
this.flip(true); | ||
break; | ||
case 'copy': | ||
this.copyImage(a.oldX, a.oldY, a.x, a.y, a.width, a.height, true); | ||
break; | ||
case 'fill': | ||
this.fillRect(a.x, a.y, a.width, a.height, a.color, true); | ||
break; | ||
case 'blit': | ||
this.blitImage(a.x, a.y, a.width, a.height, a.data, 0, true); | ||
break; | ||
case 'img': | ||
if (a.img.complete) { | ||
if (a.img.width !== a.width || a.img.height !== a.height) { | ||
Log.Error("Decoded image has incorrect dimensions. Got " + a.img.width + "x" + a.img.height + ". Expected " + a.width + "x" + a.height + "."); | ||
return; | ||
} | ||
this.drawImage(a.img, a.x, a.y); | ||
} else { | ||
a.img._noVNCDisplay = this; | ||
a.img.addEventListener('load', this._resumeRenderQ); | ||
// We need to wait for this image to 'load' | ||
// to keep things in-order | ||
ready = false; | ||
} | ||
break; | ||
} | ||
if (ready) { | ||
this._renderQ.shift(); | ||
} | ||
_ret = _loop(); | ||
if (_ret) return _ret.v; | ||
} | ||
@@ -524,0 +585,0 @@ if (this._renderQ.length === 0 && this._flushPromise !== null) { |
@@ -10,3 +10,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -22,2 +22,3 @@ * | ||
encodingHextile: 5, | ||
encodingZlib: 6, | ||
encodingTight: 7, | ||
@@ -27,2 +28,3 @@ encodingZRLE: 16, | ||
encodingJPEG: 21, | ||
encodingH264: 50, | ||
pseudoEncodingQualityLevel9: -23, | ||
@@ -55,2 +57,4 @@ pseudoEncodingQualityLevel0: -32, | ||
return "Hextile"; | ||
case encodings.encodingZlib: | ||
return "Zlib"; | ||
case encodings.encodingTight: | ||
@@ -64,2 +68,4 @@ return "Tight"; | ||
return "JPEG"; | ||
case encodings.encodingH264: | ||
return "H.264"; | ||
default: | ||
@@ -66,0 +72,0 @@ return "[unknown encoding " + num + "]"; |
@@ -17,3 +17,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2020 The noVNC Authors | ||
* Copyright (C) 2020 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -20,0 +20,0 @@ * |
@@ -11,3 +11,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2018 The noVNC Authors | ||
* Copyright (C) 2018 The noVNC authors | ||
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) | ||
@@ -14,0 +14,0 @@ */ |
@@ -9,3 +9,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2018 The noVNC Authors | ||
* Copyright (C) 2018 The noVNC authors | ||
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) | ||
@@ -12,0 +12,0 @@ */ |
@@ -15,3 +15,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2020 The noVNC Authors | ||
* Copyright (C) 2020 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -18,0 +18,0 @@ * |
@@ -22,3 +22,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) | ||
@@ -25,0 +25,0 @@ */ |
@@ -9,3 +9,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2018 The noVNC Authors | ||
* Copyright (C) 2018 The noVNC authors | ||
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) | ||
@@ -12,0 +12,0 @@ */ |
@@ -36,3 +36,3 @@ "use strict"; | ||
value: function () { | ||
var _setKey = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(key) { | ||
var _setKey = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(key) { | ||
return _regeneratorRuntime().wrap(function _callee$(_context) { | ||
@@ -61,3 +61,3 @@ while (1) switch (_context.prev = _context.next) { | ||
value: function () { | ||
var _makeMessage = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(message) { | ||
var _makeMessage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(message) { | ||
var ad, encrypted, i, res; | ||
@@ -95,3 +95,3 @@ return _regeneratorRuntime().wrap(function _callee2$(_context2) { | ||
value: function () { | ||
var _receiveMessage = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(length, encrypted) { | ||
var _receiveMessage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(length, encrypted) { | ||
var ad, res, i; | ||
@@ -237,3 +237,3 @@ return _regeneratorRuntime().wrap(function _callee3$(_context3) { | ||
value: function () { | ||
var _negotiateRA2neAuthAsync = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { | ||
var _negotiateRA2neAuthAsync = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { | ||
var serverKeyLengthBuffer, serverKeyLength, serverKeyBytes, serverN, serverE, serverRSACipher, serverPublickey, approveKey, clientKeyLength, clientKeyBytes, clientRSACipher, clientExportedRSAKey, clientN, clientE, clientPublicKey, clientRandom, clientEncryptedRandom, clientRandomMessage, serverEncryptedRandom, serverRandom, clientSessionKey, serverSessionKey, clientCipher, serverCipher, serverHash, clientHash, serverHashReceived, i, subtype, waitCredentials, username, password, credentials, _i, _i2; | ||
@@ -240,0 +240,0 @@ return _regeneratorRuntime().wrap(function _callee4$(_context4) { |
"use strict"; | ||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } | ||
Object.defineProperty(exports, "__esModule", { | ||
@@ -23,9 +22,14 @@ value: true | ||
exports.isWindows = isWindows; | ||
exports.supportsCursorURIs = void 0; | ||
exports.supportsWebCodecsH264Decode = exports.supportsCursorURIs = void 0; | ||
var Log = _interopRequireWildcard(require("./logging.js")); | ||
var _base = _interopRequireDefault(require("../base64.js")); | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } | ||
/* | ||
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } | ||
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } | ||
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } | ||
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } /* | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -37,3 +41,2 @@ * | ||
*/ | ||
// Touch detection | ||
@@ -90,2 +93,91 @@ var isTouchDevice = exports.isTouchDevice = 'ontouchstart' in document.documentElement || | ||
var hasScrollbarGutter = exports.hasScrollbarGutter = _hasScrollbarGutter; | ||
var supportsWebCodecsH264Decode = exports.supportsWebCodecsH264Decode = false; | ||
function _checkWebCodecsH264DecodeSupport() { | ||
return _checkWebCodecsH264DecodeSupport2.apply(this, arguments); | ||
} | ||
function _checkWebCodecsH264DecodeSupport2() { | ||
_checkWebCodecsH264DecodeSupport2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { | ||
var config, support, data, gotframe, _error, decoder, chunk; | ||
return _regeneratorRuntime().wrap(function _callee$(_context) { | ||
while (1) switch (_context.prev = _context.next) { | ||
case 0: | ||
if ('VideoDecoder' in window) { | ||
_context.next = 2; | ||
break; | ||
} | ||
return _context.abrupt("return", false); | ||
case 2: | ||
// We'll need to make do with some placeholders here | ||
config = { | ||
codec: 'avc1.42401f', | ||
codedWidth: 1920, | ||
codedHeight: 1080, | ||
optimizeForLatency: true | ||
}; | ||
_context.next = 5; | ||
return VideoDecoder.isConfigSupported(config); | ||
case 5: | ||
support = _context.sent; | ||
if (support.supported) { | ||
_context.next = 8; | ||
break; | ||
} | ||
return _context.abrupt("return", false); | ||
case 8: | ||
// Firefox incorrectly reports supports for H.264 under some | ||
// circumstances, so we need to actually test a real frame | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1932392 | ||
data = new Uint8Array(_base["default"].decode('AAAAAWdCwBTZnpuAgICgAAADACAAAAZB4oVNAAAAAWjJYyyAAAABBgX//4Hc' + 'Rem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5Zjkg' + 'LSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIz' + 'IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0aW9u' + 'czogY2FiYWM9MCByZWY9NSBkZWJsb2NrPTE6MDowIGFuYWx5c2U9MHgxOjB4' + 'MTExIG1lPWhleCBzdWJtZT04IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4' + 'ZWRfcmVmPTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0yIDh4' + 'OGRjdD0wIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJv' + 'bWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9MSBsb29rYWhlYWRfdGhyZWFkcz0x' + 'IHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9' + 'MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVz' + 'PTAgd2VpZ2h0cD0wIGtleWludD1pbmZpbml0ZSBrZXlpbnRfbWluPTI1IHNj' + 'ZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NTAgcmM9' + 'YWJyIG1idHJlZT0xIGJpdHJhdGU9NDAwIHJhdGV0b2w9MS4wIHFjb21wPTAu' + 'NjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFx' + 'PTE6MS4wMACAAAABZYiEBrxmKAAPVccAAS044AA5DRJMnkycJk4TPw==')); | ||
gotframe = false; | ||
_error = null; | ||
decoder = new VideoDecoder({ | ||
output: function output(frame) { | ||
gotframe = true; | ||
}, | ||
error: function error(e) { | ||
_error = e; | ||
} | ||
}); | ||
chunk = new EncodedVideoChunk({ | ||
timestamp: 0, | ||
type: 'key', | ||
data: data | ||
}); | ||
decoder.configure(config); | ||
decoder.decode(chunk); | ||
_context.prev = 15; | ||
_context.next = 18; | ||
return decoder.flush(); | ||
case 18: | ||
_context.next = 23; | ||
break; | ||
case 20: | ||
_context.prev = 20; | ||
_context.t0 = _context["catch"](15); | ||
// Firefox incorrectly throws an exception here | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1932566 | ||
_error = _context.t0; | ||
case 23: | ||
if (gotframe) { | ||
_context.next = 25; | ||
break; | ||
} | ||
return _context.abrupt("return", false); | ||
case 25: | ||
if (!(_error !== null)) { | ||
_context.next = 27; | ||
break; | ||
} | ||
return _context.abrupt("return", false); | ||
case 27: | ||
return _context.abrupt("return", true); | ||
case 28: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
}, _callee, null, [[15, 20]]); | ||
})); | ||
return _checkWebCodecsH264DecodeSupport2.apply(this, arguments); | ||
} | ||
exports.supportsWebCodecsH264Decode = supportsWebCodecsH264Decode = await _checkWebCodecsH264DecodeSupport(); | ||
@@ -92,0 +184,0 @@ /* |
@@ -15,3 +15,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 or any later version (see LICENSE.txt) | ||
@@ -18,0 +18,0 @@ */ |
@@ -9,3 +9,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2020 The noVNC Authors | ||
* Copyright (C) 2020 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -12,0 +12,0 @@ * |
@@ -12,3 +12,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2018 The noVNC Authors | ||
* Copyright (C) 2018 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -15,0 +15,0 @@ * |
@@ -15,3 +15,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -18,0 +18,0 @@ * |
@@ -10,3 +10,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2020 The noVNC Authors | ||
* Copyright (C) 2020 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -13,0 +13,0 @@ * |
@@ -11,3 +11,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -14,0 +14,0 @@ * |
@@ -10,3 +10,3 @@ "use strict"; | ||
* noVNC: HTML5 VNC client | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -13,0 +13,0 @@ * |
@@ -23,3 +23,3 @@ "use strict"; | ||
* Websock: high-performance buffering wrapper | ||
* Copyright (C) 2019 The noVNC Authors | ||
* Copyright (C) 2019 The noVNC authors | ||
* Licensed under MPL 2.0 (see LICENSE.txt) | ||
@@ -81,3 +81,3 @@ * | ||
// Getters and Setters | ||
// Getters and setters | ||
return _createClass(Websock, [{ | ||
@@ -103,3 +103,3 @@ key: "readyState", | ||
// Receive Queue | ||
// Receive queue | ||
}, { | ||
@@ -199,3 +199,3 @@ key: "rQpeek8", | ||
// Send Queue | ||
// Send queue | ||
}, { | ||
@@ -240,3 +240,3 @@ key: "sQpush8", | ||
} | ||
this._sQ.set(bytes.subarray(offset, chunkSize), this._sQlen); | ||
this._sQ.set(bytes.subarray(offset, offset + chunkSize), this._sQlen); | ||
this._sQlen += chunkSize; | ||
@@ -262,3 +262,3 @@ offset += chunkSize; | ||
// Event Handlers | ||
// Event handlers | ||
}, { | ||
@@ -364,3 +364,3 @@ key: "off", | ||
if (this._rQbufferSize - (this._rQlen - this._rQi) < minFit) { | ||
throw new Error("Receive Queue buffer exceeded " + MAX_RQ_GROW_SIZE + " bytes, and the new message could not fit"); | ||
throw new Error("Receive queue buffer exceeded " + MAX_RQ_GROW_SIZE + " bytes, and the new message could not fit"); | ||
} | ||
@@ -367,0 +367,0 @@ } |
@@ -1,2 +0,2 @@ | ||
noVNC is Copyright (C) 2022 The noVNC Authors | ||
noVNC is Copyright (C) 2022 The noVNC authors | ||
(./AUTHORS) | ||
@@ -3,0 +3,0 @@ |
{ | ||
"name": "@novnc/novnc", | ||
"version": "1.5.0-g96c76f7", | ||
"version": "1.5.0-g9cdbd28", | ||
"description": "An HTML5 VNC client", | ||
@@ -59,4 +59,3 @@ "browser": "lib/rfb", | ||
"mocha": "latest", | ||
"node-getopt": "latest", | ||
"po2json": "latest", | ||
"pofile": "latest", | ||
"sinon": "latest", | ||
@@ -63,0 +62,0 @@ "sinon-chai": "latest" |
@@ -1,2 +0,2 @@ | ||
## noVNC: HTML VNC Client Library and Application | ||
## noVNC: HTML VNC client library and application | ||
@@ -17,6 +17,6 @@ [![Test Status](https://github.com/novnc/noVNC/workflows/Test/badge.svg)](https://github.com/novnc/noVNC/actions?query=workflow%3ATest) | ||
[ThinLinc](https://cendio.com/thinlinc). See | ||
[the Projects and Companies wiki page](https://github.com/novnc/noVNC/wiki/Projects-and-companies-using-noVNC) | ||
[the Projects and companies wiki page](https://github.com/novnc/noVNC/wiki/Projects-and-companies-using-noVNC) | ||
for a more complete list with additional info and links. | ||
### Table of Contents | ||
### Table of contents | ||
@@ -26,7 +26,7 @@ - [News/help/contact](#newshelpcontact) | ||
- [Screenshots](#screenshots) | ||
- [Browser Requirements](#browser-requirements) | ||
- [Server Requirements](#server-requirements) | ||
- [Quick Start](#quick-start) | ||
- [Installation from Snap Package](#installation-from-snap-package) | ||
- [Integration and Deployment](#integration-and-deployment) | ||
- [Browser requirements](#browser-requirements) | ||
- [Server requirements](#server-requirements) | ||
- [Quick start](#quick-start) | ||
- [Installation from snap package](#installation-from-snap-package) | ||
- [Integration and deployment](#integration-and-deployment) | ||
- [Authors/Contributors](#authorscontributors) | ||
@@ -71,3 +71,3 @@ | ||
* Supported VNC encodings: raw, copyrect, rre, hextile, tight, tightPNG, | ||
ZRLE, JPEG | ||
ZRLE, JPEG, Zlib | ||
* Supports scaling, clipping and resizing the desktop | ||
@@ -92,3 +92,3 @@ * Local cursor rendering | ||
### Browser Requirements | ||
### Browser requirements | ||
@@ -99,6 +99,6 @@ noVNC uses many modern web technologies so a formal requirement list is | ||
* Chrome 64, Firefox 79, Safari 13.4, Opera 51, Edge 79 | ||
* Chrome 89, Firefox 89, Safari 15, Opera 75, Edge 89 | ||
### Server Requirements | ||
### Server requirements | ||
@@ -115,3 +115,3 @@ noVNC follows the standard VNC protocol, but unlike other VNC clients it does | ||
### Quick Start | ||
### Quick start | ||
@@ -133,19 +133,19 @@ * Use the `novnc_proxy` script to automatically download and start websockify, which | ||
### Installation from Snap Package | ||
Running the command below will install the latest release of noVNC from Snap: | ||
### Installation from snap package | ||
Running the command below will install the latest release of noVNC from snap: | ||
`sudo snap install novnc` | ||
#### Running noVNC from Snap Directly | ||
#### Running noVNC from snap directly | ||
You can run the Snap-package installed novnc directly with, for example: | ||
You can run the snap package installed novnc directly with, for example: | ||
`novnc --listen 6081 --vnc localhost:5901 # /snap/bin/novnc if /snap/bin is not in your PATH` | ||
If you want to use certificate files, due to standard Snap confinement restrictions you need to have them in the /home/\<user\>/snap/novnc/current/ directory. If your username is jsmith an example command would be: | ||
If you want to use certificate files, due to standard snap confinement restrictions you need to have them in the /home/\<user\>/snap/novnc/current/ directory. If your username is jsmith an example command would be: | ||
`novnc --listen 8443 --cert ~jsmith/snap/novnc/current/self.crt --key ~jsmith/snap/novnc/current/self.key --vnc ubuntu.example.com:5901` | ||
#### Running noVNC from Snap as a Service (Daemon) | ||
The Snap package also has the capability to run a 'novnc' service which can be | ||
#### Running noVNC from snap as a service (daemon) | ||
The snap package also has the capability to run a 'novnc' service which can be | ||
configured to listen on multiple ports connecting to multiple VNC servers | ||
@@ -182,3 +182,3 @@ (effectively a service runing multiple instances of novnc). | ||
Disable a service (note that because of a limitation in Snap it's currently not | ||
Disable a service (note that because of a limitation in snap it's currently not | ||
possible to unset config variables, setting them to blank values is the way | ||
@@ -200,3 +200,3 @@ to disable a service): | ||
### Integration and Deployment | ||
### Integration and deployment | ||
@@ -224,4 +224,4 @@ Please see our other documents for how to integrate noVNC in your own software, | ||
* Notable contributions: | ||
* UI and Icons : Pierre Ossman, Chris Gordon | ||
* Original Logo : Michael Sersen | ||
* UI and icons : Pierre Ossman, Chris Gordon | ||
* Original logo : Michael Sersen | ||
* tight encoding : Michael Tinglof (Mercuri.ca) | ||
@@ -228,0 +228,0 @@ * RealVNC RSA AES authentication : USTC Vlab Team |
Sorry, the diff of this file is too big to display
771989
23
64
18072