You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
/*! |
|
* ws: a node.js websocket client |
|
* Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com> |
|
* MIT Licensed |
|
*/ |
|
|
|
'use strict'; |
|
|
|
const safeBuffer = require('safe-buffer'); |
|
|
|
const Buffer = safeBuffer.Buffer; |
|
|
|
/** |
|
* Merges an array of buffers into a new buffer. |
|
* |
|
* @param {Buffer[]} list The array of buffers to concat |
|
* @param {Number} totalLength The total length of buffers in the list |
|
* @return {Buffer} The resulting buffer |
|
* @public |
|
*/ |
|
const concat = (list, totalLength) => { |
|
const target = Buffer.allocUnsafe(totalLength); |
|
var offset = 0; |
|
|
|
for (var i = 0; i < list.length; i++) { |
|
const buf = list[i]; |
|
buf.copy(target, offset); |
|
offset += buf.length; |
|
} |
|
|
|
return target; |
|
}; |
|
|
|
try { |
|
const bufferUtil = require('bufferutil'); |
|
|
|
module.exports = Object.assign({ concat }, bufferUtil.BufferUtil || bufferUtil); |
|
} catch (e) /* istanbul ignore next */ { |
|
/** |
|
* Masks a buffer using the given mask. |
|
* |
|
* @param {Buffer} source The buffer to mask |
|
* @param {Buffer} mask The mask to use |
|
* @param {Buffer} output The buffer where to store the result |
|
* @param {Number} offset The offset at which to start writing |
|
* @param {Number} length The number of bytes to mask. |
|
* @public |
|
*/ |
|
const mask = (source, mask, output, offset, length) => { |
|
for (var i = 0; i < length; i++) { |
|
output[offset + i] = source[i] ^ mask[i & 3]; |
|
} |
|
}; |
|
|
|
/** |
|
* Unmasks a buffer using the given mask. |
|
* |
|
* @param {Buffer} buffer The buffer to unmask |
|
* @param {Buffer} mask The mask to use |
|
* @public |
|
*/ |
|
const unmask = (buffer, mask) => { |
|
// Required until https://github.com/nodejs/node/issues/9006 is resolved. |
|
const length = buffer.length; |
|
for (var i = 0; i < length; i++) { |
|
buffer[i] ^= mask[i & 3]; |
|
} |
|
}; |
|
|
|
module.exports = { concat, mask, unmask }; |
|
}
|
|
|