This commit is contained in:
JonatanRek committed 2020-08-13 10:31:15 +02:00
1 parent 1ba0d7f9ba
commit 8d7722be91
3362 files changed
+13786 -500745

No files matched your search

+20 -29
View File
@@ -1,7 +1,6 @@
'use strict';
var Buffer = require('safe-buffer').Buffer,
crypto = require('crypto'),
var crypto = require('crypto'),
util = require('util'),
Extensions = require('websocket-extensions'),
Base = require('./base'),
@@ -23,20 +22,25 @@ var Hybi = function(request, url, options) {
if (!this._request) return;
var protos = this._request.headers['sec-websocket-protocol'],
var secKey = this._request.headers['sec-websocket-key'],
protos = this._request.headers['sec-websocket-protocol'],
version = this._request.headers['sec-websocket-version'],
supported = this._protocols;
this._headers.set('Upgrade', 'websocket');
this._headers.set('Connection', 'Upgrade');
this._headers.set('Sec-WebSocket-Accept', Hybi.generateAccept(secKey));
if (protos !== undefined) {
if (typeof protos === 'string') protos = protos.split(/ *, */);
this.protocol = protos.filter(function(p) { return supported.indexOf(p) >= 0 })[0];
if (this.protocol) this._headers.set('Sec-WebSocket-Protocol', this.protocol);
}
this.version = 'hybi-' + Hybi.VERSION;
this.version = 'hybi-' + version;
};
util.inherits(Hybi, Base);
Hybi.VERSION = '13';
Hybi.mask = function(payload, mask, offset) {
if (!mask || mask.length === 0) return payload;
offset = offset || 0;
@@ -188,7 +192,7 @@ var instance = {
if (this.readyState <= 0) return this._queue([buffer, type, code]);
if (this.readyState > 2) return false;
if (buffer instanceof Array) buffer = Buffer.from(buffer);
if (buffer instanceof Array) buffer = new Buffer(buffer);
if (typeof buffer === 'number') buffer = buffer.toString();
var message = new Message(),
@@ -198,11 +202,11 @@ var instance = {
message.rsv1 = message.rsv2 = message.rsv3 = false;
message.opcode = this.OPCODES[type || (isText ? 'text' : 'binary')];
payload = isText ? Buffer.from(buffer, 'utf8') : buffer;
payload = isText ? new Buffer(buffer, 'utf8') : buffer;
if (code) {
copy = payload;
payload = Buffer.allocUnsafe(2 + copy.length);
payload = new Buffer(2 + copy.length);
payload.writeUInt16BE(code, 0);
copy.copy(payload, 2);
}
@@ -240,7 +244,7 @@ var instance = {
var length = frame.length,
header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10),
offset = header + (frame.masked ? 4 : 0),
buffer = Buffer.allocUnsafe(offset + length),
buffer = new Buffer(offset + length),
masked = frame.masked ? this.MASK : 0;
buffer[0] = (frame.final ? this.FIN : 0) |
@@ -271,28 +275,18 @@ var instance = {
},
_handshakeResponse: function() {
var secKey = this._request.headers['sec-websocket-key'],
version = this._request.headers['sec-websocket-version'];
try {
var extensions = this._extensions.generateResponse(this._request.headers['sec-websocket-extensions']);
} catch (e) {
return this._fail('protocol_error', e.message);
}
if (version !== Hybi.VERSION)
throw new Error('Unsupported WebSocket version: ' + version);
if (typeof secKey !== 'string')
throw new Error('Missing handshake request header: Sec-WebSocket-Key');
this._headers.set('Upgrade', 'websocket');
this._headers.set('Connection', 'Upgrade');
this._headers.set('Sec-WebSocket-Accept', Hybi.generateAccept(secKey));
if (this.protocol) this._headers.set('Sec-WebSocket-Protocol', this.protocol);
var extensions = this._extensions.generateResponse(this._request.headers['sec-websocket-extensions']);
if (extensions) this._headers.set('Sec-WebSocket-Extensions', extensions);
var start = 'HTTP/1.1 101 Switching Protocols',
headers = [start, this._headers.toString(), ''];
return Buffer.from(headers.join('\r\n'), 'utf8');
return new Buffer(headers.join('\r\n'), 'utf8');
},
_shutdown: function(code, reason, error) {
@@ -427,7 +421,6 @@ var instance = {
if (opcode === this.OPCODES.ping) {
this.frame(payload, 'pong');
this.emit('ping', new Base.PingEvent(payload.toString()))
}
if (opcode === this.OPCODES.pong) {
@@ -437,8 +430,6 @@ var instance = {
delete callbacks[message];
if (callback) callback()
this.emit('pong', new Base.PongEvent(payload.toString()))
}
},