我们知道在websockets中数据帧如下:
Fin-RSV-OPOCDE-掩码有效载荷长度-(如果存在则扩展)-掩码
现在,如果接收到肯定被屏蔽的消息,那么在有效负载中我到底在哪里找到被屏蔽的消息呢?
如果是这样,那通常是正确的,我该如何准确读取被掩盖的有效载荷的一部分?
答案 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
下一步是将剩余的有效负载与掩码(如果存在)进行异或。
祝你好运!