没有合适的资源?快使用搜索试试~ 我知道了~
osip2协议栈原理分析以及总结
需积分: 50 17 下载量 132 浏览量
2013-04-13
16:31:41
上传
评论
收藏 534KB DOC 举报
温馨提示
试读
14页
linphone项目中sip协议层osip2协议分析
资源推荐
资源详情
资源评论
OSIP2协议栈学习总结
1、Osip2协议栈介绍
Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它
具有短小简洁的特点。它的核心特性为sip协议数据的解析和事务的管理。数据包的收发、
RTP 流的处理等,并不在Osip2中完成。应用程序使用Osip 时需要单独去实现这些模块。
Osip2的缺点是没有很好的上层api封装,使得上层应用在调用协议栈时很破碎;只做到了
transaction层次的协议过程解析,缺少call、session、dialog等过程的解析,这也增加
了使用的难度。
2、Osip2 协议栈体系结构
OSIP主要由解析模块、工具模块和状态机模块构成,其核心是状态机模块.OSIP结
构如图所示.
2.1 语法解析器
libosip库源码src/osipparser2为解析器源码,OSIP解析模块主要用于对SIP请求与
响应进行封装与解析处理,分为SIP解析、URL解析与SDP解析完成对sip协议相关字段的
构造和解析。比如,将紧凑的存储于内存buffer中的sip 数据解析到清晰定义的数据结构体
中,每一个字段代表sip协议中有意义的一个头域。。SIP解析主要负责SIP标题头的解析与
封装。SDP解析除了对数据包中SDP会话各类型进行解析外还包含对各类型的初始化和释
放操作以及对整个SDP包的一些基本操作。URL解析主要负责对SIP URI中包含的
host,port,username, password等信息进行解析与设置。
2.2 有限状态机
SIP状态机模块负责完成对某个事务状态的维持及处理。并且在特定的状态下触发相应
的事件或者回调函数。OSIP协议栈的状态机主要分为4类:INVITE客户端事务ICT,非
INVITE客户端事务NICT,INVITE服务器端事务IST,非INVITE服务器端事务NIST。
2.3 工具模块
OSIP工具模块分为对话管理工具和SDP协商工具。对话管理工具使用户能够根据
RFC3261对dialog进行操作,建立相应dialog结构体。并通过对dialog结构体的添加、
删除、查询实现对话管理。SDP协商工具负责向SIP终端用户提供协商codec等功能。
2.4 协议栈框架
框架并不是指代码的某一部分,而是指它的构成形式。主要有三部分:底层套接字接
收/发送,模块间通信管道,上层调用api接口。
Osip2并不实现底层套接字的接收/发送,由eXosip实现,现在只支持UDP的链路连
1
SIP 解析
SRL 解析
SDP 解析
有 限 状 态
机
SDP 协商工具
DIALOG 工具
应用程序
状态机模块
接。
模块间的通信管道包括:transaction的消息管道、jevent的消息管道。
Transaction的消息管道是驱动其状态机的部件,通过不断的接收来自底层套接字的远端
信令,或者来自上层调用的指令,根据上述的状态机制来驱动这个transaction的运转。
Jevent的消息管道是eXosip实现的,用于汇报底层事件,使得调用程序能处理感兴趣的事
件。
上层调用的api接口大致有两类:sip协议的调用接口和sdp协议的调用接口。EXosip
封装了大部分的sip协议调用接口,一般来说都不需要直接调用osip2的接口函数。接口函
数很多,在这里就不详述了,函数定义请参照源代码部分的注释。
2.5 osip2与sip协议层次的关系
LIBOSIP2开发库层次关系
2
3、OSIP 关键数据结构及其说明
3.1 osip结构体定义
从该结构体的定义可以看出,osip主要有两部分构成,
其一是事务链表,各个状态的事务的事件都挂载在该链表上;
其二是回调函数,回调函数中前三个是内部使用,也就是osip
库在处理消息的过程中,如果匹配某个状态,就执行对应的
回调函数。用户可以使用这些回调函数显示一些状态,处理
一些错误等。最后一个是消息发送回调函数,也就是osip需
要发送sip数据包时,就是通过该回调函数完成的。
3.2 transition_t:transition_t结构体定义了事务
state 为事务的状态,type 是事务对应事件的类型,method 为函数指针,定义了
当前状态收到type 类型事件后应该执行的动作。next 和parent 为构成链表和队列时的
前向和后向指针。这是一个通用的结构体,也就是说,ict、ist、nict,nist 都是用该结构
体表示事务的。
3.3 osip_message_cong_t:该结构体主要用于sip消息的解析
hname 为sip消息头的某一个域的名称,比如cseq、from、to 或者via 等。
setheader 是处理该部分的函数。最后一项是一个标识,当被设置为1时,表明当前头域
数据如果无效的话,可以忽略,不影响整个消息头的处理。
3
剩余13页未读,继续阅读
资源评论
jinm15338838805
- 粉丝: 0
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功