当前位置:  开发笔记 > 程序员 > 正文

在C中解析SIP数据包

如何解决《在C中解析SIP数据包》经验,为你挑选了0个好方法。

我正在尝试解析SIP数据包并从中获取一些信息.更具体地说,数据包看起来像这样

REGISTER sip:open-ims.test SIP/2.0
Via: SIP/2.0/UDP 192.168.1.64:5060;rport;branch=z9hG4bK1489975971
From: ;tag=1627897650
To: 
Call-ID: 1097412971
CSeq: 1 REGISTER
Contact: ;+sip.instance=""
Authorization: Digest username="alice@open-ims.test", realm="open-ims.test", nonce=" ", uri="sip:open-ims.test", response=" "
Max-Forwards: 70
User-Agent: UCT IMS Client
Expires: 600000
Supported: path
Supported: gruu
Content-Length: 0

现在,从该数据包我需要提取以下内容:

"From:"之后的值(在本例中)

"联系人:"之后的值(在这种情况下)

"用户名"后面的值(在本例中alice@open-ims.test)

到目前为止我的代码是这样的

char * tch;
      char * saved;                    
      tch = strtok (payload,"<>;");
      while (tch != NULL)
      { 
        int savenext = 0;              
        if (!strcmp(tch, "From: "))     
        {                              
          savenext = 1;                
        }                              

        tch = strtok (NULL, "<>;");
        if (savenext == 1)             
        {                              
          saved = tch;                 
        }                              
      }
      printf ("### SIP Contact: %s ###\n", saved);  
        }
    }

其中有效载荷包含如上所述的分组.

但是,当我运行我的程序时,它将导致分段错误.奇怪的是,如果我在strtok中使用字符"<>;:"并在strcmp中使用值"sip"消息将成功解析并保留保存的值.但我需要解析所有三个上限值.

请问一个sip库可以帮助我解决我的问题吗?

提前致谢

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有