MCPcopy
hub / github.com/websockets/ws / frame

Method frame

lib/sender.js:79–173  ·  view source on GitHub ↗

* 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)

Source from the content-addressed store, hash-verified

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;

Callers 13

closeMethod · 0.80
pingMethod · 0.80
pongMethod · 0.80
getBlobDataMethod · 0.80
dispatchMethod · 0.80
websocket.test.jsFile · 0.80
receiver.test.jsFile · 0.80
sender.test.jsFile · 0.80
createBinaryFrameFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected