数据帧中的掩码有效负载在哪里

时间:2019-04-25 15:46:27

标签: websocket

我们知道在websockets中数据帧如下:
Fin-RSV-OPOCDE-掩码有效载荷长度-(如果存在则扩展)-掩码
现在,如果接收到肯定被屏蔽的消息,那么在有效负载中我到底在哪里找到被屏蔽的消息呢?
如果是这样,那通常是正确的,我该如何准确读取被掩盖的有效载荷的一部分?

1 个答案:

答案 0 :(得分:0)

假设您正在编写WebSocket解析器,则需要检查长度指示器(零索引缓冲区中的字节索引1)的MSB(最高有效位)。

in the RFC在第8位(假定网络字节顺序)表示。

我写了a C WebSockets parser for the facil.io framework。查看长度和遮罩处理方式可能会有所帮助。差不多等于:

uint8_t has_mask = (((uint8_t *)bytes)[1] >> 7) & 1;

您可能会注意到the masking indicator is collected from the 8th bit (MSB) of the second byte in the buffer

掩码本身始终是有效负载中的前4个字节(尽管从技术上讲,它们不是有效负载的一部分)。即:

uint8_t mask_len = has_mask * 4; // == has_mask << 2

下一步是将剩余的有效负载与掩码(如果存在)进行异或。

祝你好运!