diff --git a/lib/manager.js b/lib/manager.js index 8d637fb21d..825d800304 100644 --- a/lib/manager.js +++ b/lib/manager.js @@ -93,11 +93,6 @@ function Manager (server, options) { var self = this; - // default error handler - server.on('error', function(err) { - self.log.warn('error raised: ' + err); - }); - this.initStore(); this.on('set:store', function() { @@ -267,6 +262,7 @@ Manager.prototype.initStore = function () { this.connected = {}; this.open = {}; this.closed = {}; + this.closedA = []; this.rooms = {}; this.roomClients = {}; @@ -338,6 +334,8 @@ Manager.prototype.onOpen = function (id) { if (this.closed[id]) { var self = this; + this.closedA.splice(this.closedA.indexOf(id), 1); + this.store.unsubscribe('dispatch:' + id, function () { delete self.closed[id]; }); @@ -426,6 +424,7 @@ Manager.prototype.onClose = function (id) { } this.closed[id] = []; + this.closedA.push(id); var self = this; @@ -468,7 +467,9 @@ Manager.prototype.onClientMessage = function (id, packet) { Manager.prototype.onClientDisconnect = function (id, reason) { for (var name in this.namespaces) { - this.namespaces[name].handleDisconnect(id, reason, typeof this.roomClients[id][name] !== 'undefined'); + if (this.roomClients[id][name]) { + this.namespaces[name].handleDisconnect(id, reason); + } } this.onDisconnect(id); @@ -498,6 +499,7 @@ Manager.prototype.onDisconnect = function (id, local) { if (this.closed[id]) { delete this.closed[id]; + this.closedA.splice(this.closedA.indexOf(id), 1); } if (this.roomClients[id]) { @@ -813,10 +815,14 @@ Manager.prototype.verifyOrigin = function (request) { if (origin) { try { var parts = url.parse(origin); + if(!parts.port) + { + parts.port = 80; + } var ok = - ~origins.indexOf(parts.hostname + ':' + parts.port) || - ~origins.indexOf(parts.hostname + ':*') || - ~origins.indexOf('*:' + parts.port); + ~origins.indexOf(parts.hostname + ':' + parts.port) || + ~origins.indexOf(parts.hostname + ':*') || + ~origins.indexOf('*:' + parts.port); if (!ok) this.log.warn('illegal origin: ' + origin); return ok; } catch (ex) { @@ -958,4 +964,4 @@ Manager.prototype.garbageCollection = function () { this.onDisconnect(ids[i]); } } -}; +}; \ No newline at end of file diff --git a/lib/transports/websocket/hybi-07-12.js b/lib/transports/websocket/hybi-07-12.js index ade99dc8b5..c3ad13d703 100644 --- a/lib/transports/websocket/hybi-07-12.js +++ b/lib/transports/websocket/hybi-07-12.js @@ -1,4 +1,3 @@ - /*! * socket.io-node * Copyright(c) 2011 LearnBoost @@ -159,7 +158,11 @@ WebSocket.prototype.verifyOrigin = function (origin) { if (origin) { try { var parts = url.parse(origin); - var ok = + if(!parts.port) + { + parts.port = 80; + } + var ok = ~origins.indexOf(parts.hostname + ':' + parts.port) || ~origins.indexOf(parts.hostname + ':*') || ~origins.indexOf('*:' + parts.port); diff --git a/lib/transports/websocket/hybi-16.js b/lib/transports/websocket/hybi-16.js index 03b01839a3..c3b175bdfa 100644 --- a/lib/transports/websocket/hybi-16.js +++ b/lib/transports/websocket/hybi-16.js @@ -1,4 +1,3 @@ - /*! * socket.io-node * Copyright(c) 2011 LearnBoost @@ -159,7 +158,11 @@ WebSocket.prototype.verifyOrigin = function (origin) { if (origin) { try { var parts = url.parse(origin); - var ok = + if(!parts.port) + { + parts.port = 80; + } + var ok = ~origins.indexOf(parts.hostname + ':' + parts.port) || ~origins.indexOf(parts.hostname + ':*') || ~origins.indexOf('*:' + parts.port);