Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高。
eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。
一、介绍
Osip2
是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高。但缺点也
很明显,首先就是可用性差,没有很好的api封装,使得上层应用在调用协议栈时很破碎;其次,只做到了transaction层次的协议过程解析,缺少
call、session、dialog等过程的解析,这也增加了使用的难度;再次,缺少线程并发处理的机制,使得它的处理能力有限。
eXosip
是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。eXosip增加了call、dialog、
registration、subscription等过程的解析,使得实用性更强。但是eXosip局限于UA的实现,使得它用于registrar、
sip server等应用时极其不容易。另外,它并没有增加线程并发处理的机制。而且只实现了音频支持,缺少对视频和其它数据格式的支持。
综合来说,Osip2加上eXosip协议栈仍然是个实现Sip协议不错的选择。当然需要根据不同的需求来增加更多的内容。
二、Osip2协议栈的组成
Osip2协议栈大致可以分为三部分:sip协议的语法分析、sip协议的过程分析和协议栈框架。
1、Sip协议的语法分析:
主
要是osipparser2部分,目前支持RFC3261和RFC3265定义的sip协议消息,包括INVITE、ACK、OPTIONS、
CANCEL、BYE、SUBSCRIBE、NOTIFY、MESSAGE、REFER和INFO。不支持RFC3262定义的PRACK。
遵循RFC3264关于SDP的offer/answer模式。带有SDP的语法分析。
支持MD5加解密算法。支持Authorization、www_authenticate和proxy_authenticate。
2、Sip协议的过程分析:
主要是osip2部分,基于RFC3261、RFC3264和RFC3265的sip协议描述过程,围绕transaction这一层来实现sip的解析。
Transaction
是指一个发送方和接收方的交互过程,由请求和应答组成。请求分为Invite类型和Non-Invite类型。应答分为响应型的应答和确认型的应答。响应
型的应答是指这个应答仅代表对方收到请求。请求经过处理后都必须返回确认型的应答。响应型的应答有1xx,确认型的应答包括2xx、3xx、4xx、
5xx和6xx。一个transaction由一个请求和一个或多个响应型应答、一个确认型应答组成。
Transaction根据请求的不同和发送/接收的不同可以分为四类:ict、nict、ist和nist。
Ict是指Invite client transaction,就是会话邀请的发起方。
Nict是指Non-Invite client transaction,是指非邀请会话的发起方。
Ist是指Invite server tranaction,是指会话邀请的接收方。
Nist是指Non-Invite server transaction,是指非邀请会话的接收方。
每
种类型的transaction都有自己相应的状态机,Osip2协议栈根据状态机来处理所有的sip事件,所以这部分就是整个协议栈的核心。但是因为
Osip2只做到transaction这一层,所以它可以忽略掉call、registration等应用的复杂性,显得相当简单,这就使得需要使用它
的应用必须要自己处理应用的逻辑。必须注意的一点是,transaction的资源在Osip里是由协议栈负责释放的,但是在Osip2里改成由使用的应
用负责释放。
3、协议栈框架:
框架并不是指代码的某一部分,而是指它的构成形式。主要有三部分:底层套接字接收/发送,模块间通信管道,上层调用api接口。
Osip2并不实现底层套接字的接收/发送,由eXosip实现,现在只支持UDP的链路连接。
模
块间的通信管道包括:transaction的消息管道、jevent的消息管道。Transaction的消息管道是驱动其状态机的部件,通过不断的接
收来自底层套接字的远端信令,或者来自上层调用的指令,根据上述的状态机制来驱动这个transaction的运转。Jevent的消息管道是
eXosip实现的,用于汇报底层事件,使得调用程序能处理感兴趣的事件。
上层调用的api接口大致有两类:sip协议的调用接口和sdp协议的调用接口。EXosip封装了大部分的sip协议调用接口,一般来说都不需要直接调用osip2的接口函数。接口函数很多,在这里就不详述了,函数定义请参照源代码部分的注释。
三、eXosip协议栈的分析
eXosip是Osip2协议栈的封装和调用。它实现了作为单个sip终端的大部分功能,如register、call、subscription等。
EXosip使用UDP socket套接字实现底层sip协议的接收/发送。并且封装了sip消息的解释器。
EXosip
使用定时轮循的方式调用Osip2的transaction处理函数,这部分是协议栈运转的核心。透过添加/读取transaction消息管道的方式,
驱动transaction的状态机,使得来自远端的sip信令能汇报给调用程序,来自调用程序的反馈能通过sip信令回传给远端。
EXosip增加了对各个类型transaction的超时处理,确保所有资源都能循环使用,不会被耗用殆尽。
EXosip使用jevent消息管道来向上通知调用程序底层发生的事件,调用程序只要读取该消息管道,就能获得感兴趣的事件,进行相关的处理。
EXosip
里比较重要的应用有j_calls、j_subscribes、j_notifies、j_reg、j_pub、osip_negotiation和
authinfos。J_calls对应呼叫链表,记录所有当前活动的呼叫。J_reg对应注册链表,记录所有当前活动的注册信息。
Osip_negotiation记录本地的能力集,用于能力交换。Authinfos记录需要的认证信息。
四、总结
本文是从使用的角度去阐述分析Osip2和eXosip协议栈,并不涉及很多的细节,需要进一步了解协议栈的结构和实现,可参考《osip》一文。
分享到:
相关推荐
总之,osip和eXosip协议栈是SIP应用开发的强大工具,其开源特性鼓励开发者进行深入研究和创新。4.1.0版本不仅提供了最新的功能,还保持了对旧版本的兼容性,使得现有项目能够轻松升级。通过学习和利用这些协议栈,...
osip2是OSI协议栈的实现,专门针对SIP(Session Initiation Protocol)协议,用于控制多媒体通信会话,如语音和视频通话。它提供了构建SIP消息、解析收到的消息以及管理会话的基本功能。eXosip2是osip2的一个增强...
通过深入研究osip2和exosip2的源码,开发者可以深入了解SIP协议的实现细节,提升对SIP通信的理解,从而更好地开发和维护SIP相关的应用程序。同时,源码学习也可以帮助开发者定制自己的SIP栈,满足特定需求。
在IT行业中,网络通信协议是实现设备间交互的关键部分,而oSIP2(Open Session Initiation Protocol 2)和eXosip2是SIP(Session Initiation Protocol)栈的两个实现,广泛应用于VoIP(Voice over Internet Protocol...
1. **协议栈选择**:选择使用eXosip协议栈,因为它提供了更简单的接口和更好的易用性。 2. **消息处理**:利用eXosip提供的API来处理SIP消息,包括消息的接收、解析和发送。 3. **用户界面设计**:设计直观的用户...
Exosip协议栈是一款专为实现SIP(Session Initiation Protocol)通信而设计的开源库。SIP是一种应用层控制...在实际开发中,应充分了解SIP协议的原理,并熟练掌握Exosip协议栈的使用方法,以确保应用的稳定性和效率。
- 成功编译后可得到osip2.dll和osip2.lib。 #### 六、使用oSIP开发库 1. **包含头文件**: - 在项目中包含oSIP的头文件。 2. **链接库文件**: - 在项目的链接参数中添加osipparser2.lib和osip2.lib。 #### ...
- **编译完整的oSIP协议栈库**: 使用类似的方法,将`src`目录下的`osip`目录中的文件添加到项目中,并将`include`目录下的`osip`目录复制到默认的包含路径下,这样可以编译出`osip2.dll`和`osip2.lib`。 **3. 使用...
对于软电话开发者来说,理解和掌握SIP协议及eXosip协议栈的使用是至关重要的。这不仅可以帮助他们快速构建功能完善的VoIP应用程序,而且可以为他们提供一个灵活的框架,以便在未来的需求变更和技术演进中进行扩展和...
oSIP协议栈(及eXoSIP,Ortp等)使用入门.txt OSIP协议栈使用入门(续一:纯协议栈逻辑分析).txt oSIP协议桟浅析.doc osip邮件组 mail.rar RFC2327(sdp)中文.doc RFC3263(sip)中文.doc RFC3372(sip)中文.pdf RFC3621...
exosip2 协议栈是 Osip2 的一个扩展协议集,它部分封装了 Osip2 协议栈,使得它更容易被使用。exosip 库的开发目的在于隐藏 sip 协议建立多媒体会话的复杂性。通过使用 exosip,我们可以避免直接使用 osip 带来的...
OSIP2协议栈的框架主要由三部分构成:底层的套接字接收和发送功能是由其他库(如eXosip)来实现的,目前只支持UDP连接;模块间通信管道包括transaction消息管道和jevent消息管道,它们负责驱动事务状态机的运转和...
osIP和exosIP是两个重要的SIP(Session Initiation Protocol)协议栈,它们在VoIP(Voice over Internet Protocol)和多媒体通信领域有着广泛应用。在Visual Studio 2008(VS2008)这样的开发环境中,这些库可以帮助...
【Osip2与eXosip协议栈解析】 Osip2是一个开源的SIP(Session Initiation Protocol)协议栈,采用C语言编写,以其简洁、高效而受到关注。该协议栈专注于SIP消息的底层解析,因此在性能上表现优秀。然而,Osip2在...
oSIP协议栈(及eXoSIP,Ortp等)使用入门.doc osip协议栈浅析.doc sip介绍.doc OSIP协议栈使用入门(续一:纯协议栈逻辑分析) RFC2327(sdp)中文.doc exoSip开发手册.pdf osip源代码框架详解.doc 一个用eXosip实现的UAC...
oSIP 协议栈的设计理念是-modularization,所有的组件都是独立的模块,可以方便地进行维护和升级。 oSIP 协议栈的结构可以分为四个主要模块:状态机模块、解析器模块、工具模块和网络模块。每个模块都有其特定的...