From 3c4a04ea02282aacec97fb08516a79cf5af7452a Mon Sep 17 00:00:00 2001 From: einaros Date: Tue, 20 Sep 2011 17:56:32 +0200 Subject: [PATCH 1/6] fixes #523. private 'payload' method in transport used from manager.js, wasn't present in hybi parser --- lib/transports/websocket/hybi-07-12.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/transports/websocket/hybi-07-12.js b/lib/transports/websocket/hybi-07-12.js index 8760a9e63e..c2a46f6a61 100644 --- a/lib/transports/websocket/hybi-07-12.js +++ b/lib/transports/websocket/hybi-07-12.js @@ -132,6 +132,20 @@ WebSocket.prototype.write = function (data) { } }; +/** + * Writes a payload. + * + * @api private + */ + +WebSocket.prototype.payload = function (msgs) { + for (var i = 0, l = msgs.length; i < l; i++) { + this.write(msgs[i]); + } + + return this; +}; + /** * Frame server-to-client output as a text packet. * From 1874fd7c30a9053f3aa6ca58a2f4428324e64a2e Mon Sep 17 00:00:00 2001 From: einaros Date: Tue, 20 Sep 2011 18:40:43 +0200 Subject: [PATCH 2/6] added transport option to websocket test client (for flashsocket testing) --- test/common.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/common.js b/test/common.js index e658f72693..5ee75fa2b9 100644 --- a/test/common.js +++ b/test/common.js @@ -191,14 +191,14 @@ create = function (cl) { * @api private */ -function WSClient (port, sid) { +function WSClient (port, sid, transport) { this.sid = sid; this.port = port; - + this.transportName = transport || 'websocket'; WebSocket.call( this , 'ws://localhost:' + port + '/socket.io/' - + io.protocol + '/websocket/' + sid + + io.protocol + '/' + this.transportName + '/' + sid ); }; @@ -239,6 +239,6 @@ WSClient.prototype.packet = function (pack) { * @api public */ -websocket = function (cl, sid) { - return new WSClient(cl.port, sid); +websocket = function (cl, sid, transport) { + return new WSClient(cl.port, sid, transport); }; From d02a7f415b2d899df15a248f8d6784626aa51d7c Mon Sep 17 00:00:00 2001 From: einaros Date: Tue, 20 Sep 2011 18:41:06 +0200 Subject: [PATCH 3/6] added test for flashsocket name, to catch issues with various websocket versions --- test/transports.flashsocket.test.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/transports.flashsocket.test.js b/test/transports.flashsocket.test.js index 7ba79d3382..4896608615 100644 --- a/test/transports.flashsocket.test.js +++ b/test/transports.flashsocket.test.js @@ -163,6 +163,19 @@ module.exports = { io.flashPolicyServer.close(); done(); - } + }, + 'flashsocket identifies as flashsocket': function (done) { + var cl = client(++ports) + , io = create(cl) + , messages = 0 + , ws; + io.set('transports', ['flashsocket']); + io.sockets.on('connection', function (socket) { + socket.manager.transports[socket.id].name.should.equal('flashsocket'); + }); + cl.handshake(function (sid) { + ws = websocket(cl, sid, 'flashsocket'); + }); + } }; From 3364a73a97356d09a00c9a6794191319edeacc69 Mon Sep 17 00:00:00 2001 From: einaros Date: Tue, 20 Sep 2011 18:45:01 +0200 Subject: [PATCH 4/6] added done() call to end test --- test/transports.flashsocket.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/transports.flashsocket.test.js b/test/transports.flashsocket.test.js index 4896608615..dc08b17ec8 100644 --- a/test/transports.flashsocket.test.js +++ b/test/transports.flashsocket.test.js @@ -173,6 +173,7 @@ module.exports = { io.set('transports', ['flashsocket']); io.sockets.on('connection', function (socket) { socket.manager.transports[socket.id].name.should.equal('flashsocket'); + done(); }); cl.handshake(function (sid) { ws = websocket(cl, sid, 'flashsocket'); From ab9a5a1578420c50c0ad3987d600e330389b74b1 Mon Sep 17 00:00:00 2001 From: einaros Date: Tue, 20 Sep 2011 18:51:36 +0200 Subject: [PATCH 5/6] added test to ensure that websocket still identifies as .. websocket --- test/transports.websocket.test.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/transports.websocket.test.js b/test/transports.websocket.test.js index 4b9ff6150f..f47e3b1750 100644 --- a/test/transports.websocket.test.js +++ b/test/transports.websocket.test.js @@ -19,6 +19,20 @@ var sio = require('socket.io') */ module.exports = { + 'websocket identifies as websocket': function (done) { + var cl = client(++ports) + , io = create(cl) + , messages = 0 + , ws; + io.set('transports', ['websocket']); + io.sockets.on('connection', function (socket) { + socket.manager.transports[socket.id].name.should.equal('websocket'); + done(); + }); + cl.handshake(function (sid) { + ws = websocket(cl, sid); + }); + }, 'test that not responding to a heartbeat drops client': function (done) { var cl = client(++ports) From f9ea04eb6ba65e5b2c32976b6f59ce0b70ea6744 Mon Sep 17 00:00:00 2001 From: einaros Date: Tue, 20 Sep 2011 18:53:04 +0200 Subject: [PATCH 6/6] redirect actual transport name (such as flashsocket), if present, to the websocket version being loaded --- lib/transports/websocket.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/transports/websocket.js b/lib/transports/websocket.js index 84db53119e..78a43043d5 100644 --- a/lib/transports/websocket.js +++ b/lib/transports/websocket.js @@ -25,9 +25,12 @@ exports = module.exports = WebSocket; */ function WebSocket (mng, data, req) { - var version = req.headers['sec-websocket-version']; + var transport + , version = req.headers['sec-websocket-version']; if (typeof version !== 'undefined' && typeof protocolVersions[version] !== 'undefined') { - return new protocolVersions[version](mng, data, req); + transport = new protocolVersions[version](mng, data, req); } - return new protocolVersions['default'](mng, data, req); + else transport = new protocolVersions['default'](mng, data, req); + if (typeof this.name !== 'undefined') transport.name = this.name; + return transport; };