From 757337fac55a01e06498ffd76dcc897be265c8f6 Mon Sep 17 00:00:00 2001 From: Guillermo Rauch Date: Mon, 2 Aug 2010 09:50:28 -0700 Subject: [PATCH] Cleanly closing connection if data is incorrectly framed Reorganized tests --- lib/socket.io/transports/websocket.js | 2 +- tests/io.test.js | 51 +++++---------------------- tests/transports.websocket.js | 35 ++++++++++++++++++ 3 files changed, 44 insertions(+), 44 deletions(-) create mode 100644 tests/transports.websocket.js diff --git a/lib/socket.io/transports/websocket.js b/lib/socket.io/transports/websocket.js index 4868a5cc..a5d0d778 100644 --- a/lib/socket.io/transports/websocket.js +++ b/lib/socket.io/transports/websocket.js @@ -79,7 +79,7 @@ WebSocket.prototype._handle = function(data){ chunk = chunks[i]; if (chunk[0] !== '\u0000'){ this.listener.options.log('Data incorrectly framed by UA. Dropping connection'); - this.connection.destroy(); + this.connection.end(); return false; } this._onMessage(chunk.slice(1)); diff --git a/tests/io.test.js b/tests/io.test.js index 227a13b8..af8362c3 100644 --- a/tests/io.test.js +++ b/tests/io.test.js @@ -1,52 +1,17 @@ var io = require('./../'), Listener = io.Listener, + port = 8080; Client = require('./../lib/socket.io/client'), WebSocket = require('./support/node-websocket-client/lib/websocket').WebSocket, - empty = new Function, - port = 8080, - -create = function(fn){ - var server = require('http').createServer(empty), client; - server.listen(port, function(){ - client = new WebSocket('ws://localhost:'+ port++ +'/socket.io/websocket', 'borf'); - }); - return {server: server, client: client, close: function(){ - client.close(); - server.close(); - }}; -}; module.exports = { - 'test server initialization': function(assert){ - var http = create(), - sio = io.listen(http.server); - assert.ok(sio instanceof Listener); - http.close(); - }, - 'test connection and handshake': function(assert){ - var server = require('http').createServer(empty), - sio = io.listen(server), - client, - clientCount = 0, - - close = function(){ - client.close(); - server.close(); - assert.ok(clientCount, 1); - }; - - server.listen(port, function(){ - client = new WebSocket('ws://localhost:'+ port++ +'/socket.io/websocket', 'borf'); - client.onmessage = function(){ - console.log('test'); - }; - }); - - sio.on('connection', function(client){ - console.log('test'); - clientCount++; - assert.ok(client instanceof Client); - }); + 'test server initialization': function(assert){ + var server = require('http').createServer(function(){}), sio; + server.listen(8080); + sio = io.listen(server); + assert.ok(sio instanceof Listener); + server.close(); } + }; \ No newline at end of file diff --git a/tests/transports.websocket.js b/tests/transports.websocket.js new file mode 100644 index 00000000..b710999d --- /dev/null +++ b/tests/transports.websocket.js @@ -0,0 +1,35 @@ +var io = require('./../'), + Listener = io.Listener, + Client = require('./../lib/socket.io/client'), + WebSocket = require('./support/node-websocket-client/lib/websocket').WebSocket; + +module.exports = { + + 'test connection and handshake': function(assert){ + var server = require('http').createServer(function(){}), sio, client, clientCount, close; + server.listen(8081); + + sio = io.listen(server); + client; + clientCount = 0; + close = function(){ + client.close(); + server.close(); + assert.ok(clientCount, 1); + }; + + server.listen(port, function(){ + client = new WebSocket('ws://localhost:8081/socket.io/websocket', 'borf'); + client.onmessage = function(){ + console.log('test'); + }; + }); + + sio.on('connection', function(client){ + console.log('test'); + clientCount++; + assert.ok(client instanceof Client); + }); + } + +}; \ No newline at end of file