我正在学习c(++),并试图实现SAP和SDP公告协议。目前,我正在遵循RFC和Git Hub的一些代码(如gestream和mumudvb)。在那里我可以看到,在SAP头之后,在SDP文本之前有8个字节的“头”。我可以在RFC中找到这样的说明,或者至少我不理解这样的事情。这是我第一次尝试从RFC中实现一些东西,我对这个“头”有点困惑。对不起,如果我的问题看起来很愚蠢,但我想理解它。谢谢我已经检查了实现的SAP服务和RFC,但我找不到为什么那里有8个字节。
vs3odd8k1#
我们需要https://datatracker.ietf.org/doc/html/rfc2974第5节第6页:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | V=1 |A|R|T|E|C| auth len | msg id hash | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | : originating source (32 or 128 bits) : : : +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | optional authentication data | : .... : *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* | optional payload type | + +-+- - - - - - - - - -+ | |0| | + - - - - - - - - - - - - - - - - - - - - +-+ | | | : payload : | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
我们还需要来自mumudvb 2 sap.h的零件
#define SAP_HEADER4_BYTE0 0x20 /**00100000 : version 1 and nothing else*/ #define SAP_HEADER4_BYTE1 0x00 /**No auth header*/ #define SAP_HEADER6_BYTE0 0x30 /**00110000 : version 1 and IPv6*/ #define SAP_HEADER6_BYTE1 0x00 /**No auth header*/ #define SAP_HEAD_LEN4 8 #define SAP_HEAD_LEN6 20
以及sap.c www.example.com中https://github.com/braice/MuMuDVB/blob/mumudvb2/src/sap.c#L267与ipv4处理相关的部分:
sap_message4->buf[0]=SAP_HEADER4_BYTE0; sap_message4->buf[1]=SAP_HEADER4_BYTE1; //Hash of SAP message: see end of this function sap_message4->buf[2]=0; sap_message4->buf[3]=0; [...] log_message( log_module, MSG_DEBUG,"sap sending ipv4 address : %s (binary : 0x%x)\n",sap_p->sap_sending_ip4, ip4); memcpy (sap_message4->buf + 4, &ip4, 4); [...] sprintf(temp_string,"application/sdp"); if(channel->socketOut4) { memcpy(sap_message4->buf + SAP_HEAD_LEN4, temp_string, strlen(temp_string)); sap_message4->len=SAP_HEAD_LEN4+strlen(temp_string); sap_message4->buf[sap_message4->len]=0; sap_message4->len++;
前4个字节是| V=1 |A|R|T|E|C| auth len | msg id hash |,接下来的4个字节是originating source (32 [...] bits。话虽如此,我完全理解你的困惑。它是协议的一部分,设置为application/sdp mime类型的payload type在它前面的内容之后。
| V=1 |A|R|T|E|C| auth len | msg id hash |
originating source (32 [...] bits
payload type
1条答案
按热度按时间vs3odd8k1#
我们需要https://datatracker.ietf.org/doc/html/rfc2974第5节第6页:
我们还需要来自mumudvb 2 sap.h的零件
以及sap.c www.example.com中https://github.com/braice/MuMuDVB/blob/mumudvb2/src/sap.c#L267与ipv4处理相关的部分:
前4个字节是
| V=1 |A|R|T|E|C| auth len | msg id hash |
,接下来的4个字节是originating source (32 [...] bits
。话虽如此,我完全理解你的困惑。它是协议的一部分,设置为application/sdp mime类型的
payload type
在它前面的内容之后。