(data)
| 101 | } |
| 102 | |
| 103 | function 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; |
no test coverage detected
searching dependent graphs…