Fix some framing bugs. Cleanup console logs.

This commit is contained in:
Joel Martin 2010-04-14 11:28:29 -05:00
parent 484a4696aa
commit 410960bac8
1 changed files with 32 additions and 23 deletions

55
vnc.js
View File

@ -33,7 +33,6 @@ Array.prototype.shiftStr = function (len) {
return arr.map(function (num) { return arr.map(function (num) {
return String.fromCharCode(num); } ).join(''); return String.fromCharCode(num); } ).join('');
} }
Array.prototype.shiftBytes = function (len) { Array.prototype.shiftBytes = function (len) {
return this.splice(0, len); return this.splice(0, len);
} }
@ -95,7 +94,6 @@ rre_chunk : 100,
/* RFB/VNC initialisation */ /* RFB/VNC initialisation */
init_msg: function () { init_msg: function () {
console.log(">> init_msg: " + RFB.state); console.log(">> init_msg: " + RFB.state);
console.log("d:" + RFB.d);
switch (RFB.state) { switch (RFB.state) {
@ -273,8 +271,8 @@ display_hextile: function() {
//console.log(">> display_hextile, tiles: " + FBU.tiles + ", arr.length: " + RFB.d.length + ", bytes: " + FBU.bytes); //console.log(">> display_hextile, tiles: " + FBU.tiles + ", arr.length: " + RFB.d.length + ", bytes: " + FBU.bytes);
var subencoding, subrects, cur_tile, tile_x, x, w, tile_y, y, h; var subencoding, subrects, cur_tile, tile_x, x, w, tile_y, y, h;
/* FBU.bytes comes in as 0, RFB.d.length at least 2 */ /* FBU.bytes comes in as 0, RFB.d.length at least 1 */
while ((FBU.tiles > 0) && (RFB.d.length >= Math.max(2, FBU.bytes))) { while ((FBU.tiles > 0) && (RFB.d.length >= Math.max(1, FBU.bytes))) {
cur_tile = FBU.total_tiles - FBU.tiles; cur_tile = FBU.total_tiles - FBU.tiles;
tile_x = cur_tile % FBU.tiles_x; tile_x = cur_tile % FBU.tiles_x;
tile_y = Math.floor(cur_tile / FBU.tiles_x); tile_y = Math.floor(cur_tile / FBU.tiles_x);
@ -298,7 +296,7 @@ display_hextile: function() {
/* Figure out how much we are expecting */ /* Figure out how much we are expecting */
if (subencoding & 0x01) { // Raw if (subencoding & 0x01) { // Raw
//console.log(" Raw subencoding"); //console.log(" Raw subencoding");
FBU.bytes = w * h * RFB.fb_Bpp; FBU.bytes += w * h * RFB.fb_Bpp;
} else { } else {
if (subencoding & 0x02) { // Background if (subencoding & 0x02) { // Background
FBU.bytes += RFB.fb_Bpp; FBU.bytes += RFB.fb_Bpp;
@ -310,7 +308,7 @@ display_hextile: function() {
FBU.bytes++; // Since we aren't shifting it off FBU.bytes++; // Since we aren't shifting it off
if (RFB.d.length < FBU.bytes) { if (RFB.d.length < FBU.bytes) {
/* Wait for subrects byte */ /* Wait for subrects byte */
//console.log(" waiting for subrects byte"); console.log(" waiting for hextile subrects header bytes");
return; return;
} }
subrects = RFB.d[FBU.bytes-1]; // Peek subrects = RFB.d[FBU.bytes-1]; // Peek
@ -323,10 +321,10 @@ display_hextile: function() {
} }
} }
console.log(" tile:" + cur_tile + "/" + (FBU.total_tiles - 1) + ", subencoding:" + subencoding + "(last: " + FBU.lastsubencoding + "), subrects:" + subrects + ", tile:" + tile_x + "," + tile_y + " [" + x + "," + y + "], arr.length:" + RFB.d.length + ", bytes:" + FBU.bytes); //console.log(" tile:" + cur_tile + "/" + (FBU.total_tiles - 1) + ", subencoding:" + subencoding + "(last: " + FBU.lastsubencoding + "), subrects:" + subrects + ", tile:" + tile_x + "," + tile_y + " [" + x + "," + y + "]@" + w + "x" + h + ", arr.length:" + RFB.d.length + ", bytes:" + FBU.bytes);
//console.log(" arr[0..30]: " + RFB.d.slice(0,30)); //console.log(" arr[0..30]: " + RFB.d.slice(0,30));
if (RFB.d.length < FBU.bytes) { if (RFB.d.length < FBU.bytes) {
//console.log(" waiting for " + (FBU.bytes - RFB.d.length) + "bytes"); //console.log(" waiting for " + (FBU.bytes - RFB.d.length) + " hextile bytes");
return; return;
} }
@ -390,7 +388,7 @@ display_hextile: function() {
FBU.rects --; FBU.rects --;
} }
console.log("<< display_hextile, rects:" + FBU.rects, " d:" + RFB.d.slice(0,40)); //console.log("<< display_hextile, rects:" + FBU.rects, " d:" + RFB.d.slice(0,40));
}, },
@ -405,31 +403,41 @@ normal_msg: function () {
switch (msg_type) { switch (msg_type) {
case 0: // FramebufferUpdate case 0: // FramebufferUpdate
if (FBU.rects == 0) { if (FBU.rects == 0) {
if (RFB.d.length < 3) {
console.log(" waiting for FBU header bytes");
return;
}
RFB.d.shift8(); RFB.d.shift8();
FBU.rects = RFB.d.shift16(); FBU.rects = RFB.d.shift16();
console.log("FramebufferUpdate, " + FBU.rects + " rects"); //console.log("FramebufferUpdate, rects:" + FBU.rects);
FBU.bytes = 0; FBU.bytes = 0;
} else {
//console.log("FramebufferUpdate continuation");
} }
while ((FBU.rects > 0) && (RFB.d.length > 0)) { while ((FBU.rects > 0) && (RFB.d.length > 0)) {
if (FBU.bytes == 0) { if (FBU.bytes == 0) {
if (RFB.d.length < 12) {
console.log(" waiting for rect header bytes");
return;
}
/* New FramebufferUpdate */
FBU.x = RFB.d.shift16(); FBU.x = RFB.d.shift16();
FBU.y = RFB.d.shift16(); FBU.y = RFB.d.shift16();
FBU.width = RFB.d.shift16(); FBU.width = RFB.d.shift16();
FBU.height = RFB.d.shift16(); FBU.height = RFB.d.shift16();
FBU.encoding = parseInt(RFB.d.shift32(), 10); FBU.encoding = parseInt(RFB.d.shift32(), 10);
console.log("encoding: " + FBU.encoding); //var msg = "FramebufferUpdate rects:" + FBU.rects + " encoding:" + FBU.encoding
switch (FBU.encoding) { switch (FBU.encoding) {
case 0: // Raw case 0: // Raw
FBU.bytes = FBU.width * FBU.height * RFB.fb_Bpp; FBU.bytes = FBU.width * FBU.height * RFB.fb_Bpp;
//msg += "(RAW)"
break; break;
case 1: // Copy-Rect case 1: // Copy-Rect
FBU.bytes = 4; FBU.bytes = 4;
//msg += "(COPY-RECT)"
break; break;
case 2: // RRE case 2: // RRE
FBU.bytes = 4 + RFB.fb_Bpp; FBU.bytes = 4 + RFB.fb_Bpp;
//msg += "(RRE)"
break; break;
case 5: // hextile case 5: // hextile
FBU.bytes = 2; // No header; get it started FBU.bytes = 2; // No header; get it started
@ -437,17 +445,18 @@ normal_msg: function () {
FBU.tiles_y = Math.ceil(FBU.height/16); FBU.tiles_y = Math.ceil(FBU.height/16);
FBU.total_tiles = FBU.tiles_x * FBU.tiles_y; FBU.total_tiles = FBU.tiles_x * FBU.tiles_y;
FBU.tiles = FBU.total_tiles; FBU.tiles = FBU.total_tiles;
//msg += "(HEXTILE " + FBU.tiles + " tiles)"
break; break;
default: default:
console.log("Unsupported encoding " + FBU.encoding); console.log("Unsupported encoding " + FBU.encoding);
RFB.state = "failed"; RFB.state = "failed";
break; return;
} }
//msg += ", RFB.d.length: " + RFB.d.length + ", FBU.bytes: " + FBU.bytes
//console.log(msg);
} }
//console.log("RFB.d.length: " + RFB.d.length + ", FBU.bytes: " + FBU.bytes);
if (RFB.d.length >= FBU.bytes) { if (RFB.d.length >= FBU.bytes) {
//console.log('Done rect:');
FBU.bytes = 0; FBU.bytes = 0;
switch (FBU.encoding) { switch (FBU.encoding) {
@ -542,7 +551,7 @@ encodings: function () {
}, },
fbUpdateRequest: function (incremental, x, y, xw, yw) { fbUpdateRequest: function (incremental, x, y, xw, yw) {
console.log(">> fbUpdateRequest"); //console.log(">> fbUpdateRequest");
if (!x) x = 0; if (!x) x = 0;
if (!y) y = 0; if (!y) y = 0;
if (!xw) xw = RFB.fb_width; if (!xw) xw = RFB.fb_width;
@ -559,7 +568,7 @@ fbUpdateRequest: function (incremental, x, y, xw, yw) {
}, },
keyEvent: function (keysym, down) { keyEvent: function (keysym, down) {
console.log(">> keyEvent, keysym: " + keysym + ", down: " + down); //console.log(">> keyEvent, keysym: " + keysym + ", down: " + down);
var arr; var arr;
arr = [4]; // msg-type arr = [4]; // msg-type
arr.push8(down); arr.push8(down);
@ -571,13 +580,13 @@ keyEvent: function (keysym, down) {
}, },
pointerEvent: function (x, y) { pointerEvent: function (x, y) {
console.log(">> pointerEvent, x,y: " + x + "," + y + " , mask: " + Mouse.buttonMask); //console.log(">> pointerEvent, x,y: " + x + "," + y + " , mask: " + Mouse.buttonMask);
var arr; var arr;
arr = [5]; // msg-type arr = [5]; // msg-type
arr.push8(Mouse.buttonMask); arr.push8(Mouse.buttonMask);
arr.push16(x); arr.push16(x);
arr.push16(y); arr.push16(y);
console.log("<< pointerEvent"); //console.log("<< pointerEvent");
return arr; return arr;
}, },
@ -596,7 +605,7 @@ send_string: function (str) {
}, },
send_array: function (arr) { send_array: function (arr) {
console.log(">> send_array: " + arr); //console.log(">> send_array: " + arr);
//console.log(">> send_array: " + Base64.encode_array(arr)); //console.log(">> send_array: " + Base64.encode_array(arr));
RFB.ws.send(Base64.encode_array(arr)); RFB.ws.send(Base64.encode_array(arr));
}, },
@ -637,7 +646,7 @@ pusher: function () {
}, },
keyDown: function (e) { keyDown: function (e) {
//console.log(">> keyDown: " + e.key + "(" + e.code + ")"); console.log(">> keyDown: " + Canvas.getKeysym(e));
e.stop(); e.stop();
var arr = RFB.keyEvent(Canvas.getKeysym(e), 1); var arr = RFB.keyEvent(Canvas.getKeysym(e), 1);
arr = arr.concat(RFB.fbUpdateRequest(1)); arr = arr.concat(RFB.fbUpdateRequest(1));
@ -645,7 +654,7 @@ keyDown: function (e) {
}, },
keyUp: function (e) { keyUp: function (e) {
//console.log(">> keyUp: " + e.key + "(" + e.code + ")"); console.log(">> keyUp: " + Canvas.getKeysym(e));
e.stop(); e.stop();
var arr = RFB.keyEvent(Canvas.getKeysym(e), 0); var arr = RFB.keyEvent(Canvas.getKeysym(e), 0);
arr = arr.concat(RFB.fbUpdateRequest(1)); arr = arr.concat(RFB.fbUpdateRequest(1));