WD/1.0 200 OK\nFrom:wd:服务器ID@服务器域ID\nTo:wd:端侧主机编号\nVia:WD/1.0/TCP\n端侧主机IP:端口号\nCall-ID:唯一的会话ID\nCSeq:1 REGISTER <Notify> Unregistered={“tml_id”:“HT057” } </Notify>_$用c语言解析这个sip协议

时间: 2023-07-02 19:21:53 浏览: 50
这是一个 SIP 协议的响应消息,如果你想用 C 语言解析它,你可以使用一个 SIP 协议库,例如 PJSIP 或 Sofia-SIP。这些库提供了 SIP 协议解析器和 API,可以方便地解析 SIP 消息中的各个部分。以下是使用 PJSIP 库进行 SIP 协议解析的示例代码: ```c #include <pjsua2.hpp> int main() { // 创建 SIP 协议解析器 pj_status_t status = pj_init(); pj_caching_pool cp; pj_pool_t *pool = pj_pool_create(&cp.factory, "pool", 1000, 1000, NULL); pjsip_endpoint *endpoint; status = pjsip_endpt_create(&cp.factory, NULL, &endpoint); // 解析 SIP 响应消息 pjsip_rx_data rxdata; pjsip_msg *msg; pj_sockaddr_in addr; pj_bzero(&rxdata, sizeof(rxdata)); rxdata.tp_info.transport = NULL; rxdata.src_addr = addr; rxdata.rdata = {0}; rxdata.msg_info.msg_buf = (char*)"WD/1.0 200 OK\nFrom:wd:服务器ID@服务器域ID\nTo:wd:端侧主机编号\nVia:WD/1.0/TCP\n端侧主机IP:端口号\nCall-ID:唯一的会话ID\nCSeq:1 REGISTER <Notify> Unregistered={“tml_id”:“HT057” } </Notify>_$"; rxdata.msg_info.msg_len = strlen(rxdata.msg_info.msg_buf); status = pjsip_parse_msg(pool, &rxdata.msg_info, &msg); // 从 SIP 响应消息中提取信息 const pjsip_hdr *from_hdr = pjsip_msg_find_hdr(msg, PJSIP_H_FROM, NULL); const pjsip_hdr *to_hdr = pjsip_msg_find_hdr(msg, PJSIP_H_TO, NULL); const pjsip_hdr *via_hdr = pjsip_msg_find_hdr(msg, PJSIP_H_VIA, NULL); const pjsip_hdr *call_id_hdr = pjsip_msg_find_hdr(msg, PJSIP_H_CALL_ID, NULL); const pjsip_hdr *cseq_hdr = pjsip_msg_find_hdr(msg, PJSIP_H_CSEQ, NULL); // 输出提取的信息 PJ_LOG(3, ("SIP", "From: %.*s", (int)from_hdr->hvalue.slen, from_hdr->hvalue.ptr)); PJ_LOG(3, ("SIP", "To: %.*s", (int)to_hdr->hvalue.slen, to_hdr->hvalue.ptr)); PJ_LOG(3, ("SIP", "Via: %.*s", (int)via_hdr->hvalue.slen, via_hdr->hvalue.ptr)); PJ_LOG(3, ("SIP", "Call-ID: %.*s", (int)call_id_hdr->hvalue.slen, call_id_hdr->hvalue.ptr)); PJ_LOG(3, ("SIP", "CSeq: %.*s", (int)cseq_hdr->hvalue.slen, cseq_hdr->hvalue.ptr)); // 销毁 SIP 协议解析器 pjsip_endpt_destroy(endpoint); pj_pool_release(pool); pj_shutdown(); return 0; } ``` 上面的代码使用 PJSIP 库创建了一个 SIP 协议解析器,并使用 `pjsip_parse_msg` 函数解析了一个 SIP 响应消息。然后,使用 `pjsip_msg_find_hdr` 函数从 SIP 消息中提取了 From、To、Via、Call-ID 和 CSeq 等头部字段的值,并将它们输出到日志中。最后,销毁了 SIP 协议解析器。当然,这只是一个示例代码,实际的使用可能会更复杂,需要根据具体的需求进行调整。

相关推荐

SF-Port23-TCP:V=7.93%I=7%D=6/6%Time=647EE099%P=x86_64-pc-linux-gnu%r(NULL, SF:19,"\xff\xfd\x01\xff\xfd\x1f\xff\xfb\x01\xff\xfb\x03\r\r\nUsername:\x20 SF:")%r(GenericLines,31,"\xff\xfd\x01\xff\xfd\x1f\xff\xfb\x01\xff\xfb\x03\ SF:r\r\nUsername:\x20\r\nUsername:\x20\r\nUsername:\x20")%r(tn3270,37,"\xf SF:f\xfd\x01\xff\xfd\x1f\xff\xfb\x01\xff\xfb\x03\r\r\n\^@IBM-3279-4-E\xfb\ SF:^YUsername:\x20IBM-3279-4-E\x07")%r(GetRequest,6B,"\xff\xfd\x01\xff\xfd SF:\x1f\xff\xfb\x01\xff\xfb\x03\r\r\nGET\x20/\x20HTTP/1\.0\r\n\r\nUsername SF::\x20GET\x20/\x20HTTP/1\.0\r\nPassword:\x20\r\nBad\x20username\x20or\x2 SF:0password\r\nUsername:\x20")%r(RPCCheck,19,"\xff\xfd\x01\xff\xfd\x1f\xf SF:f\xfb\x01\xff\xfb\x03\r\r\n\x80\^@\^@\(r\xfe\^\]")%r(Help,2F,"\xff\xfd\ SF:x01\xff\xfd\x1f\xff\xfb\x01\xff\xfb\x03\r\r\nHELP\r\nUsername:\x20HELP\ SF:r\nPassword:\x20")%r(SIPOptions,26B,"\xff\xfd\x01\xff\xfd\x1f\xff\xfb\x SF:01\xff\xfb\x03\r\r\nOPTIONS\x20sip:nm\x20SIP/2\.0\r\nVia:\x20SIP/2\.0/T SF:CP\x20nm;branch=foo\r\nFrom:\x20<sip:nm@nm>;tag=root\r\nTo:\x20<sip:nm2 SF:@nm2>\r\nCall-ID:\x2050000\r\nCSeq:\x2042\x20OPTIONS\r\nMax-Forwards:\x SF:2070\r\nContent-Length:\x200\r\nContact:\x20<sip:nm@nm>\r\nAccept:\x20a SF:pplication/sdp\r\n\r\nUsername:\x20OPTIONS\x20sip:nm\x20SIP/2\.0\r\nPas SF:sword:\x20\r\nBad\x20username\x20or\x20password\r\nUsername:\x20From:\x SF:20<sip:nm@nm>;tag=root\r\nPassword:\x20\r\nBad\x20username\x20or\x20pas SF:sword\r\nUsername:\x20Call-ID:\x2050000\r\nPassword:\x20\r\nBad\x20user SF:name\x20or\x20password\r\nUsername:\x20Max-Forwards:\x2070\r\nPassword: SF:\x20\r\nBad\x20username\x20or\x20password\r\nUsername:\x20Contact:\x20< SF:sip:nm@nm>\r\nPassword:\x20\r\n\xe7\x94\xa8\xe6\x88\xb7\xe8\xa2\xab\xe7 SF:\xa6\x81\xe7\x94\xa8,\x20\xe8\xaf\xb760\xe7\xa7\x92\xe5\x90\x8e\xe9\x87 SF:\x8d\xe8\xaf\x95\.\r\nUsername:\x20\r\nUsername:\x20")%r(NCP,49,"\xff\x SF:fd\x01\xff\xfd\x1f\xff\xfb\x01\xff\xfb\x03\r\r\nDmdT\^@\^@\^@\x08\x20\x SF:08\x08\x20\x08\x08\x20\x08\x08\x20\x08\x08\x20\x08\x08\x20\x08\x08\x20\ SF:x08\x08\x20\x08\x08\x20\x08\x08\x20\x08\^@\^@\^@\^A\^@\^@\^@\^@\^@")是什么疑似

最新推荐

recommend-type

setuptools-41.0.0-py2.py3-none-any.whl

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

Google Cloud Storage(使用gsutil下载)

Google Cloud CLI安装包GoogleCloudSDKInstaller.exe
recommend-type

setuptools-18.3.zip

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

罗兰贝格_xx业务计划与控制体系最终报告gltp.pptx

罗兰贝格_xx业务计划与控制体系最终报告gltp.pptx
recommend-type

基于JSP医院在线挂号管理系统源码.zip

这个是一个JSP医院在线挂号管理系统,管理员角色包含以下功能:管理员登录,医生用户管理,修改密码,科室类别信息管理,医生信息管理,添加医生信息,查询医生信息,注册用户管理,黑名单管理,预约信息管理,查询预约信息,医生预约查询,预约信息统计,科室汇总统计等功能。患者角色包含以下功能:查看首页,患者登录,修改密码,修改个人资料,查看预约信息,查看医生信息,查看科室分类,医生查询,预约医生等功能。… 本项目实现的最终作用是基于JSP医院在线挂号管理系统 分为4个角色 第1个角色为管理员角色,实现了如下功能: - 修改密码 - 医生信息管理 - 医生用户管理 - 医生预约查询 - 查询医生信息 - 查询预约信息 - 注册用户管理 - 添加医生信息 - 科室汇总统计 - 科室类别信息管理 - 管理员登录 - 预约信息管理 - 预约信息统计 - 黑名单管理
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。