This commit is contained in:
Hongliang Wang 2014-08-29 22:12:11 +00:00
commit f76417a34d
2 changed files with 64 additions and 23 deletions

View File

@ -919,7 +919,7 @@ init_msg = function() {
/* Connection name/title */
name_length = ws.rQshift32();
fb_name = Util.decodeUTF8(ws.rQshiftStr(name_length));
fb_name = Util.decodeUTF8(ws.rQshiftUTFStr(name_length));
conf.onDesktopName(that, fb_name);
if (conf.true_color && fb_name === "Intel(r) AMT KVM")

View File

@ -121,6 +121,46 @@ function rQshiftStr(len) {
rQi += len;
return String.fromCharCode.apply(null, arr);
}
function rQshiftUTFStr(len) {
if (typeof(len) === 'undefined') { len = rQlen(); }
var arr = [];
for(var i = rQi; i < rQi + len; i++) {
var code = rQ[i];
// 1-byte
if(code <= 0x7f) {
arr.push(code);
continue;
}
// 2-byte
if(code <= 0xdf) {
var sec = rQ[++i];
code = ((code & 0x1c) << 6) | (sec & 0x3f);
arr.push(code);
continue;
}
// 3-byte
if(code <= 0xef) {
var sec = rQ[++i];
var thi = rQ[++i];
code = ((((code & 0xf) << 4) | ((sec & 0x3c) >> 2)) << 8) | (((sec & 0x3) << 6) | (thi & 0x3f));
arr.push(code);
continue;
}
// 4-byte
if(code <= 0xf7) {
var sec = rQ[++i];
var thi = rQ[++i];
var fou = rQ[++i];
var z = ((code & 0x7) << 2) | ((sec & 0x30) >> 4);
var y = ((sec & 0xf) << 4) | ((thi & 0x3c) >> 2);
var x = ((thi & 0x3) << 6) | (fou & 0x3f);
code = (z << 16) | (y << 8) | x;
arr.push(code);
}
}
rQi += len;
return String.fromCharCode.apply(null, arr);
}
function rQshiftBytes(len) {
if (typeof(len) === 'undefined') { len = rQlen(); }
rQi += len;
@ -402,6 +442,7 @@ function constructor() {
api.rQshift16 = rQshift16;
api.rQshift32 = rQshift32;
api.rQshiftStr = rQshiftStr;
api.rQshiftUTFStr = rQshiftUTFStr;
api.rQshiftBytes = rQshiftBytes;
api.rQslice = rQslice;
api.rQwait = rQwait;