ws
Advanced tools
Comparing version 0.4.18 to 0.4.19
@@ -0,1 +1,7 @@ | ||
v0.4.19 - June 19th, 2012 | ||
===================== | ||
* Change sender to merge buffers for relatively small payloads, may improve perf in some cases [einaros] | ||
* Avoid EventEmitter for Receiver classes. As above this may improve perf. [einaros] | ||
* Renamed fallback files from the somewhat misleading '*Windows'. [einaros] | ||
v0.4.18 - June 14th 2012 | ||
@@ -2,0 +8,0 @@ ===================== |
@@ -19,6 +19,7 @@ var spawn = require('child_process').spawn | ||
if (code !== 0) { | ||
console.log('[ws v%s]'.blue + ' Native extension compilation failed.'.red, version); | ||
console.log('[ws v%s]'.blue + ' On Windows, native extensions require Visual Studio and Python.'.red, version); | ||
console.log('[ws v%s]'.blue + ' On Unix, native extensions require Python, make and a C++ compiler.'.red, version); | ||
console.log('[ws v%s]'.blue + ' Start npm with --ws:verbose to show compilation output (if any).'.red, version); | ||
console.log('[ws v%s]'.blue + ' Native code compile failed (but the module will still work):'.yellow, version); | ||
console.log('[ws v%s]'.blue + ' The native extensions are faster, but not required.'.yellow, version); | ||
console.log('[ws v%s]'.blue + ' On Windows, native extensions require Visual Studio and Python.'.yellow, version); | ||
console.log('[ws v%s]'.blue + ' On Unix, native extensions require Python, make and a C++ compiler.'.yellow, version); | ||
console.log('[ws v%s]'.blue + ' Start npm with --ws:verbose to show compilation output (if any).'.yellow, version); | ||
} | ||
@@ -25,0 +26,0 @@ else { |
@@ -12,3 +12,3 @@ /*! | ||
} catch (e) { try { | ||
module.exports = require('./BufferUtilWindows'); | ||
module.exports = require('./BufferUtil.fallback'); | ||
} catch (e) { | ||
@@ -15,0 +15,0 @@ console.error('bufferutil.node seems to not have been built. Run npm install.'); |
@@ -7,5 +7,3 @@ /*! | ||
var events = require('events') | ||
, util = require('util') | ||
, EventEmitter = events.EventEmitter; | ||
var util = require('util'); | ||
@@ -29,2 +27,9 @@ /** | ||
this.dead = false; | ||
this.onerror = function() {}; | ||
this.ontext = function() {}; | ||
this.onbinary = function() {}; | ||
this.onclose = function() {}; | ||
this.onping = function() {}; | ||
this.onpong = function() {}; | ||
} | ||
@@ -35,8 +40,2 @@ | ||
/** | ||
* Inherits from EventEmitter. | ||
*/ | ||
util.inherits(Receiver, events.EventEmitter); | ||
/** | ||
* Add new data to the parser. | ||
@@ -53,3 +52,3 @@ * | ||
self.reset(); | ||
self.emit('close'); | ||
self.onclose(); | ||
return; | ||
@@ -107,3 +106,3 @@ } | ||
this.reset(); | ||
this.emit('text', output.toString('utf8')); | ||
this.ontext(output.toString('utf8')); | ||
return tail; | ||
@@ -120,3 +119,3 @@ } | ||
this.reset(); | ||
this.emit('error', reason, terminate); | ||
this.onerror(reason, terminate); | ||
return this; | ||
@@ -123,0 +122,0 @@ } |
@@ -7,5 +7,3 @@ /*! | ||
var events = require('events') | ||
, util = require('util') | ||
, EventEmitter = events.EventEmitter | ||
var util = require('util') | ||
, Validation = require('./Validation').Validation | ||
@@ -62,2 +60,9 @@ , ErrorCodes = require('./ErrorCodes') | ||
this.dead = false; | ||
this.onerror = function() {}; | ||
this.ontext = function() {}; | ||
this.onbinary = function() {}; | ||
this.onclose = function() {}; | ||
this.onping = function() {}; | ||
this.onpong = function() {}; | ||
}; | ||
@@ -68,8 +73,2 @@ | ||
/** | ||
* Inherits from EventEmitter. | ||
*/ | ||
util.inherits(Receiver, events.EventEmitter); | ||
/** | ||
* Add new data to the parser. | ||
@@ -117,2 +116,8 @@ * | ||
this.currentMessage = null; | ||
this.onerror = null; | ||
this.ontext = null; | ||
this.onbinary = null; | ||
this.onclose = null; | ||
this.onping = null; | ||
this.onpong = null; | ||
} | ||
@@ -300,3 +305,3 @@ | ||
this.reset(); | ||
this.emit('error', reason, protocolErrorCode); | ||
this.onerror(reason, protocolErrorCode); | ||
return this; | ||
@@ -397,3 +402,3 @@ } | ||
} | ||
this.emit('text', messageBuffer.toString('utf8'), {masked: this.state.masked, buffer: messageBuffer}); | ||
this.ontext(messageBuffer.toString('utf8'), {masked: this.state.masked, buffer: messageBuffer}); | ||
this.currentMessage = []; | ||
@@ -449,3 +454,3 @@ } | ||
var messageBuffer = this.concatBuffers(this.currentMessage); | ||
this.emit('binary', messageBuffer, {masked: this.state.masked, buffer: messageBuffer}); | ||
this.onbinary(messageBuffer, {masked: this.state.masked, buffer: messageBuffer}); | ||
this.currentMessage = []; | ||
@@ -511,3 +516,3 @@ } | ||
} | ||
this.emit('close', code, message, {masked: self.state.masked}); | ||
this.onclose(code, message, {masked: self.state.masked}); | ||
this.reset(); | ||
@@ -551,3 +556,3 @@ }, | ||
finish: function(mask, data) { | ||
this.emit('ping', this.unmask(mask, data, true), {masked: this.state.masked, binary: true}); | ||
this.onping(this.unmask(mask, data, true), {masked: this.state.masked, binary: true}); | ||
this.endPacket(); | ||
@@ -591,3 +596,3 @@ } | ||
finish: function(mask, data) { | ||
this.emit('pong', this.unmask(mask, data, true), {masked: this.state.masked, binary: true}); | ||
this.onpong(this.unmask(mask, data, true), {masked: this.state.masked, binary: true}); | ||
this.endPacket(); | ||
@@ -594,0 +599,0 @@ } |
@@ -122,5 +122,5 @@ /*! | ||
var totalLength = (maskData && !canModifyData) ? dataLength + dataOffset : dataOffset; | ||
var mergeBuffers = dataLength < 32768 || (maskData && !canModifyData); | ||
var totalLength = mergeBuffers ? dataLength + dataOffset : dataOffset; | ||
var outputBuffer = new Buffer(totalLength); | ||
outputBuffer[0] = finalFragment ? opcode | 0x80 : opcode; | ||
@@ -137,5 +137,2 @@ | ||
var sendsDone = 0; | ||
var cbCaller = function() { if (++sendsDone == 2 && typeof cb == 'function') cb(null); } | ||
if (maskData) { | ||
@@ -148,3 +145,3 @@ outputBuffer[1] = secondByte | 0x80; | ||
outputBuffer[dataOffset - 1] = mask[3]; | ||
if (!canModifyData) { | ||
if (mergeBuffers) { | ||
bufferUtil.mask(data, mask, outputBuffer, dataOffset, dataLength); | ||
@@ -162,4 +159,4 @@ try { | ||
try { | ||
this._socket.write(outputBuffer, 'binary', cb ? cbCaller : null); | ||
this._socket.write(data, 'binary', cb ? cbCaller : null); | ||
this._socket.write(outputBuffer, 'binary'); | ||
this._socket.write(data, 'binary', cb); | ||
} | ||
@@ -174,9 +171,21 @@ catch (e) { | ||
outputBuffer[1] = secondByte; | ||
try { | ||
this._socket.write(outputBuffer, 'binary', cb ? cbCaller : null); | ||
this._socket.write(data, 'binary', cb ? cbCaller : null); | ||
if (mergeBuffers) { | ||
data.copy(outputBuffer, dataOffset); | ||
try { | ||
this._socket.write(outputBuffer, 'binary', cb); | ||
} | ||
catch (e) { | ||
if (typeof cb == 'function') cb(e); | ||
else this.emit('error', e); | ||
} | ||
} | ||
catch (e) { | ||
if (typeof cb == 'function') cb(e); | ||
else this.emit('error', e); | ||
else { | ||
try { | ||
this._socket.write(outputBuffer, 'binary'); | ||
this._socket.write(data, 'binary', cb); | ||
} | ||
catch (e) { | ||
if (typeof cb == 'function') cb(e); | ||
else this.emit('error', e); | ||
} | ||
} | ||
@@ -183,0 +192,0 @@ } |
@@ -12,3 +12,3 @@ /*! | ||
} catch (e) { try { | ||
module.exports = require('./ValidationWindows'); | ||
module.exports = require('./Validation.fallback'); | ||
} catch (e) { | ||
@@ -15,0 +15,0 @@ console.error('validation.node seems to not have been built. Run npm install.'); |
@@ -512,28 +512,28 @@ /*! | ||
// receiver event handlers | ||
self._receiver.on('text', function (data, flags) { | ||
self._receiver.ontext = function (data, flags) { | ||
flags = flags || {}; | ||
self.emit('message', data, flags); | ||
}); | ||
self._receiver.on('binary', function (data, flags) { | ||
}; | ||
self._receiver.onbinary = function (data, flags) { | ||
flags = flags || {}; | ||
flags.binary = true; | ||
self.emit('message', data, flags); | ||
}); | ||
self._receiver.on('ping', function(data, flags) { | ||
}; | ||
self._receiver.onping = function(data, flags) { | ||
flags = flags || {}; | ||
self.pong(data, {mask: !self._isServer, binary: flags.binary === true}, true); | ||
self.emit('ping', data, flags); | ||
}); | ||
self._receiver.on('pong', function(data, flags) { | ||
}; | ||
self._receiver.onpong = function(data, flags) { | ||
self.emit('pong', data, flags); | ||
}); | ||
self._receiver.on('close', function(code, data, flags) { | ||
}; | ||
self._receiver.onclose = function(code, data, flags) { | ||
flags = flags || {}; | ||
self.close(code, data); | ||
}); | ||
self._receiver.on('error', function(reason, errorCode) { | ||
}; | ||
self._receiver.onerror = function(reason, errorCode) { | ||
// close the connection when the receiver reports a HyBi error code | ||
self.close(typeof errorCode != 'undefined' ? errorCode : 1002, ''); | ||
self.emit('error', reason, errorCode); | ||
}); | ||
}; | ||
@@ -614,3 +614,2 @@ // finalize the client | ||
if (this._receiver) { | ||
removeAllListeners(this._receiver); | ||
this._receiver.cleanup(); | ||
@@ -617,0 +616,0 @@ this._receiver = null; |
@@ -199,2 +199,4 @@ /*! | ||
socket.setTimeout(0); | ||
socket.setNoDelay(true); | ||
try { | ||
@@ -209,4 +211,2 @@ socket.write(headers.concat('', '').join('\r\n')); | ||
socket.setTimeout(0); | ||
socket.setNoDelay(true); | ||
var client = new WebSocket([req, socket, upgradeHead], { | ||
@@ -213,0 +213,0 @@ protocolVersion: version, |
@@ -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.18", | ||
"version": "0.4.19", | ||
"repository": { | ||
@@ -8,0 +8,0 @@ "type": "git", |
@@ -12,6 +12,6 @@ var assert = require('assert') | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal('Hello', data); | ||
}); | ||
}; | ||
@@ -28,6 +28,6 @@ p.add(getBufferFromHexString(packet)); | ||
var messages = []; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
messages.push(data); | ||
}); | ||
}; | ||
@@ -46,6 +46,6 @@ p.add(getBufferFromHexString(packet)); | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal('', data); | ||
}); | ||
}; | ||
@@ -69,6 +69,6 @@ p.add(getBufferFromHexString(packet)); | ||
var messages = []; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
messages.push(data); | ||
}); | ||
}; | ||
@@ -98,9 +98,9 @@ for (var i = 0; i < packets.length; ++i) { | ||
var messages = []; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
messages.push(data); | ||
}); | ||
p.on('error', function(reason, code) { | ||
}; | ||
p.onerror = function(reason, code) { | ||
gotError = code == true; | ||
}); | ||
}; | ||
@@ -124,8 +124,8 @@ for (var i = 0; i < packets.length && !gotError; ++i) { | ||
var gotError = false; | ||
p.on('close', function() { | ||
p.onclose = function() { | ||
gotClose = true; | ||
}); | ||
p.on('error', function(reason, code) { | ||
}; | ||
p.onerror = function(reason, code) { | ||
gotError = code == true; | ||
}); | ||
}; | ||
@@ -132,0 +132,0 @@ for (var i = 0; i < packets.length && !gotError; ++i) { |
@@ -6,13 +6,13 @@ var assert = require('assert') | ||
describe('Receiver', function() { | ||
describe('Receiver', function() { | ||
it('can parse unmasked text message', function() { | ||
var p = new Receiver(); | ||
var packet = '81 05 48 65 6c 6c 6f'; | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal('Hello', data); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -24,8 +24,8 @@ gotData.should.be.ok; | ||
var packet = '88 00'; | ||
var gotClose = false; | ||
p.on('close', function(data) { | ||
p.onclose = function(data) { | ||
gotClose = true; | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -37,9 +37,9 @@ gotClose.should.be.ok; | ||
var packet = '81 93 34 83 a8 68 01 b9 92 52 4f a1 c6 09 59 e6 8a 52 16 e6 cb 00 5b a1 d5'; | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal('5:::{"name":"echo"}', data); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -53,9 +53,9 @@ gotData.should.be.ok; | ||
var packet = '81 FE ' + pack(4, message.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68')); | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal(message, data); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -71,7 +71,7 @@ gotData.should.be.ok; | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal(message, data); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -88,9 +88,9 @@ gotData.should.be.ok; | ||
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68')); | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
gotData = true; | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal(message, data); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet1)); | ||
@@ -106,6 +106,6 @@ p.add(getBufferFromHexString(packet2)); | ||
var gotPing = false; | ||
p.on('ping', function(data) { | ||
p.onping = function(data) { | ||
gotPing = true; | ||
assert.equal(message, data); | ||
}); | ||
}; | ||
@@ -118,8 +118,8 @@ p.add(getBufferFromHexString(packet)); | ||
var packet = '89 00'; | ||
var gotPing = false; | ||
p.on('ping', function(data) { | ||
p.onping = function(data) { | ||
gotPing = true; | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -132,23 +132,23 @@ gotPing.should.be.ok; | ||
for (var i = 0; i < 300; ++i) message += (i % 5).toString(); | ||
var msgpiece1 = message.substr(0, 150); | ||
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68')); | ||
var pingMessage = 'Hello'; | ||
var pingPacket = '89 ' + getHybiLengthAsHexString(pingMessage.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68')); | ||
var msgpiece2 = message.substr(150); | ||
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68')); | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal(message, data); | ||
}); | ||
}; | ||
var gotPing = false; | ||
p.on('ping', function(data) { | ||
p.onping = function(data) { | ||
gotPing = true; | ||
assert.equal(pingMessage, data); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet1)); | ||
@@ -164,23 +164,23 @@ p.add(getBufferFromHexString(pingPacket)); | ||
for (var i = 0; i < 300; ++i) message += (i % 5).toString(); | ||
var msgpiece1 = message.substr(0, 150); | ||
var packet1 = '01 FE ' + pack(4, msgpiece1.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece1, '34 83 a8 68')); | ||
var pingMessage = 'Hello'; | ||
var pingPacket = '89 ' + getHybiLengthAsHexString(pingMessage.length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(pingMessage, '34 83 a8 68')); | ||
var msgpiece2 = message.substr(150); | ||
var packet2 = '80 FE ' + pack(4, msgpiece2.length) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(msgpiece2, '34 83 a8 68')); | ||
var gotData = false; | ||
p.on('text', function(data) { | ||
p.ontext = function(data) { | ||
gotData = true; | ||
assert.equal(message, data); | ||
}); | ||
}; | ||
var gotPing = false; | ||
p.on('ping', function(data) { | ||
p.onping = function(data) { | ||
gotPing = true; | ||
assert.equal(pingMessage, data); | ||
}); | ||
}; | ||
var buffers = []; | ||
@@ -201,11 +201,11 @@ buffers = buffers.concat(splitBuffer(getBufferFromHexString(packet1))); | ||
for (var i = 0; i < length; ++i) message[i] = i % 256; | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68')); | ||
var gotData = false; | ||
p.on('binary', function(data) { | ||
p.onbinary = function(data) { | ||
gotData = true; | ||
assert.equal(originalMessage, getHexStringFromBuffer(data)); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -219,11 +219,11 @@ gotData.should.be.ok; | ||
for (var i = 0; i < length; ++i) message[i] = i % 256; | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68')); | ||
var gotData = false; | ||
p.on('binary', function(data) { | ||
p.onbinary = function(data) { | ||
gotData = true; | ||
assert.equal(originalMessage, getHexStringFromBuffer(data)); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -237,11 +237,11 @@ gotData.should.be.ok; | ||
for (var i = 0; i < length; ++i) message[i] = i % 256; | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var packet = '82 ' + getHybiLengthAsHexString(length, true) + ' 34 83 a8 68 ' + getHexStringFromBuffer(mask(message, '34 83 a8 68')); | ||
var gotData = false; | ||
p.on('binary', function(data) { | ||
p.onbinary = function(data) { | ||
gotData = true; | ||
assert.equal(originalMessage, getHexStringFromBuffer(data)); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -255,11 +255,11 @@ gotData.should.be.ok; | ||
for (var i = 0; i < length; ++i) message[i] = i % 256; | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var originalMessage = getHexStringFromBuffer(message); | ||
var packet = '82 ' + getHybiLengthAsHexString(length, false) + ' ' + getHexStringFromBuffer(message); | ||
var gotData = false; | ||
p.on('binary', function(data) { | ||
p.onbinary = function(data) { | ||
gotData = true; | ||
assert.equal(originalMessage, getHexStringFromBuffer(data)); | ||
}); | ||
}; | ||
p.add(getBufferFromHexString(packet)); | ||
@@ -266,0 +266,0 @@ gotData.should.be.ok; |
@@ -12,3 +12,3 @@ var http = require('http') | ||
invalidKey: invalidRequestHandler, | ||
closeAfterConnect: closeAfterConnectHandler | ||
closeAfterConnect: closeAfterConnectHandler | ||
}, | ||
@@ -38,3 +38,3 @@ createServer: function(port, handler, cb) { | ||
function validServer(server, req, socket) { | ||
if (typeof req.headers.upgrade === 'undefined' || | ||
if (typeof req.headers.upgrade === 'undefined' || | ||
req.headers.upgrade.toLowerCase() !== 'websocket') { | ||
@@ -49,7 +49,7 @@ throw new Error('invalid headers'); | ||
} | ||
// calc key | ||
var key = req.headers['sec-websocket-key']; | ||
var shasum = crypto.createHash('sha1'); | ||
shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); | ||
var key = req.headers['sec-websocket-key']; | ||
var shasum = crypto.createHash('sha1'); | ||
shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); | ||
key = shasum.digest('base64'); | ||
@@ -70,7 +70,7 @@ | ||
var receiver = new Receiver(); | ||
receiver.on('text', function (message, flags) { | ||
receiver.ontext = function (message, flags) { | ||
server.emit('message', message, flags); | ||
sender.send(message); | ||
}); | ||
receiver.on('binary', function (message, flags) { | ||
}; | ||
receiver.onbinary = function (message, flags) { | ||
flags = flags || {}; | ||
@@ -80,15 +80,15 @@ flags.binary = true; | ||
sender.send(message, {binary: true}); | ||
}); | ||
receiver.on('ping', function (message, flags) { | ||
}; | ||
receiver.onping = function (message, flags) { | ||
flags = flags || {}; | ||
server.emit('ping', message, flags); | ||
}); | ||
receiver.on('pong', function (message, flags) { | ||
}; | ||
receiver.onpong = function (message, flags) { | ||
flags = flags || {}; | ||
server.emit('pong', message, flags); | ||
}); | ||
receiver.on('close', function (code, message, flags) { | ||
}; | ||
receiver.onclose = function (code, message, flags) { | ||
flags = flags || {}; | ||
server.emit('close', code, message, flags); | ||
}); | ||
}; | ||
socket.on('data', function (data) { | ||
@@ -103,3 +103,3 @@ receiver.add(data); | ||
function invalidRequestHandler(server, req, socket) { | ||
if (typeof req.headers.upgrade === 'undefined' || | ||
if (typeof req.headers.upgrade === 'undefined' || | ||
req.headers.upgrade.toLowerCase() !== 'websocket') { | ||
@@ -114,7 +114,7 @@ throw new Error('invalid headers'); | ||
} | ||
// calc key | ||
var key = req.headers['sec-websocket-key']; | ||
var shasum = crypto.createHash('sha1'); | ||
shasum.update(key + "bogus"); | ||
var key = req.headers['sec-websocket-key']; | ||
var shasum = crypto.createHash('sha1'); | ||
shasum.update(key + "bogus"); | ||
key = shasum.digest('base64'); | ||
@@ -134,3 +134,3 @@ | ||
function closeAfterConnectHandler(server, req, socket) { | ||
if (typeof req.headers.upgrade === 'undefined' || | ||
if (typeof req.headers.upgrade === 'undefined' || | ||
req.headers.upgrade.toLowerCase() !== 'websocket') { | ||
@@ -145,7 +145,7 @@ throw new Error('invalid headers'); | ||
} | ||
// calc key | ||
var key = req.headers['sec-websocket-key']; | ||
var shasum = crypto.createHash('sha1'); | ||
shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); | ||
var key = req.headers['sec-websocket-key']; | ||
var shasum = crypto.createHash('sha1'); | ||
shasum.update(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); | ||
key = shasum.digest('base64'); | ||
@@ -152,0 +152,0 @@ |
230027
5825