c++ SAP(RFC 2974)和SDP(RFC 2327)头部大小

68bkxrlz  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(133)

我正在学习c(++),并试图实现SAP和SDP公告协议。目前,我正在遵循RFC和Git Hub的一些代码(如gestream和mumudvb)。在那里我可以看到,在SAP头之后,在SDP文本之前有8个字节的“头”。我可以在RFC中找到这样的说明,或者至少我不理解这样的事情。这是我第一次尝试从RFC中实现一些东西,我对这个“头”有点困惑。
对不起,如果我的问题看起来很愚蠢,但我想理解它。
谢谢
我已经检查了实现的SAP服务和RFC,但我找不到为什么那里有8个字节。

vs3odd8k

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在它前面的内容之后。

相关问题