diff --git a/include/vnc.js b/include/vnc.js index dd26443f1fc9334398594685b45509e1ce5416c5..d4b651ada81d678339d79194703e6387a8ac2f15 100644 --- a/include/vnc.js +++ b/include/vnc.js @@ -135,7 +135,6 @@ load: function () { WebSocket.__swfLocation = get_VNC_uri_prefix() + "web-socket-js/WebSocketMain.swf"; WebSocket.__initialize(); - RFB.use_seq = true; RFB.updateState('disconnected', 'Disconnected'); } } @@ -224,12 +223,9 @@ clipboardPasteFrom: function (text) { ws : null, // Web Socket object sendID : null, scanID : null, // TIGHT_PNG render image scanner -use_seq : false, // Receive and send queues RQ : [], // Receive Queue -RQ_reorder : [], // Receive Queue re-order list -RQ_seq_num : 0, // Expected sequence number SQ : "", // Send Queue encHandlers : {}, @@ -1161,13 +1157,8 @@ recv_message: function(e) { //console.log(">> recv_message"); try { - if (RFB.use_seq) { - RFB.recv_message_reorder(e); - } else { - RFB.decode_message(e.data, 0); - - RFB.handle_message(); - } + RFB.decode_message(e.data, 0); + RFB.handle_message(); } catch (exc) { if (typeof exc.stack !== 'undefined') { console.log("recv_message, caught exception: " + exc.stack); @@ -1185,50 +1176,6 @@ recv_message: function(e) { //console.log("<< recv_message"); }, -recv_message_reorder: function(e) { - //console.log(">> recv_message_reorder"); - - var offset, seq_num, i; - - offset = e.data.indexOf(":") + 1; - seq_num = parseInt(e.data.substr(0, offset-1), 10); - if (RFB.RQ_seq_num === seq_num) { - RFB.decode_message(e.data, offset); - RFB.RQ_seq_num += 1; - } else { - console.warn("sequence number mismatch: expected " + - RFB.RQ_seq_num + ", got " + seq_num); - if (RFB.RQ_reorder.length > 40) { - RFB.updateState('failed', "Re-order queue too long"); - } else { - RFB.RQ_reorder = RFB.RQ_reorder.concat(e.data.substr(0)); - i = 0; - while (i < RFB.RQ_reorder.length) { - offset = RFB.RQ_reorder[i].indexOf(":") + 1; - seq_num = parseInt(RFB.RQ_reorder[i].substr(0, offset-1), 10); - //console.log("Searching reorder list item " + - // i + ", seq_num " + seq_num); - if (seq_num === RFB.RQ_seq_num) { - /* Remove it from reorder queue, decode it and - * add it to the receive queue */ - console.log("Found re-ordered packet seq_num " + seq_num); - RFB.decode_message(RFB.RQ_reorder.splice(i, 1)[0], offset); - RFB.RQ_seq_num += 1; - i = 0; // Start search again for next one - } else { - i += 1; - } - } - - } - } - - if (RFB.RQ.length > 0) { - RFB.handle_message(); - } - //console.log("<< recv_message_reorder"); -}, - handle_message: function () { //console.log("RQ.slice(0,20): " + RFB.RQ.slice(0,20) + " (" + RFB.RQ.length + ")"); switch (RFB.state) { @@ -1443,9 +1390,6 @@ init_ws: function () { if (RFB.b64encode) { vars.push("b64encode"); } - if (RFB.use_seq) { - vars.push("seq_num"); - } if (vars.length > 0) { uri += "?" + vars.join("&"); } @@ -1499,8 +1443,6 @@ init_vars: function () { RFB.cuttext = 'none'; RFB.ct_length = 0; RFB.RQ = []; - RFB.RQ_reorder = []; - RFB.RQ_seq_num = 0; RFB.SQ = ""; RFB.FBU.rects = 0; RFB.FBU.subrects = 0; // RRE and HEXTILE diff --git a/utils/websocket.c b/utils/websocket.c index b0205bdc6c07a8fe48122ae298f58080ace8c9ec..78736f2ec1379b8e93937a16dc528064db3a9b22 100644 --- a/utils/websocket.c +++ b/utils/websocket.c @@ -187,10 +187,6 @@ int encode(u_char const *src, size_t srclength, char *target, size_t targsize) { int i, sz = 0, len = 0; unsigned char chr; target[sz++] = '\x00'; - if (client_settings.do_seq_num) { - sz += sprintf(target+sz, "%d:", client_settings.seq_num); - client_settings.seq_num++; - } if (client_settings.do_b64encode) { len = __b64_ntop(src, srclength, target+sz, targsize-sz); if (len < 0) { @@ -383,8 +379,6 @@ ws_ctx_t *do_handshake(int sock) { // Reset settings client_settings.do_b64encode = 0; - client_settings.do_seq_num = 0; - client_settings.seq_num = 0; // Peek, but don't read the data len = recv(sock, handshake, 1024, MSG_PEEK); @@ -449,11 +443,6 @@ ws_ctx_t *do_handshake(int sock) { printf(" b64encode=1\n"); client_settings.do_b64encode = 1; } - arg_idx = strstr(args_start, "seq_num"); - if (arg_idx && arg_idx < args_end) { - printf(" seq_num=1\n"); - client_settings.do_seq_num = 1; - } } sprintf(response, server_handshake, pre, headers.origin, pre, scheme, @@ -569,7 +558,7 @@ void start_server() { /* Calculate dbufsize based on client_settings */ if (client_settings.do_b64encode) { /* base64 is 4 bytes for every 3 - * 20 for WS '\x00' / '\xff', seq_num and good measure */ + * 20 for WS '\x00' / '\xff' and good measure */ dbufsize = (bufsize * 3)/4 - 20; } else { /* UTF-8 encoding is up to 2X larger */ diff --git a/utils/websocket.h b/utils/websocket.h index 488ab513cabbdb31b42b2a12b02510fa2d4d36bd..346310b847f34d72ac90c349c090473f86966334 100644 --- a/utils/websocket.h +++ b/utils/websocket.h @@ -18,8 +18,6 @@ typedef struct { typedef struct { int do_b64encode; - int do_seq_num; - int seq_num; } client_settings_t; typedef struct { diff --git a/utils/websocket.py b/utils/websocket.py index fda696f9b01845479b2811717435a1aa2689fe2d..7662480098de11328b4b1b77acd10be81e286a52 100755 --- a/utils/websocket.py +++ b/utils/websocket.py @@ -23,10 +23,7 @@ settings = { 'daemon' : True, 'record' : None, } client_settings = { - 'b64encode' : False, - 'seq_num' : False, } - -send_seq = 0 + 'b64encode' : False, } server_handshake = """HTTP/1.1 101 Web Socket Protocol Handshake\r Upgrade: WebSocket\r @@ -44,18 +41,13 @@ def traffic(token="."): sys.stdout.flush() def encode(buf): - global send_seq if client_settings['b64encode']: buf = b64encode(buf) else: # Modified UTF-8 encode buf = buf.decode('latin-1').encode('utf-8').replace("\x00", "\xc4\x80") - if client_settings['seq_num']: - send_seq += 1 - return "\x00%d:%s\xff" % (send_seq-1, buf) - else: - return "\x00%s\xff" % buf + return "\x00%s\xff" % buf def decode(buf): """ Parse out WebSocket packets. """ @@ -100,11 +92,9 @@ def gen_md5(keys): def do_handshake(sock): - global client_settings, send_seq + global client_settings client_settings['b64encode'] = False - client_settings['seq_num'] = False - send_seq = 0 # Peek, but don't read the data handshake = sock.recv(1024, socket.MSG_PEEK) @@ -143,7 +133,7 @@ def do_handshake(sock): cvars = h['path'].partition('?')[2].partition('#')[0].split('&') for cvar in [c for c in cvars if c]: name, _, val = cvar.partition('=') - if name not in ['b64encode', 'seq_num']: continue + if name not in ['b64encode']: continue value = val and val or True client_settings[name] = value print " %s=%s" % (name, value)