`

Osip2和eXosip协议栈的简析

    博客分类:
  • SIP
阅读更多

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》一文。

分享到:
评论

相关推荐

    AXX_AIAPI-1.0.5-py3-none-any.whl.zip

    AXX_AIAPI-1.0.5-py3-none-any.whl.zip

    Acquisition-4.12-cp310-cp310-manylinux_2_5_i686.whl.zip

    Acquisition-4.12-cp310-cp310-manylinux_2_5_i686.whl.zip

    Acquisition-4.13-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    Acquisition-4.13-cp37-cp37m-manylinux_2_5_x86_64.whl.zip

    gbkfonts.zip

    将TTF 汉字字体生成可供 TeX 使用的汉字 Type1 字体的转换软件。是使用Texlive运行Ctex模板的准备工作。

    美国大学生数学建模竞赛(MCMICM)

    美国大学生数学建模竞赛(MCMICM)。

    MONSTER PACK VOL 5 1.01怪物包第5卷游戏模型资源包unitypackage项目

    MONSTER PACK VOL 5 1.01怪物包第5卷游戏模型资源包unitypackage项目 支持Unity版本2018.4.2或更高 包含在 Monster Full Pack 第 1 卷中*** 该包当前包含 5 个怪物。 包括: Bufomorph Drackmahre Morphorrid Pardathrox Perderos

    二维拓扑优化设计的后处理和平滑清晰几何图形的提取

    拓扑优化结果提取、设计结果CAD重构、边界提取、设计制造一体化; 二维拓扑优化设计的后处理和平滑清晰几何图形的提取; 适用于SIMP法、水平集法等典型拓扑优化方法。

    ASP.NET《数据库原理及应用技术》课程指导平台的开发(源代码+参考文章).zip

    ASP.NET《数据库原理及应用技术》课程指导平台提供一个交互性强、功能丰富的在线学习环境,以促进数据库原理及应用技术的教学与学习。 在开发过程中,平台严格遵循软件工程的思想,从系统需求分析、概要设计、详细设计到具体的编码实现和后期的代码优化、功能测试,都经过了精心的规划和实施。源代码是平台开发的核心,它采用了ASP.NET技术,确保了平台的稳定性和可扩展性。同时,源代码也体现了良好的编程规范和风格,易于理解和维护。

    自然语言,数据清洗后存储成jsonl格式文件

    自然语言,数据清洗后存储成jsonl格式文件

    大创大纲资料.txt-大创

    大创大纲资料.txt-大创

    AX3_Email-1.0.6-py3-none-any.whl.zip

    AX3_Email-1.0.6-py3-none-any.whl.zip

    AX3003P-0.1-py3-none-any.whl.zip

    AX3003P-0.1-py3-none-any.whl.zip

    小学Scratch游戏化教学的实践研究-以泰州市Y小学为例

    随着智能教育时代的到来,计算机教育击彴祀勺中小学生必不可少的课程。我国陆续出台的文件,均指向鼓励在基础教育阶段开展编程课程。Scratch软件作为一种新型编程工具,以其简单易学、趣味性强等特点深受广大青少年丿谨i喜爱。但在日常教学中发现,传统讲授式教学方式不能长期维待学生学习兴趣,妇比以往学习效果大打折扣。2022年出版的《义务 教育信息科技课程标准》中明确指出,要求教育工作者创新教学方式,创设真实情境以提高 学生学习参与度。游戏化教学这种创新型教学方式, 在与各学科良好的结合效果下,也逐渐进入信息教育者的视野。因此本研究旨在将游戏化元素融入Scratch课堂,探究 Scratch游戏化教学设计一般流程在行动中不断峦进, 以期得到有效实施的策略和建议。 通过三轮行动研究,验证了小学Scratch游戏化教学的一般流程。同时总结出游戏化教学 应用策略,包括在游戏化教学设计时需要合理制定游戏规则,以控制课堂纪律和给予学生适当激励;明确小组分工,学生各司其职,在组内合作和组间竞争中培养学生合作精神;采用多元化评价方式,综合运用纸笔测试和个性创作等方法自评与他评相结合的方式,增强学 生自主学习能

    AccessControl-6.1-cp38-cp38-manylinux_2_5_x86_64.whl.zip

    AccessControl-6.1-cp38-cp38-manylinux_2_5_x86_64.whl.zip

    纯CSS打造相册效果项目完整源码

    纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS打造相册效果项目完整源码纯CSS

    Acquisition-4.10-cp36-cp36m-manylinux_2_17_aarch64.whl.zip

    Acquisition-4.10-cp36-cp36m-manylinux_2_17_aarch64.whl.zip

    模板方法模式(TemplateMethod)原理图

    模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体方法:在抽象类中实现算法中不变的部分,这些方法通常是私有的,以避免子类对其进行修改。 抽象方法:在抽象类中声明一些抽象方法,这些方法是为了在子类中实现特定于子类的步骤。 钩子:可以提供一些默认实现的方法,这些方法通常为空或者包含默认逻辑,子类可以选择性地覆盖这些方法。 不变性:为了防止子类改变模板方法中的算法结构,可以将模板方法定义为 final,这样确保了算法结构的不变性。 总的来说,模板方法模式的目的是通过让子类重写某些步骤来增加新功能,同时保持算法的结构不变。这种模式在Java等面向对象的语言中非常常见,它利用了多态性来实现灵活的设计,使得子类可以在不改变算法结构的情况下,重定义算法的某些特定步骤。

    Acquisition-4.10-cp36-cp36m-manylinux_2_5_x86_64.whl.zip

    Acquisition-4.10-cp36-cp36m-manylinux_2_5_x86_64.whl.zip

    软考-软件设计师-笔记.md

    软考-软件设计师-笔记.md

    智慧农场的信息化系统建设

    2015年3月5日上午十二届全国人大三次会议上,李克强总理在政府工作报告中首次提出“互联网+”行动计划,制定“互联网+”行动计划。 目前提倡的现代农业精细化生产与物联网技术结合有着巨大的市场需求空间,以感知为前提,人与人、人与物、物与物全面互联的网络平台构筑成功,现代农业悄然步入物联网时代,智慧农业大局初现。 2020年江西首个万亩智慧农场发布暨智能农业装备全程机械化无人作业演示活动,证明万亩稻田只要26个职业农民就能够实现全部生产种植,得到媒体大量关注。引起各界重视

Global site tag (gtag.js) - Google Analytics