Comparing version
@@ -0,1 +1,6 @@ | ||
v0.4.3 - Feb 4th 2012 | ||
===================== | ||
* Prioritized update: Corrected issue which would cause sockets to stay open longer than necessary, and resource leakage because of this. [einaros] | ||
v0.4.2 - Feb 4th 2012 | ||
@@ -2,0 +7,0 @@ ===================== |
@@ -40,2 +40,3 @@ /*! | ||
} | ||
Object.defineProperty(this, '_socket', { writable: true, value: null }); | ||
@@ -55,16 +56,4 @@ Object.defineProperty(this, 'readyState', { | ||
if (Object.prototype.toString.call(address) == '[object Array]') { | ||
/** | ||
* Act as server client | ||
*/ | ||
initAsServerClient.apply(this, address.concat(options)); | ||
} | ||
else { | ||
/** | ||
* Act as regular client | ||
*/ | ||
initAsClient.apply(this, arguments); | ||
} | ||
if (Object.prototype.toString.call(address) == '[object Array]') initAsServerClient.apply(this, address.concat(options)); | ||
else initAsClient.apply(this, arguments); | ||
} | ||
@@ -336,4 +325,4 @@ | ||
// establish connection | ||
if (options.value.protocolVersion == 'hixie-76') establishHixieConnection.call(this, socket, upgradeHead); | ||
else establishHybiConnection.call(this, socket, upgradeHead); | ||
if (options.value.protocolVersion == 'hixie-76') establishConnection.call(this, ReceiverHixie, SenderHixie, socket, upgradeHead); | ||
else establishConnection.call(this, Receiver, Sender, socket, upgradeHead); | ||
} | ||
@@ -429,3 +418,3 @@ | ||
establishHybiConnection.call(self, socket, upgradeHead); | ||
establishConnection.call(self, Receiver, Sender, socket, upgradeHead); | ||
}); | ||
@@ -437,3 +426,3 @@ | ||
function establishHybiConnection(socket, upgradeHead) { | ||
function establishConnection(ReceiverClass, SenderClass, socket, upgradeHead) { | ||
this._socket = socket; | ||
@@ -446,2 +435,11 @@ socket.setTimeout(0); | ||
self._readyState = WebSocket.CLOSED; | ||
if (self._socket) { | ||
self._socket.removeAllListeners(); | ||
self._socket.end(); | ||
self._socket = null; | ||
} | ||
if (self._sender) { | ||
self._sender.removeAllListeners(); | ||
self._sender = null; | ||
} | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
@@ -452,69 +450,15 @@ }); | ||
self._readyState = WebSocket.CLOSED; | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
}); | ||
var receiver = new Receiver(); | ||
socket.on('data', function (data) { | ||
receiver.add(data); | ||
}); | ||
receiver.on('text', function (data, flags) { | ||
flags = flags || {}; | ||
self.emit('message', data, flags); | ||
}); | ||
receiver.on('binary', function (data, flags) { | ||
flags = flags || {}; | ||
flags.binary = true; | ||
self.emit('message', data, flags); | ||
}); | ||
receiver.on('ping', function(data, flags) { | ||
flags = flags || {}; | ||
self.pong(data, {mask: !self._isServer, binary: flags.binary === true}); | ||
self.emit('ping', data, flags); | ||
}); | ||
receiver.on('pong', function(data, flags) { | ||
self.emit('pong', data, flags); | ||
}); | ||
receiver.on('close', function(code, data, flags) { | ||
flags = flags || {}; | ||
self.close(code, data, {mask: !self._isServer}); | ||
}); | ||
receiver.on('error', function(reason, errorCode) { | ||
// close the connection when the receiver reports a HyBi error code | ||
if (typeof errorCode !== 'undefined') { | ||
self.close(errorCode, '', {mask: !self._isServer}); | ||
if (self._socket) { | ||
self._socket.removeAllListeners(); | ||
self._socket.end(); | ||
self._socket = null; | ||
} | ||
self.emit('error', reason, errorCode); | ||
}); | ||
Object.defineProperty(this, '_sender', { value: new Sender(socket) }); | ||
this._sender.on('error', function(error) { | ||
self.emit('error', error); | ||
}); | ||
this._readyState = WebSocket.OPEN; | ||
this.emit('open'); | ||
if (upgradeHead && upgradeHead.length > 0) { | ||
process.nextTick(function() { | ||
receiver.add(upgradeHead); | ||
}); | ||
} | ||
} | ||
function establishHixieConnection(socket, upgradeHead) { | ||
this._socket = socket; | ||
socket.setTimeout(0); | ||
socket.setNoDelay(true); | ||
var self = this; | ||
socket.on('end', function() { | ||
if (self.readyState == WebSocket.CLOSED) return; | ||
self._readyState = WebSocket.CLOSED; | ||
if (self._sender) { | ||
self._sender.removeAllListeners(); | ||
self._sender = null; | ||
} | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
}); | ||
socket.on('close', function() { | ||
if (self.readyState == WebSocket.CLOSED) return; | ||
self._readyState = WebSocket.CLOSED; | ||
self.emit('close', self._closeCode || 1000, self._closeMessage || ''); | ||
}); | ||
var receiver = new ReceiverHixie(); | ||
var receiver = new ReceiverClass(); | ||
socket.on('data', function (data) { | ||
@@ -552,3 +496,3 @@ receiver.add(data); | ||
Object.defineProperty(this, '_sender', { value: new SenderHixie(socket) }); | ||
Object.defineProperty(this, '_sender', { value: new SenderClass(socket) }); | ||
this._sender.on('error', function(error) { | ||
@@ -555,0 +499,0 @@ self.emit('error', error); |
@@ -42,3 +42,3 @@ /*! | ||
res.writeHead(200, {'Content-Type': 'text/plain'}); | ||
res.end(); | ||
res.end('Not implemented'); | ||
}) | ||
@@ -45,0 +45,0 @@ }); |
@@ -5,3 +5,3 @@ { | ||
"description": "simple to use, blazing fast and thoroughly tested websocket client, server and console for node.js, up-to-date against RFC-6455", | ||
"version": "0.4.2", | ||
"version": "0.4.3", | ||
"repository": { | ||
@@ -8,0 +8,0 @@ "type": "git", |
Sorry, the diff of this file is not supported yet
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
185585
-0.73%4875
-1.04%