WIP: Switch to Pako for zlib
This commit introduces an alternate implementation of the zlib decompressor based on Pako (https://github.com/nodeca/pako).
This commit is contained in:
parent
09d2eb4671
commit
f10eccca40
@ -59,6 +59,9 @@ licenses (all MPL 2.0 compatible):
|
||||
|
||||
utils/websockify
|
||||
utils/websocket.py : LGPL 3
|
||||
|
||||
utils/inflator.partial.js
|
||||
include/inflator.js : MIT (for pako)
|
||||
|
||||
The following license texts are included:
|
||||
|
||||
@ -70,6 +73,7 @@ The following license texts are included:
|
||||
docs/LICENSE.BSD-2-Clause (Simplified BSD / FreeBSD)
|
||||
docs/LICENSE.zlib
|
||||
docs/LICENSE.Apache-2.0
|
||||
docs/LICENSE.pako
|
||||
|
||||
Or alternatively the license texts may be found here:
|
||||
|
||||
|
@ -133,6 +133,5 @@ use a WebSockets to TCP socket proxy. There is a python proxy included
|
||||
* web-socket-js : Hiroshi Ichikawa (github.com/gimite/web-socket-js)
|
||||
* as3crypto : Henri Torgemane (code.google.com/p/as3crypto)
|
||||
* base64 : Martijn Pieters (Digital Creations 2), Samuel Sieb (sieb.net)
|
||||
* jsunzip : Erik Moller (github.com/operasoftware/jsunzip),
|
||||
* tinflate : Joergen Ibsen (ibsensoftware.com)
|
||||
* DES : Dave Zimmerman (Widget Workshop), Jef Poskanzer (ACME Labs)
|
||||
* Pako : Vitaly Puzrin (https://github.com/nodeca/pako)
|
||||
|
21
docs/LICENSE.pako
Normal file
21
docs/LICENSE.pako
Normal file
@ -0,0 +1,21 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (C) 2014 by Vitaly Puzrin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
@ -15,3 +15,9 @@ Building web-socket-js emulator:
|
||||
|
||||
cd include/web-socket-js/flash-src
|
||||
mxmlc -static-link-runtime-shared-libraries WebSocketMain.as
|
||||
|
||||
Rebuilding inflator.js
|
||||
|
||||
- Download pako from npm
|
||||
- Install browserify using npm
|
||||
- browserify utils/inflator.partial.js -o include/inflator.js
|
||||
|
2409
include/inflator.js
Normal file
2409
include/inflator.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -380,8 +380,9 @@ var RFB;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
this._FBU.zlibs[i] = new TINF();
|
||||
this._FBU.zlibs[i].init();
|
||||
//this._FBU.zlibs[i] = new TINF();
|
||||
//this._FBU.zlibs[i].init();
|
||||
this._FBU.zlibs[i] = new inflator.Inflate();
|
||||
}
|
||||
},
|
||||
|
||||
@ -1181,7 +1182,14 @@ var RFB;
|
||||
|
||||
this._timing.last_fbu = (new Date()).getTime();
|
||||
|
||||
ret = this._encHandlers[this._FBU.encoding]();
|
||||
var handler = this._encHandlers[this._FBU.encoding];
|
||||
try {
|
||||
//ret = this._encHandlers[this._FBU.encoding]();
|
||||
ret = handler();
|
||||
} catch (ex) {
|
||||
console.log("missed " + this._FBU.encoding + ": " + handler);
|
||||
ret = this._encHandlers[this._FBU.encoding]();
|
||||
}
|
||||
|
||||
now = (new Date()).getTime();
|
||||
this._timing.cur_fbu += (now - this._timing.last_fbu);
|
||||
@ -1639,12 +1647,14 @@ var RFB;
|
||||
}
|
||||
}
|
||||
|
||||
var uncompressed = this._FBU.zlibs[streamId].uncompress(data, 0);
|
||||
if (uncompressed.status !== 0) {
|
||||
//var uncompressed = this._FBU.zlibs[streamId].uncompress(data, 0);
|
||||
var uncompressed = this._FBU.zlibs[streamId].inflate(data, true);
|
||||
/*if (uncompressed.status !== 0) {
|
||||
Util.Error("Invalid data in zlib stream");
|
||||
}
|
||||
}*/
|
||||
|
||||
return uncompressed.data;
|
||||
//return uncompressed.data;
|
||||
return uncompressed;
|
||||
}.bind(this);
|
||||
|
||||
var indexedToRGB = function (data, numColors, palette, width, height) {
|
||||
|
@ -21,7 +21,7 @@ var UI;
|
||||
window.onscriptsload = function () { UI.load(); };
|
||||
Util.load_scripts(["webutil.js", "base64.js", "websock.js", "des.js",
|
||||
"keysymdef.js", "keyboard.js", "input.js", "display.js",
|
||||
"jsunzip.js", "rfb.js", "keysym.js"]);
|
||||
"rfb.js", "keysym.js", "inflator.js"]);
|
||||
|
||||
UI = {
|
||||
|
||||
|
@ -119,9 +119,9 @@ module.exports = function(config) {
|
||||
'include/input.js',
|
||||
'include/websock.js',
|
||||
'include/rfb.js',
|
||||
'include/jsunzip.js',
|
||||
'include/des.js',
|
||||
'include/display.js',
|
||||
'include/inflator.js',
|
||||
'tests/test.*.js'
|
||||
],
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// requires local modules: util, base64, websock, rfb, keyboard, keysym, keysymdef, input, jsunzip, des, display
|
||||
// requires local modules: util, base64, websock, rfb, keyboard, keysym, keysymdef, input, inflator, des, display
|
||||
// requires test modules: fake.websocket, assertions
|
||||
/* jshint expr: true */
|
||||
var assert = chai.assert;
|
||||
|
@ -61,7 +61,7 @@
|
||||
// Load supporting scripts
|
||||
Util.load_scripts(["base64.js", "websock.js", "des.js", "keysym.js",
|
||||
"keysymdef.js", "keyboard.js", "input.js", "display.js",
|
||||
"jsunzip.js", "rfb.js", "playback.js", fname]);
|
||||
"rfb.js", "playback.js", "inflator.js", fname]);
|
||||
|
||||
} else {
|
||||
message("Must specify data=FOO in query string.");
|
||||
|
32
utils/inflator.partial.js
Normal file
32
utils/inflator.partial.js
Normal file
@ -0,0 +1,32 @@
|
||||
var zlib = require('./lib/zlib/inflate.js');
|
||||
var ZStream = require('./lib/zlib/zstream.js');
|
||||
|
||||
var Inflate = function () {
|
||||
this.strm = new ZStream();
|
||||
this.chunkSize = 1024 * 10 * 10;
|
||||
this.strm.output = new Uint8Array(this.chunkSize);
|
||||
this.windowBits = 5;
|
||||
|
||||
zlib.inflateInit(this.strm, this.windowBits);
|
||||
};
|
||||
|
||||
Inflate.prototype = {
|
||||
inflate: function (data, flush) {
|
||||
this.strm.input = data;
|
||||
this.strm.avail_in = this.strm.input.length;
|
||||
this.strm.next_in = 0;
|
||||
this.strm.next_out = 0;
|
||||
|
||||
this.strm.avail_out = this.chunkSize;
|
||||
|
||||
zlib.inflate(this.strm, flush);
|
||||
|
||||
return new Uint8Array(this.strm.output.buffer, 0, this.strm.next_out);
|
||||
},
|
||||
|
||||
reset: function () {
|
||||
zlib.inflateReset(this.strm);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {Inflate: Inflate};
|
@ -77,7 +77,7 @@
|
||||
// Load supporting scripts
|
||||
Util.load_scripts(["webutil.js", "base64.js", "websock.js", "des.js",
|
||||
"keysymdef.js", "keyboard.js", "input.js", "display.js",
|
||||
"jsunzip.js", "rfb.js", "keysym.js"]);
|
||||
"inflator.js", "rfb.js", "keysym.js"]);
|
||||
|
||||
var rfb;
|
||||
var resizeTimeout;
|
||||
|
Loading…
x
Reference in New Issue
Block a user