HardPro challengePythonJavaScriptTypeScript

WebSocket Frame Header Parser

Node.jsBuffersNetworking

Parse a WebSocket frame header from a byte array.

Returns { fin, opcode, masked, payloadLength, headerSize }.

  • byte0: fin = bit7, opcode = low 4 bits.
  • byte1: masked = bit7, len = low 7 bits.
  • If len === 126, next 2 bytes are uint16 length.
  • If len === 127, next 8 bytes are uint64 length (we'll only need ≤ 2^32-1).
  • If masked, add 4 mask bytes to header size.

Sample tests

Test #1FIN+text 5 bytes
Input: [[129,5,1,2,3,4,5]]
Output: {"fin":true,"masked":false,"opcode":1,"headerSize":2,"payloadLength":5}
Test #2Masked
Input: [[129,133,1,2,3,4,0,0,0,0,0]]
Output: {"fin":true,"masked":true,"opcode":1,"headerSize":6,"payloadLength":5}
Test #3Extended 16-bit length
Input: [[130,126,1,0]]
Output: {"fin":true,"masked":false,"opcode":2,"headerSize":4,"payloadLength":256}
Test #4Close frame
Input: [[136,0]]
Output: {"fin":true,"masked":false,"opcode":8,"headerSize":2,"payloadLength":0}
Test #5Continuation flag off
Input: [[1,3,1,2,3]]
Output: {"fin":false,"masked":false,"opcode":1,"headerSize":2,"payloadLength":3}