MCPcopy Index your code
hub / github.com/nodejs/node / decodeFrameHybi17

Function decodeFrameHybi17

lib/internal/debugger/inspect_client.js:103–168  ·  view source on GitHub ↗
(data)

Source from the content-addressed store, hash-verified

101}
102
103function decodeFrameHybi17(data) {
104 const dataAvailable = data.length;
105 const notComplete = { closed: false, payload: null, rest: data };
106 let payloadOffset = 2;
107 if ((dataAvailable - payloadOffset) < 0) return notComplete;
108
109 const firstByte = data[0];
110 const secondByte = data[1];
111
112 const final = (firstByte & kFinalBit) !== 0;
113 const reserved1 = (firstByte & kReserved1Bit) !== 0;
114 const reserved2 = (firstByte & kReserved2Bit) !== 0;
115 const reserved3 = (firstByte & kReserved3Bit) !== 0;
116 const opCode = firstByte & kOpCodeMask;
117 const masked = (secondByte & kMaskBit) !== 0;
118 const compressed = reserved1;
119 if (compressed) {
120 throw new ERR_DEBUGGER_ERROR('Compressed frames not supported');
121 }
122 if (!final || reserved2 || reserved3) {
123 throw new ERR_DEBUGGER_ERROR('Only compression extension is supported');
124 }
125
126 if (masked) {
127 throw new ERR_DEBUGGER_ERROR('Masked server frame - not supported');
128 }
129
130 let closed = false;
131 switch (opCode) {
132 case kOpCodeClose:
133 closed = true;
134 break;
135 case kOpCodeText:
136 break;
137 default:
138 throw new ERR_DEBUGGER_ERROR(`Unsupported op code ${opCode}`);
139 }
140
141 let payloadLength = secondByte & kPayloadLengthMask;
142 switch (payloadLength) {
143 case kTwoBytePayloadLengthField:
144 payloadOffset += 2;
145 payloadLength = (data[2] << 8) + data[3];
146 break;
147
148 case kEightBytePayloadLengthField:
149 payloadOffset += 8;
150 payloadLength = 0;
151 for (let i = 0; i < 8; ++i) {
152 payloadLength <<= 8;
153 payloadLength |= data[2 + i];
154 }
155 break;
156
157 default:
158 // Nothing. We already have the right size.
159 }
160 if ((dataAvailable - payloadOffset - payloadLength) < 0) return notComplete;

Callers 1

_handleChunkMethod · 0.85

Calls 1

sliceMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…