* Frames a piece of data according to the HyBi WebSocket protocol. * * @param {(Buffer|String)} data The data to frame * @param {Object} options Options object * @param {Boolean} [options.fin=false] Specifies whether or not to set the * FIN bit * @param {Function} [options.gene
(data, options)
| 77 | * @public |
| 78 | */ |
| 79 | static frame(data, options) { |
| 80 | let mask; |
| 81 | let merge = false; |
| 82 | let offset = 2; |
| 83 | let skipMasking = false; |
| 84 | |
| 85 | if (options.mask) { |
| 86 | mask = options.maskBuffer || maskBuffer; |
| 87 | |
| 88 | if (options.generateMask) { |
| 89 | options.generateMask(mask); |
| 90 | } else { |
| 91 | if (randomPoolPointer === RANDOM_POOL_SIZE) { |
| 92 | /* istanbul ignore else */ |
| 93 | if (randomPool === undefined) { |
| 94 | // |
| 95 | // This is lazily initialized because server-sent frames must not |
| 96 | // be masked so it may never be used. |
| 97 | // |
| 98 | randomPool = Buffer.alloc(RANDOM_POOL_SIZE); |
| 99 | } |
| 100 | |
| 101 | randomFillSync(randomPool, 0, RANDOM_POOL_SIZE); |
| 102 | randomPoolPointer = 0; |
| 103 | } |
| 104 | |
| 105 | mask[0] = randomPool[randomPoolPointer++]; |
| 106 | mask[1] = randomPool[randomPoolPointer++]; |
| 107 | mask[2] = randomPool[randomPoolPointer++]; |
| 108 | mask[3] = randomPool[randomPoolPointer++]; |
| 109 | } |
| 110 | |
| 111 | skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0; |
| 112 | offset = 6; |
| 113 | } |
| 114 | |
| 115 | let dataLength; |
| 116 | |
| 117 | if (typeof data === 'string') { |
| 118 | if ( |
| 119 | (!options.mask || skipMasking) && |
| 120 | options[kByteLength] !== undefined |
| 121 | ) { |
| 122 | dataLength = options[kByteLength]; |
| 123 | } else { |
| 124 | data = Buffer.from(data); |
| 125 | dataLength = data.length; |
| 126 | } |
| 127 | } else { |
| 128 | dataLength = data.length; |
| 129 | merge = options.mask && options.readOnly && !skipMasking; |
| 130 | } |
| 131 | |
| 132 | let payloadLength = dataLength; |
| 133 | |
| 134 | if (dataLength >= 65536) { |
| 135 | offset += 8; |
| 136 | payloadLength = 127; |
no outgoing calls
no test coverage detected