Comparing version 8.3.0 to 8.4.0
@@ -420,3 +420,9 @@ 'use strict'; | ||
data = this.consume(this._payloadLength); | ||
if (this._masked) unmask(data, this._mask); | ||
if ( | ||
this._masked && | ||
(this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0 | ||
) { | ||
unmask(data, this._mask); | ||
} | ||
} | ||
@@ -423,0 +429,0 @@ |
@@ -14,3 +14,3 @@ /* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^net|tls$" }] */ | ||
const mask = Buffer.alloc(4); | ||
const maskBuffer = Buffer.alloc(4); | ||
@@ -26,5 +26,13 @@ /** | ||
* @param {Object} [extensions] An object containing the negotiated extensions | ||
* @param {Function} [generateMask] The function used to generate the masking | ||
* key | ||
*/ | ||
constructor(socket, extensions) { | ||
constructor(socket, extensions, generateMask) { | ||
this._extensions = extensions || {}; | ||
if (generateMask) { | ||
this._generateMask = generateMask; | ||
this._maskBuffer = Buffer.alloc(4); | ||
} | ||
this._socket = socket; | ||
@@ -47,4 +55,8 @@ | ||
* FIN bit | ||
* @param {Function} [options.generateMask] The function used to generate the | ||
* masking key | ||
* @param {Boolean} [options.mask=false] Specifies whether or not to mask | ||
* `data` | ||
* @param {Buffer} [options.maskBuffer] The buffer used to store the masking | ||
* key | ||
* @param {Number} options.opcode The opcode | ||
@@ -59,4 +71,22 @@ * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be | ||
static frame(data, options) { | ||
const merge = options.mask && options.readOnly; | ||
let offset = options.mask ? 6 : 2; | ||
let mask; | ||
let merge = false; | ||
let offset = 2; | ||
let skipMasking = false; | ||
if (options.mask) { | ||
mask = options.maskBuffer || maskBuffer; | ||
if (options.generateMask) { | ||
options.generateMask(mask); | ||
} else { | ||
randomFillSync(mask, 0, 4); | ||
} | ||
skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; | ||
if (options.readOnly && !skipMasking) merge = true; | ||
offset = 6; | ||
} | ||
let payloadLength = data.length; | ||
@@ -88,4 +118,2 @@ | ||
randomFillSync(mask, 0, 4); | ||
target[1] |= 0x80; | ||
@@ -97,2 +125,4 @@ target[offset - 4] = mask[0]; | ||
if (skipMasking) return [target, data]; | ||
if (merge) { | ||
@@ -165,2 +195,4 @@ applyMask(data, mask, target, offset, data.length); | ||
mask, | ||
maskBuffer: this._maskBuffer, | ||
generateMask: this._generateMask, | ||
readOnly: false | ||
@@ -210,2 +242,4 @@ }), | ||
mask, | ||
maskBuffer: this._maskBuffer, | ||
generateMask: this._generateMask, | ||
readOnly | ||
@@ -255,2 +289,4 @@ }), | ||
mask, | ||
maskBuffer: this._maskBuffer, | ||
generateMask: this._generateMask, | ||
readOnly | ||
@@ -311,2 +347,4 @@ }), | ||
mask: options.mask, | ||
maskBuffer: this._maskBuffer, | ||
generateMask: this._generateMask, | ||
readOnly: toBuffer.readOnly | ||
@@ -327,2 +365,4 @@ }; | ||
mask: options.mask, | ||
maskBuffer: this._maskBuffer, | ||
generateMask: this._generateMask, | ||
readOnly: toBuffer.readOnly | ||
@@ -345,4 +385,8 @@ }), | ||
* FIN bit | ||
* @param {Function} [options.generateMask] The function used to generate the | ||
* masking key | ||
* @param {Boolean} [options.mask=false] Specifies whether or not to mask | ||
* `data` | ||
* @param {Buffer} [options.maskBuffer] The buffer used to store the masking | ||
* key | ||
* @param {Boolean} [options.readOnly=false] Specifies whether `data` can be | ||
@@ -349,0 +393,0 @@ * modified |
@@ -195,2 +195,4 @@ /* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Readable$" }] */ | ||
* @param {Object} options Options object | ||
* @param {Function} [options.generateMask] The function used to generate the | ||
* masking key | ||
* @param {Number} [options.maxPayload=0] The maximum allowed message size | ||
@@ -210,3 +212,3 @@ * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or | ||
this._sender = new Sender(socket, this._extensions); | ||
this._sender = new Sender(socket, this._extensions, options.generateMask); | ||
this._receiver = receiver; | ||
@@ -618,2 +620,4 @@ this._socket = socket; | ||
* redirects | ||
* @param {Function} [options.generateMask] The function used to generate the | ||
* masking key | ||
* @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the | ||
@@ -905,2 +909,3 @@ * handshake request | ||
websocket.setSocket(socket, head, { | ||
generateMask: opts.generateMask, | ||
maxPayload: opts.maxPayload, | ||
@@ -907,0 +912,0 @@ skipUTF8Validation: opts.skipUTF8Validation |
{ | ||
"name": "ws", | ||
"version": "8.3.0", | ||
"version": "8.4.0", | ||
"description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
129225
3779