reSIProcate SIP协议栈的使用
&& 如何让reSIProcate支持对话外(out of dialog INFO)的INFO
好久没有写过代码了,最近又开始搞代码,感觉挺好。之前Java搞得比较多,最近要搞SIP协议栈,从oSIP切换成reSIProcate,基于C++的。
总的感觉,reSIProcate没有oSIP简单易用,但上手之后,发现oSIP做得还是很不错的,跨平台、可扩展性强。
至于具体怎么用,可以参考reSIProcate现成的例子。如果使用VS,打开reSIProcate_9_0.sln后,里面有示例工程“basicCall”,这个例子虽小,但对UAS、UAC两种模式的使用,做了很好的演示,同时这个例子中UAC如何发送对话外的消息,UAS如何接收对话外的消息,都给了示例。把这个例子彻底搞透了,基于reSIProcate做一般UAS、UAC的开发,已经足够。
当然,上面的例子,只是一小部分的示例代码,SIP其实很庞大,reSIProcate对SIP规范实际上是非常好的。如一些基本消息的处理、SDP的解析和构造等,支持得也非常好。一开始搞reSIProcate我还担心不知道怎么搞,等我找到自带的很多示例代码后,发现reSIProcate真的做的非常完善,在resiprocate-1.6\resip\stack\test这个目录下,有很多示例代码,我能想到的一些常见问题,在这里面都可以找到示例用法,参考着做就可以了。
另外,在resiprocate-1.6\resip\dum\doc下,你可以找到很多有价值的文档和图示,对大家应该有帮助。我自己没有怎么看过,说实话我搞SIP已经有一年多了,对SIP的基本知识已经有足够的认识,里面的有些图示就是基于SIP的消息处理流程来输出reSIProcate内部函数处理的流程。如果你对SIP有基本认识,看那个图还是比较轻松的。
总的来说,SIP协议栈的切换还是比较轻松的,不过中间也出现一点小问题,就是reSIProcate默认不支持对话外的INFO(out of dialog INFO),当然也就不支持对话外INFO的响应消息了。这个问题还是让我郁闷了半天,一开始一直以为是配置的原因,后来搞了半天发现不是那么回事,后来又找同事了解了一下,据说RFC内对INFO的描述非常模糊,到底要不要支持对话外的INFO,RFC也没有明确指出,所以reSIProcate就不支持对话外的INFO。
后来,我又单步跟踪了一下代码,进一步确认了我的观点,reSIProcate确实不支持对话外的INFO,如果要让reSIProcate支持对话外的INFO,只能自己去修改代码了。我尝试了,改动三四处即可,reSIProcate即可以支持对话外的INFO了,我测试了一下,效果挺好,不过担心会不会有内存泄漏。
修改的文件不多,不过都在公司,如果有需要的朋友,可以给我发站内消息。我可以在家里修改好然后把文件上传作为附件。
另外,如果你有在Linux上使用reSIProcate的需要,编译前先运行 ./configure,其中的大部分选项都是reSIProcate的一些高级特性,建议你选NO。然后运行 make all 即可编译。如果你在32位的Linux上运行,可能还会遇到一个未定义的EOF错误,这个问题,你可以在出错函数的上方加上一句 #define EOF -1 ,就可以解决对应的编译错误了。
我个人还是比较喜欢在Linux上做一些代码测试,比如编译出来的BasicCall在Windows上无法抓包分析,这个比较痛苦。当然,如果要调试程序,还是VS来得方便,所以像reSIProcate还是比较好的,支持跨平台,Windows、Linux上都可以测试,非常方便。
分享到:
相关推荐
### 几种开源SIP协议栈对比 随着VoIP(Voice over Internet Protocol)技术和下一代网络(NGN)的发展,通信领域正经历从H.323标准向SIP(Session Initiation Protocol)标准的转变。SIP作为一种更简单、更灵活的...
ReSIProcate协议栈是一款强大的开源通信协议软件,主要用于实现SIP(Session Initiation Protocol)协议。SIP是一种用于控制多媒体通信会话(如语音和视频通话)的应用层控制协议,广泛应用于VoIP(Voice over ...
通过深入分析和理解这个“基于sip协议栈实现的客户端代理源码”,开发者可以学习到如何使用SIP协议栈创建自己的VoIP应用,掌握SIP协议的实战运用,这对于在网络通信、实时通信领域工作的人来说是一项宝贵技能。...
ReSIProcate是一个强大的开源SIP(Session Initiation Protocol)协议栈,源自VOCAL技术公司的功能丰富的SIP实现。SIP是一种互联网协议,用于建立、修改和终止多媒体通信会话,如语音通话、视频会议或即时消息。在...
reSIProcate是一个开源的SIP(Session Initiation Protocol)协议栈,它提供了实现多媒体回话和多媒体会议的核心功能。SIP是一种应用层控制协议,用于初始化、管理和终止多媒体通信,如语音通话、视频会议等。这个...
Resiprocate是一款开源的SIP(Session Initiation Protocol)协议栈,专为构建实时通信应用程序而设计。它以其高效性和灵活性著称,在电信和互联网通信领域有广泛的应用场景。本篇文章将深入探讨Resiprocate的源代码...
符合28181,resiprocate协议栈message报警客户端程序
ReSIProcate最开始起源于Vocal,由于Vocal开始只支持rfc3254,为了支持最新的rfc3261,ReSIProcate诞生了,但现在,ReSIProcate已经成为一个独立SIP协议栈了,它十分稳定,并且很多商业程序都在使用。 SVN : ...
ReSIProcate最开始起源于Vocal,由于Vocal开始只支持rfc3254,为了支持最新的rfc3261,ReSIProcate诞生了,但现在,ReSIProcate已经成为一个独立SIP协议栈了,它十分稳定,并且很多商业程序都在使用。 SVN : ...
ResIProcate是一个开源的SIP(Session Initiation Protocol)栈,用于开发VoIP(Voice over IP)和其他基于SIP的应用。它是一个高度可配置且功能丰富的软件库,旨在为开发者提供构建SIP应用程序的基础。SIP是一种...
resiprocate库的核心就是对SIP协议的实现,它包含了解析和生成SIP消息的功能,以及处理SIP事务和路由。 **3. 源码结构** resiprocate源码通常包含多个子模块,如协议解析器、事务处理、消息构建、注册代理、用户...
2. **resiprocate库**:Resiprocate是一个开源的SIP栈,提供了实现SIP协议所需的全部组件,包括用户代理、注册服务器、代理服务器等。开发者可以使用它来构建自己的SIP应用。 3. **开源软件**:Resiprocate遵循特定...
Resiprocate是一款开源的SIP(Session Initiation Protocol)栈,用于开发VoIP和多媒体通信应用。SIP是一种互联网协议,主要用于控制多媒体通信会话,如语音和视频通话。Resiprocate提供了完整的SIP服务器、客户端和...
在本文中,我们将深入分析 resip 的源代码,了解其架构设计、协议栈的层次结构、SIP 消息的组成元素、Resiprocate 的设计理念等方面。 首先,让我们了解 SIP 协议的层次结构。SIP(Session Initiation Protocol)是...
### Resiprocate日志解析:理解SIP协议的基础 #### 概述 在本篇文章中,我们将通过解析一份来自Resiprocate客户端的日志来深入理解SIP(Session Initiation Protocol)协议的工作原理。这份日志对于初学者来说是...
reSIProcate是一款开源的SIP(Session Initiation Protocol)协议栈,完全遵循了IETF制定的RFC 3261标准。SIP是一种互联网协议,主要用于控制多媒体通信会话,如语音和视频通话、即时消息以及在线游戏等。...
resiprocate-1.7.tarresiprocate-1.7.tarresiprocate-1.7.tarresiprocate-1.7.tarresiprocate-1.7.tarresiprocate-1.7.tarresiprocate-1.7.tar
JsSIP是一个强大的JavaScript库,专门用于构建WebRTC支持的SIP(Session Initiation Protocol)客户端。这个"jssip-web-client.zip"压缩包包含了构建一个基于Web的SIP电话客户端所需的所有资源,特别是针对版本4的...
在深入研究resiprocate-1.5源代码时,你将能够掌握SIP协议的实践运用,提升网络通信和服务器管理的专业技能。这个源代码项目不仅是开发VoIP应用的起点,也是进一步研究和改进现有SIP技术的宝贵资源。
文档中还提到,SIP协议栈的开源项目如VOCAL、osip、ReSIProcate、mjsip等为开发者提供了多种选择,可以加速SIP终端的开发进程。基于Windows、Linux和Android等不同平台的多种SIP终端软件,如X-Lite、sipXphone、...