Socket
Socket
Sign inDemoInstall

ws

Package Overview
Dependencies
Maintainers
1
Versions
169
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ws - npm Package Compare versions

Comparing version 0.4.12 to 0.4.13

6

History.md

@@ -0,1 +1,7 @@

v0.4.13 - Apr 12th 2012
=====================
* circumvent node 0.6+ related memory leak caused by Object.defineProperty [nicokaiser]
* improved error handling, improving stability in massive load use cases [nicokaiser]
v0.4.12 - Mar 30th 2012

@@ -2,0 +8,0 @@ =====================

3

lib/Sender.hixie.js

@@ -38,3 +38,2 @@ /*!

}
if (data == '') return;

@@ -62,3 +61,3 @@ var length = Buffer.byteLength(data)

Sender.prototype.close = function(code, data, mask, cb) {
var buffer = new Buffer([0x0, 0xff]);
var buffer = new Buffer([0xff, 0x00]);
try {

@@ -65,0 +64,0 @@ this.socket.write(buffer, 'binary', cb);

@@ -41,28 +41,7 @@ /*!

var realEmit = this.emit;
this.emit = function(event) {
if (event == 'error') delete self._queue;
realEmit.apply(this, arguments);
}
this._socket = null;
this.bytesReceived = 0;
this.readyState = null;
this.supports = {};
Object.defineProperty(this, '_socket', { writable: true, value: null });
Object.defineProperty(this, '_bytesReceived', { writable: true, value: null });
Object.defineProperty(this, 'bytesReceived', {
get: function() {
return self._bytesReceived;
}
});
Object.defineProperty(this, 'readyState', {
get: function() {
return self._readyState;
}
});
Object.defineProperty(this, 'supports', {
get: function() {
return {
'binary': self.protocolVersion != 'hixie-76'
};
}
});
if (Object.prototype.toString.call(address) == '[object Array]') {

@@ -84,16 +63,7 @@ initAsServerClient.apply(this, address.concat(options));

(function() {
var readyStates = {
CONNECTING: 0
, OPEN: 1
, CLOSING: 2
, CLOSED: 3
};
WebSocket.CONNECTING = 0;
WebSocket.OPEN = 1;
WebSocket.CLOSING = 2;
WebSocket.CLOSED = 3;
for (var state in readyStates) {
if (!readyStates.hasOwnProperty(state)) continue;
Object.defineProperty(WebSocket, state, { enumerable: true, value: readyStates[state]});
}
})();
/**

@@ -109,7 +79,7 @@ * Gracefully closes the connection, after sending a description message to the server

if (this.readyState == WebSocket.CONNECTING) {
this._readyState = WebSocket.CLOSED;
this.readyState = WebSocket.CLOSED;
return;
}
try {
this._readyState = WebSocket.CLOSING;
this.readyState = WebSocket.CLOSING;
this._closeCode = code;

@@ -122,2 +92,3 @@ this._closeMessage = data;

catch (e) {
delete this._queue;
this.emit('error', e);

@@ -264,3 +235,6 @@ }

if (typeof cb == 'function') cb(e);
else self.emit('error', e);
else {
delete self._queue;
self.emit('error', e);
}
}

@@ -278,8 +252,5 @@ }

WebSocket.prototype.terminate = function() {
if (this._socket) {
try { this._socket.end(); }
catch (e) { this._socket.destroy(); }
}
if (this._socket) this._socket.end();
else if (this.readyState == WebSocket.CONNECTING) {
this._readyState = WebSocket.CLOSED;
this.readyState = WebSocket.CLOSED;
}

@@ -375,19 +346,8 @@ };

// expose state properties
Object.defineProperty(this, 'protocol', {
value: options.value.protocol,
configurable: false,
enumerable: true
});
Object.defineProperty(this, 'protocolVersion', {
value: options.value.protocolVersion,
configurable: false,
enumerable: true
});
Object.defineProperty(this, 'upgradeReq', {
value: req,
configurable: false,
enumerable: true
});
Object.defineProperty(this, '_readyState', { writable: true, value: WebSocket.CONNECTING });
Object.defineProperty(this, '_isServer', { writable: false, value: true });
this.protocol = options.value.protocol;
this.protocolVersion = options.value.protocolVersion;
this.supports.binary = (this.protocolVersion != 'hixie-76');
this.upgradeReq = req;
this.readyState = WebSocket.CONNECTING;
this._isServer = true;

@@ -415,14 +375,6 @@ // establish connection

// expose state properties
Object.defineProperty(this, '_isServer', { writable: false, value: false });
Object.defineProperty(this, 'url', {
writable: false,
configurable: false,
enumerable: true,
value: address
});
Object.defineProperty(this, 'protocolVersion', {
value: options.value.protocolVersion,
configurable: false,
enumerable: true
});
this._isServer = false;
this.url = address;
this.protocolVersion = options.value.protocolVersion;
this.supports.binary = (this.protocolVersion != 'hixie-76');

@@ -471,2 +423,3 @@ // begin handshake

(isNodeV4 ? agent : req).on('error', function(error) {
delete self._queue;
self.emit('error', error);

@@ -479,4 +432,3 @@ });

removeAllListeners(self);
try { socket.end(); }
catch (e) { socket.destroy(); }
socket.end();
return;

@@ -486,6 +438,6 @@ }

if (typeof serverKey == 'undefined' || serverKey !== expectedServerKey) {
delete self._queue;
self.emit('error', 'invalid server key');
removeAllListeners(self);
try { socket.end(); }
catch (e) { socket.destroy(); }
socket.end();
return;

@@ -503,3 +455,3 @@ }

req.end();
Object.defineProperty(this, '_readyState', { writable: true, value: WebSocket.CONNECTING });
this.readyState = WebSocket.CONNECTING;
}

@@ -517,7 +469,9 @@

if (self.readyState == WebSocket.CLOSED) return;
self._readyState = WebSocket.CLOSED;
self.readyState = WebSocket.CLOSED;
if (socket) {
removeAllListeners(socket);
try { socket.end(); }
catch (e) { socket.destroy(); }
socket.removeListener('end', closeSocket);
socket.removeListener('close', closeSocket);
socket.removeListener('data', firstHandler);
socket.removeListener('data', realHandler);
socket.end();
self._socket = null;

@@ -544,3 +498,3 @@ socket = null;

if (upgradeHead && upgradeHead.length > 0) {
self._bytesReceived += upgradeHead.length;
self.bytesReceived += upgradeHead.length;
var head = upgradeHead;

@@ -552,3 +506,3 @@ upgradeHead = null;

if (data) {
self._bytesReceived += data.length;
self.bytesReceived += data.length;
receiver.add(data);

@@ -559,3 +513,3 @@ }

function realHandler(data) {
if (data) self._bytesReceived += data.length;
if (data) self.bytesReceived += data.length;
receiver.add(data);

@@ -599,2 +553,3 @@ }

}
delete self._queue;
self.emit('error', reason, errorCode);

@@ -604,7 +559,8 @@ });

// finalize the client
Object.defineProperty(this, '_sender', { value: new SenderClass(socket), configurable: true });
this._sender = new SenderClass(socket);
this._sender.on('error', function(error) {
delete self._queue;
self.emit('error', error);
});
this._readyState = WebSocket.OPEN;
this.readyState = WebSocket.OPEN;
this.emit('open');

@@ -630,3 +586,6 @@ }

if (typeof cb == 'function') cb(new Error('not opened'));
else instance.emit('error', new Error('not opened'));
else {
delete instance._queue;
instance.emit('error', new Error('not opened'));
}
return;

@@ -640,3 +599,6 @@ }

if (typeof cb == 'function') cb(new Error('not opened'));
else instance.emit('error', new Error('not opened'));
else {
delete instance._queue;
instance.emit('error', new Error('not opened'));
}
return;

@@ -643,0 +605,0 @@ }

@@ -39,16 +39,11 @@ /*!

if (options.value.port) {
Object.defineProperty(this, '_server', {
configurable: true,
value: http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Not implemented');
})
this._server = http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Not implemented');
});
this._server.listen(options.value.port, options.value.host || '127.0.0.1', callback);
Object.defineProperty(this, '_closeServer', {
value: function() { self._server.close(); }
});
this._closeServer = function() { self._server.close(); };
}
else if (options.value.server) {
Object.defineProperty(this, '_server', { value: options.value.server, configurable: true });
this._server = options.value.server;
if (options.value.path) {

@@ -61,3 +56,3 @@ // take note of the path, to avoid collisions when multiple websocket servers are

if (typeof this._server._webSocketPaths !== 'object') {
Object.defineProperty(this._server, '_webSocketPaths', { value: {}, configurable: true });
this._server._webSocketPaths = {};
}

@@ -79,8 +74,5 @@ this._server._webSocketPaths[options.value.path] = 1;

Object.defineProperty(this, 'options', { value: options.value });
Object.defineProperty(this, 'path', { value: options.value.path });
Object.defineProperty(this, '_clients', { value: [] });
Object.defineProperty(this, 'clients', {
get: function() { return self._clients; }
});
this.options = options.value;
this.path = options.value.path;
this.clients = [];
}

@@ -104,4 +96,4 @@

try {
for (var i = 0, l = this._clients.length; i < l; ++i) {
this._clients[i].terminate();
for (var i = 0, l = this.clients.length; i < l; ++i) {
this.clients[i].terminate();
}

@@ -238,8 +230,8 @@ }

if (this.options.clientTracking) {
this._clients.push(client);
this.clients.push(client);
var self = this;
client.on('close', function() {
var index = self._clients.indexOf(client);
var index = self.clients.indexOf(client);
if (index != -1) {
self._clients.splice(index, 1);
self.clients.splice(index, 1);
}

@@ -315,7 +307,7 @@ });

if (this.options.clientTracking) {
self._clients.push(client);
self.clients.push(client);
client.on('close', function() {
var index = self._clients.indexOf(client);
var index = self.clients.indexOf(client);
if (index != -1) {
self._clients.splice(index, 1);
self.clients.splice(index, 1);
}

@@ -322,0 +314,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.12",
"version": "0.4.13",
"repository": {

@@ -8,0 +8,0 @@ "type": "git",

@@ -24,6 +24,6 @@ var assert = require('assert')

it('silently ignores empty messages (which would be close frames)', function(done) {
it('frames and sends an empty message', function(done) {
var socket = {
write: function(data, encoding, cb) {
done(new Error('should not write this empty message'));
done();
}

@@ -33,3 +33,2 @@ };

sender.send('', {}, function() {});
done();
});

@@ -62,3 +61,3 @@

sender.close(null, null, null, function() {
received.toString('utf8').should.eql('\u0000\ufffd');
received.toString('utf8').should.eql('\ufffd\u0000');
done();

@@ -65,0 +64,0 @@ });

@@ -149,8 +149,6 @@ var assert = require('assert')

describe('.' + state, function() {
it('is enumerable and immutable property', function() {
it('is enumerable property', function() {
var propertyDescripter = Object.getOwnPropertyDescriptor(WebSocket, state)
assert.equal(readyStates[state], propertyDescripter.value);
assert.equal(false, propertyDescripter.writable);
assert.equal(true, propertyDescripter.enumerable);
assert.equal(false, propertyDescripter.configurable);
});

@@ -157,0 +155,0 @@ });

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc