You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 7-8.RSVP
Socket
Socket
Sign inDemoInstall

ws

Package Overview
Dependencies
1
Maintainers
1
Versions
169
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.3.4 to 0.3.5-2

13

History.md

@@ -1,5 +0,14 @@

v0.3.2 - Dec 11th 2011
v0.3.5-2 - Dec 13th 2011
======================
* Compile fix for Linux
* Optimized Sender.js, Receiver.js and bufferutil.cc:
* Apply loop-unrolling-like small block copies rather than use node.js Buffer#copy() (which is slow).
* Mask blocks of data using loop-unrolling (Duff style), instead of single bytes.
* Keep pre-made send buffer for small transfers.
* Leak fixes and code cleanups.
v0.3.3 - Dec 12th 2011
======================
* Compile fix for Linux.
* Rewrote parts of WebSocket.js, to avoid try/catch and thus avoid optimizer bailouts.

@@ -6,0 +15,0 @@

47

lib/Receiver.js

@@ -72,3 +72,3 @@ /*!

self.expect(2, function(data) {
opcodes['1'].getData(readUInt16BE.call(data, 0));
opcodes['1'].getData(readUInt16BE.call(data, 0, true));
});

@@ -78,7 +78,7 @@ }

self.expect(8, function(data) {
if (readUInt32BE.call(data, 0) != 0) {
if (readUInt32BE.call(data, 0, true) != 0) {
self.error('packets with length spanning more than 32 bit is currently not supported', 1008);
return;
}
opcodes['1'].getData(readUInt32BE.call(data, 4));
opcodes['1'].getData(readUInt32BE.call(data, 4, true));
});

@@ -127,3 +127,3 @@ }

self.expect(2, function(data) {
opcodes['2'].getData(readUInt16BE.call(data, 0));
opcodes['2'].getData(readUInt16BE.call(data, 0, true));
});

@@ -133,7 +133,7 @@ }

self.expect(8, function(data) {
if (readUInt32BE.call(data, 0) != 0) {
if (readUInt32BE.call(data, 0, true) != 0) {
self.error('packets with length spanning more than 32 bit is currently not supported', 1008);
return;
}
opcodes['2'].getData(readUInt32BE.call(data, 4));
opcodes['2'].getData(readUInt32BE.call(data, 4, true));
});

@@ -320,3 +320,17 @@ }

var toRead = Math.min(data.length, this.expectBuffer.length - this.expectOffset);
data.copy(this.expectBuffer, this.expectOffset, 0, toRead);
// although ugly, this is a much faster approach for small buffers,
// than calling copy()
var dest = this.expectBuffer;
var offset = this.expectOffset;
switch (toRead) {
default: data.copy(dest, offset, 0, toRead); break;
case 8: dest[offset+7] = data[7];
case 7: dest[offset+6] = data[6];
case 6: dest[offset+5] = data[5];
case 5: dest[offset+4] = data[4];
case 4: dest[offset+3] = data[3];
case 3: dest[offset+2] = data[2];
case 2: dest[offset+1] = data[1];
case 1: dest[offset] = data[0];
}
this.expectOffset += toRead;

@@ -344,5 +358,18 @@ if (toRead < data.length) {

var prevOverflow = this.overflow;
this.overflow = this.allocateFromPool(this.overflow.length + data.length);
var dataLength = data.length;
this.overflow = this.allocateFromPool(this.overflow.length + dataLength);
prevOverflow.copy(this.overflow, 0);
data.copy(this.overflow, prevOverflow.length);
var dest = this.overflow;
var offset = prevOverflow.length;
switch (dataLength) {
default: data.copy(dest, offset, 0, dataLength); break;
case 8: dest[offset+7] = data[7];
case 7: dest[offset+6] = data[6];
case 6: dest[offset+5] = data[5];
case 5: dest[offset+4] = data[4];
case 4: dest[offset+3] = data[3];
case 3: dest[offset+2] = data[2];
case 2: dest[offset+1] = data[1];
case 1: dest[offset] = data[0];
}
}

@@ -502,2 +529,2 @@ }

module.exports = Receiver;
module.exports = Receiver;

@@ -36,3 +36,5 @@ /*!

function Sender (socket) {
function Sender (socket, config) {
this._sendCacheSize = (config && config.SendBufferCacheSize) ? config.SendBufferCacheSize : 65536;
this._sendCache = new Buffer(this._sendCacheSize);
this._socket = socket;

@@ -61,3 +63,3 @@ this.firstFragment = true;

var dataBuffer = new Buffer(2 + (data ? Buffer.byteLength(data) : 0));
writeUInt16BE.call(dataBuffer, code, 0);
writeUInt16BE.call(dataBuffer, code, 0, true);
if (dataBuffer.length > 2) dataBuffer.write(data, 2);

@@ -136,3 +138,2 @@ var buf = this.frameData(0x8, dataBuffer, true, mask);

*/
Sender.prototype.frameData = function(opcode, data, finalFragment, maskData) {

@@ -155,3 +156,4 @@ if (!data) return new Buffer([opcode | (finalFragment ? 0x80 : 0), 0]);

}
var outputBuffer = new Buffer(dataLength + dataOffset);
var outputBuffer = (this._sendCache && dataLength + dataOffset <= this._sendCacheSize)
? this._sendCache : new Buffer(dataLength + dataOffset);
if (finalFragment) opcode = opcode | 0x80;

@@ -161,12 +163,18 @@ outputBuffer[0] = opcode;

case 126:
writeUInt16BE.call(outputBuffer, dataLength, 2);
writeUInt16BE.call(outputBuffer, dataLength, 2, true);
break;
case 127:
writeUInt32BE.call(outputBuffer, 0, 2);
writeUInt32BE.call(outputBuffer, dataLength, 6);
writeUInt32BE.call(outputBuffer, 0, 2, true);
writeUInt32BE.call(outputBuffer, dataLength, 6, true);
}
if (maskData) {
var mask = this._randomMask || (this._randomMask = getRandomMask());
mask.copy(outputBuffer, dataOffset - 4);
bufferUtil.mask(data, mask, outputBuffer, dataOffset);
//faster:
outputBuffer[dataOffset - 4] = mask[0];
outputBuffer[dataOffset - 3] = mask[1];
outputBuffer[dataOffset - 2] = mask[2];
outputBuffer[dataOffset - 1] = mask[3];
//slower:
//mask.copy(outputBuffer, dataOffset - 4);
bufferUtil.mask(data, mask, outputBuffer, dataOffset, dataLength);
secondByte = secondByte | 0x80;

@@ -176,3 +184,3 @@ }

outputBuffer[1] = secondByte;
return outputBuffer;
return outputBuffer.slice(0, dataOffset + dataLength);
}

@@ -179,0 +187,0 @@

@@ -309,2 +309,7 @@ /*!

});
socket.on('close', function() {
if (self._state == 'disconnected') return;
self._state = 'disconnected';
self.emit('close', self._closeCode || 1000, self._closeMessage || '');
});

@@ -311,0 +316,0 @@ var receiver = new Receiver();

@@ -5,3 +5,3 @@ {

"description": "simple and very fast websocket protocol client for node.js",
"version": "0.3.4",
"version": "0.3.5-2",
"repository": {

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

@@ -90,3 +90,4 @@ # ws: a node.js websocket implementation #

Nothing worth bragging about at present.
* Expose Sender and Receiver configuration options through WebSocket, and test that properly.
* Cleanup configuration for Sender, and add similar bits to Receiver.

@@ -93,0 +94,0 @@ ## License ##

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc