oSIP协议桟浅析
更新时间:2024-06-06 19:38:01 阅读量: 综合文库 文档下载
- osip协议栈性能提升推荐度:
- 相关推荐
oSIP协议栈浅析
1. oSIP介绍 ...................................................................................................................................... 1 2. oSIP结构分析 .............................................................................................................................. 1
2.1 oSIP结构 ............................................................................................................................ 1 2.2 状态机(Finite State Machines)模块 .................................................................................. 2
2.2.1 概述 ......................................................................................................................... 2 2.2.2 ICT状态机 .............................................................................................................. 3 2.2.3 NICT状态机 ........................................................................................................... 4 2.2.4 IST状态机 ............................................................................................................... 5 2.2.5 NIST状态机 ............................................................................................................ 6 2.3 解析器(Parsers)模块 ......................................................................................................... 7
2.3.1 SIP Parser ................................................................................................................. 7 2.3.2 SDP Parser ............................................................................................................... 9 2.3.3 URL Parser ............................................................................................................. 10 2.4 工具(Facilities)模块 ........................................................................................................ 11
2.4.1 SDP negotiator ....................................................................................................... 11 2.4.2 Dialog management ............................................................................................... 11
3. oSIP特点 .................................................................................................................................... 11
3.1 oSIP的优点 ...................................................................................................................... 11 3.2 oSIP的缺点 ...................................................................................................................... 12 4. oSIP应用结构图 ........................................................................................................................ 12 5. oSIP使用概述 ............................................................................................................................ 13
5.1 初始化oSIP ..................................................................................................................... 13 5.2 注册CALL BACK函数 ................................................................................................. 13 5.3 Transaction操作 ............................................................................................................... 15 6. 参考............................................................................................................................................ 15
oSIP协议栈浅析
1. oSIP介绍
oSIP是按照RFC3261(SIP)和RFC2327(SDP)标准,并使用标准c编写的一个SIP协议栈。它是一个公开源码的免费协议栈。oSIP协议栈结构简单而小巧,它并不提供高层的SIP会话控制的API,它主要提供一些解析SIP/SDP消息的API和事务处理的状态机。
oSIP支持线程安全,既可以用于多线程的编程模式,也可以用于单线程的编程模式;oSIP可以用来开发User Agent,IP soft-phone和SIP Proxy等等。
oSIP目前最后版本为V 0.9.7,不久oSIP版本将升级至oSIP2(V 1.99.7)。oSIP2主要调整了一些函数和结构名称,以及一些头文件的名称、内容结构的调整,整体的构架和功能不变。
本文以下描述都基于oSIP V0.9.6版本。
2. oSIP结构分析
2.1 oSIP结构
oSIP主要包括三大部分的内容:状态机模块、解析器模块和工具模块。 状态机模块的功能:
完成对某个事务(注册过程,呼叫过程等等)状态记录,并在特定状态下触发相应的事件或回调函数。
解析器模块的功能:
该模块主要完成对SIP消息结构剖析、SDP消息的结构剖析以及URI结
构的剖析;
工具模块的功能:
该模块提供一些SDP等处理的一些工具。
oSIP的模块结构图如下(图2-1):
Page 1
oSIP协议栈浅析
Application 解析器模块 SIP parser URL parser SDP parser Finite State Machines 状态机模块 工具模块(可选项) Dialogue Facilities SDP negotiation Facilities oSIP模块 图2-1 oSIP结构
2.2 状态机(Finite State Machines)模块
2.2.1 概述
oSIP状态机(Finite State Machines)主要分为四类,分别为: ? ICT ? NICT ? IST ? NIST
-- Invite Client (outgoing) Transaction -- Non-Invite Client (outgoing) Transaction -- Invite Server (incoming) Transaction -- Non-Invite Server (incoming) Transaction
Page 2
oSIP协议栈浅析
2.2.2 ICT状态机
cb_ict_kill_transaction Transaction initialization ICT_PRE_CALLING cb_ict_transport_error cb_ict_invite_sent cb_ict_transport_error cb_ict_invite_sent2 ICT_CALLING ICT_TERMINATED cb_ict_2xx_received cb_ict_transport_error cb_ict_1xx_received cb_ict_Nxx_received cb_ict_transport_error cb_ict_3456xx_received2 cb_ict_1xx_received ICT_COMPLETED ICT_PROCEEDING cb_ict_ack_sent2 cb_ict_Nxx_received
图 2-2: ICT State Machine
注:
cb_ict_xxx_xxxx 表示从一种状态转换到另一种状态时将调用该回调函数
表示从一种状态转换到另一种状态时不调用任何回调函数
cb_ict_Nxx_received:其中N表示一下几个值 3 -- cb_ict_3xx_received 4 -- cb_ict_4xx_received 5 -- cb_ict_5xx_received 6 -- cb_ict_6xx_received
Page 3
oSIP协议栈浅析
2.2.3 NICT状态机
cb_nict_kill_transaction Transaction initialization NICT_PRE_TRYING cb_nict_transport_error cb_nict_XXX_sent cb_nict_transport_error cb_nict_request_sent2 NICT_TRYING NICT_TERMINATED cb_nict_transport_error cb_nict_1xx_received cb_nict_Nxx_received cb_nict_request_sent2 NICT_COMPLETED NICT_PROCEEDING cb_nict_1xx_received cb_nict_Nxx_received 图2-3: NICT State Machine 注:
cb_nict_xxx_xxxx 表示从一种状态转换到另一种状态时将调用该回调函数
表示从一种状态转换到另一种状态时不调用任何回调函数
cb_nict_XXX_sent:其中XXX表示一下几种消息类型,
register -- cb_nict_register_sent bye -- cb_nict_bye_sent options -- cb_nict_options_sent info -- cb_nict_info_sent cancel -- cb_nict_cancel_sent notify -- cb_nict_notify_sent subscribe -- cb_nict_subscribe_sent unknown -- cb_nict_unknown_sent
cb_nict_Nxx_received:其中N表示一下几个值 2 -- cb_nict_2xx_received
Page 4
oSIP协议栈浅析
c connection_add(),connection_get(),nettype_get(), addrtype_get(),addr_get(),addr_multicast_ttl_get(), addr_multicast_int_get() bandwidth_add(),bwtype_get(),bandwidth_get() time_descr_add(),start_time_get(),stop_time_get() repeat_add(),repeat_get() adjustments_set(),adjustments_get() key_set(),keytype_get(),keydata_get() attribute_add(),att_field_get(),att_value_get() media_add(),media_get(),port_get(),number_of_port_get(), proto_get(),payload_add(),payload_get(), b t r z k a m
另外,oSIP还包含对SDP包的一些基本操作[set(), get(), init(), parse(), 2char(), free(), clone()],及对各类type的init()和free()操作
2.3.3 URL Parser
这里的URL是指SIP中的URI,URI有很多参数格式,在RFC3261中列举了一些比较例子:
The URIs within each of the following sets are equivalent: sip:alice@atlanta.com;transport=TCP sip:alice@AtLanTa.CoM;Transport=tcp
sip:carol@chicago.com
sip:carol@chicago.com;newparam=5 sip:carol@chicago.com;security=on
sip:biloxi.com;transport=tcp;method=REGISTER?to=sip:bob@biloxi.com sip:biloxi.com;method=REGISTER;transport=tcp?to=sip:bob@biloxi.com
sip:alice@atlanta.com?subject=project x&priority=urgent sip:alice@atlanta.com?priority=urgent&subject=project x
The URIs within each of the following sets are not equivalent:
SIP:ALICE@AtLanTa.CoM;Transport=udp (different usernames) sip:alice@AtLanTa.CoM;Transport=UDP
sip:bob@biloxi.com (can resolve to different ports) sip:bob@biloxi.com:5060
Page 10
oSIP协议栈浅析
sip:bob@biloxi.com (can resolve to different transports) sip:bob@biloxi.com;transport=udp
sip:bob@biloxi.com (can resolve to different port and transports) sip:bob@biloxi.com:6000;transport=tcp
sip:carol@chicago.com (different header component) sip:carol@chicago.com?Subject=next meeting
sip:bob@phone21.boxesbybob.com (even though that's what
sip:bob@192.0.2.4 phone21.boxesbybob.com resolves to)
在oSIP中处理SIP URI有比较多的操作函数提供,主要有对
host,port,username,password, scheme的get()和set(),以及对参数的初始化设置和剖析处理。详细函数名称请参考源代码中的url.h。
2.4 工具(Facilities)模块
2.4.1 SDP negotiator
SDP协商工具(SDP negotiator)帮助end point提供协商codec等功能
2.4.2 Dialog management
对话管理工具(Dialog management)是oSIP提供的一个比较强大的辅助工具,主要用于有能力应答呼叫的end point。
对话管理工具(Dialog management)能够帮助记录请求和响应消息,利用这
个工具使end point能够快速准确的作出应答。
3. oSIP特点
3.1 oSIP的优点
? Osip没有给开发者限定在特定的某个执行模式下,能够使开发者选定一
个比较适合自己的模式。
? Osip的各个模块是相对清晰、独立的,因而去掉某个模块时也比较容易。
Page 11
oSIP协议栈浅析
? Osip的解析器提供了较为完善的API,包含了消息的构造、修改和产生
等。
3.2 oSIP的缺点
?
oSIP目前版本源代码结构、定义比较混乱,并且缺乏文档,阅读比较困难;该问题将在oSIP2中得到改善。
?
oSIP不提供任何快速产生请求消息和响应消息的方法,所有请求消息和响应消息的形成必须调用一组sip message api来手动组装完成,关于这方面的缺陷,osip作者可能在以后会开发一个eXoSIP的API来完成。
?
由于oSIP结构简单,外围相关模块需要用户自己开发,如SIP消息的接收和发送,RTP/RTCP的语音数据的处理等。
4. oSIP应用结构图
Receive/Send SIP Messages Receive/Send RTP/RTCP ⑦ B Main thread Application ② Transaction Context 解析器模块 SIP parser URL parser SDP parser ⑤ A ④ Finite State Machines 状态机模块 ⑥ ③ ① oSIP Instance 工具模块(可选项) Dialogue Facilities SDP negotiation Facilities oSIP模块 图4-1 oSIP应用
Page 12
oSIP协议栈浅析
其中: ①:初始化oSIP和注册CALL BACK函数; ②:添加事件A; ③:执行事务 ④:取消事件A ⑤:解析消息 ⑥:触发CALL BACK函数 ⑦:接收/发送消息 A:保存状态 B:接收/发送语音包
5. oSIP使用概述
5.1 初始化oSIP
在使用oSIP前必须先初始化oSIP,主要调用函数osip_global_init()和osip_init(),具体操作代码如下:
osip_t *osip;
// initialise internal element first
if (0!=osip_global_init())
return -1;
// allocate a global osip element.
if (0!=osip_init(&osip))
return -1;
5.2 注册CALL BACK函数
需要注册的call back函数主要包含发送消息、结束事务、发送失败、4个状态机(ICT、NICT、IST、NIST)相关函数。 注册发送消息的CALL BACK函数:
osip_setcb_send_message(osip, &application_cb_snd_message); 注册结束事务的CALL BACK函数:
osip_setcb_ict_kill_transaction(osip,&application_cb_ict_kill_transaction);
osip_setcb_ist_kill_transaction(osip,&application_cb_ist_kill_transaction);
osip_setcb_nict_kill_transaction(osip,&application_cb_nict_kill_transaction);
osip_setcb_nist_kill_transaction(osip,&application_cb_nist_kill_transaction);
Page 13
oSIP协议栈浅析
注册发送失败的CALL BACK函数:
osip_setcb_ict_transport_error(osip,&application_cb_transport_error); osip_setcb_ist_transport_error(osip,&application_cb_transport_error); osip_setcb_nict_transport_error(osip,&application_cb_transport_error); osip_setcb_nist_transport_error(osip,&application_cb_transport_error);
注册ICT、NICT、IST、NIST CALL BACK函数
osip_setcb_ict_2xx_received2(osip,&application_cb_rcvresp_retransmission); osip_setcb_ict_3456xx_received2(osip,&application_cb_rcvresp_retransmission); osip_setcb_ict_invite_sent2(osip,&application_cb_sndreq_retransmission); osip_setcb_ist_2xx_sent2(osip,&application_cb_sndresp_retransmission); osip_setcb_ist_3456xx_sent2(osip,&application_cb_sndresp_retransmission); osip_setcb_ist_invite_received2(osip,&application_cb_rcvreq_retransmission); osip_setcb_nict_2xx_received2(osip,&application_cb_rcvresp_retransmission); osip_setcb_nict_3456xx_received2(osip,&application_cb_rcvresp_retransmission); osip_setcb_nict_request_sent2(osip,&application_cb_sndreq_retransmission); osip_setcb_nist_2xx_sent2(osip,&application_cb_sndresp_retransmission); osip_setcb_nist_3456xx_sent2(osip,&application_cb_sndresp_retransmission); osip_setcb_nist_request_received2(osip,&application_cb_rcvreq_retransmission); osip_setcb_ict_invite_sent (osip,&application_cb_sndinvite); osip_setcb_ict_ack_sent (osip,&application_cb_sndack); osip_setcb_nict_register_sent(osip,&application_cb_sndregister); osip_setcb_nict_bye_sent (osip,&application_cb_sndbye); osip_setcb_nict_cancel_sent (osip,&application_cb_sndcancel); osip_setcb_nict_info_sent (osip,&application_cb_sndinfo); osip_setcb_nict_options_sent (osip,&application_cb_sndoptions); osip_setcb_nict_subscribe_sent (osip,&application_cb_sndoptions); osip_setcb_nict_notify_sent (osip,&application_cb_sndoptions);
osip_setcb_nict_unknown_sent(osip,&application_cb_sndunkrequest); osip_setcb_ict_1xx_received(osip,&application_cb_rcv1xx); osip_setcb_ict_2xx_received(osip,&application_cb_rcv2xx); osip_setcb_ict_3xx_received(osip,&application_cb_rcv3xx); osip_setcb_ict_4xx_received(osip,&application_cb_rcv4xx); osip_setcb_ict_5xx_received(osip,&application_cb_rcv5xx); osip_setcb_ict_6xx_received(osip,&application_cb_rcv6xx); osip_setcb_ist_1xx_sent(osip,&application_cb_snd1xx); osip_setcb_ist_2xx_sent(osip,&application_cb_snd2xx); osip_setcb_ist_3xx_sent(osip,&application_cb_snd3xx); osip_setcb_ist_4xx_sent(osip,&application_cb_snd4xx); osip_setcb_ist_5xx_sent(osip,&application_cb_snd5xx);
Page 14
oSIP协议栈浅析
osip_setcb_ist_6xx_sent(osip,&application_cb_snd6xx);
osip_setcb_nict_1xx_received(osip,&application_cb_rcv1xx); osip_setcb_nict_2xx_received(osip,&application_cb_rcv2xx); osip_setcb_nict_3xx_received(osip,&application_cb_rcv3xx); osip_setcb_nict_4xx_received(osip,&application_cb_rcv4xx); osip_setcb_nict_5xx_received(osip,&application_cb_rcv5xx); osip_setcb_nict_6xx_received(osip,&application_cb_rcv6xx); osip_setcb_nist_1xx_sent(osip,&application_cb_snd1xx); osip_setcb_nist_2xx_sent(osip,&application_cb_snd2xx); osip_setcb_nist_3xx_sent(osip,&application_cb_snd3xx); osip_setcb_nist_4xx_sent(osip,&application_cb_snd4xx); osip_setcb_nist_5xx_sent(osip,&application_cb_snd5xx); osip_setcb_nist_6xx_sent(osip,&application_cb_snd6xx);
osip_setcb_ist_invite_received (osip,&application_cb_rcvinvite); osip_setcb_ist_ack_received (osip,&application_cb_rcvack); osip_setcb_ist_ack_received2 (osip,&application_cb_rcvack2); osip_setcb_nist_register_received(osip,&application_cb_rcvregister); osip_setcb_nist_bye_received (osip,&application_cb_rcvbye); osip_setcb_nist_cancel_received (osip,&application_cb_rcvcancel); osip_setcb_nist_info_received (osip,&application_cb_rcvinfo); osip_setcb_nist_options_received (osip,&application_cb_rcvoptions); osip_setcb_nist_subscribe_received(osip,&application_cb_rcvoptions); osip_setcb_nist_notify_received (osip,&application_cb_rcvoptions);
osip_setcb_nist_unknown_received (osip,&application_cb_rcvunkrequest);
5.3 Transaction操作
在注册完CALL BACK函数后,应用程序可以建立Transaction来调用oSIP的解析器和状态机模块的操作,来实现不同应用程序的需求。
6. 参考
[1] SIP -- RFC3261
(http://www.ietf.org)
[2] SDP -- RFC2327(http://www.ieft.org) [3] oSIP Library
-- http://www.gnu.org/software/osip/
[4] oSIP mailing list -- http://www.atosc.org/pipermail/public/osip/
Page 15
oSIP协议栈浅析
osip_setcb_ist_6xx_sent(osip,&application_cb_snd6xx);
osip_setcb_nict_1xx_received(osip,&application_cb_rcv1xx); osip_setcb_nict_2xx_received(osip,&application_cb_rcv2xx); osip_setcb_nict_3xx_received(osip,&application_cb_rcv3xx); osip_setcb_nict_4xx_received(osip,&application_cb_rcv4xx); osip_setcb_nict_5xx_received(osip,&application_cb_rcv5xx); osip_setcb_nict_6xx_received(osip,&application_cb_rcv6xx); osip_setcb_nist_1xx_sent(osip,&application_cb_snd1xx); osip_setcb_nist_2xx_sent(osip,&application_cb_snd2xx); osip_setcb_nist_3xx_sent(osip,&application_cb_snd3xx); osip_setcb_nist_4xx_sent(osip,&application_cb_snd4xx); osip_setcb_nist_5xx_sent(osip,&application_cb_snd5xx); osip_setcb_nist_6xx_sent(osip,&application_cb_snd6xx);
osip_setcb_ist_invite_received (osip,&application_cb_rcvinvite); osip_setcb_ist_ack_received (osip,&application_cb_rcvack); osip_setcb_ist_ack_received2 (osip,&application_cb_rcvack2); osip_setcb_nist_register_received(osip,&application_cb_rcvregister); osip_setcb_nist_bye_received (osip,&application_cb_rcvbye); osip_setcb_nist_cancel_received (osip,&application_cb_rcvcancel); osip_setcb_nist_info_received (osip,&application_cb_rcvinfo); osip_setcb_nist_options_received (osip,&application_cb_rcvoptions); osip_setcb_nist_subscribe_received(osip,&application_cb_rcvoptions); osip_setcb_nist_notify_received (osip,&application_cb_rcvoptions);
osip_setcb_nist_unknown_received (osip,&application_cb_rcvunkrequest);
5.3 Transaction操作
在注册完CALL BACK函数后,应用程序可以建立Transaction来调用oSIP的解析器和状态机模块的操作,来实现不同应用程序的需求。
6. 参考
[1] SIP -- RFC3261
(http://www.ietf.org)
[2] SDP -- RFC2327(http://www.ieft.org) [3] oSIP Library
-- http://www.gnu.org/software/osip/
[4] oSIP mailing list -- http://www.atosc.org/pipermail/public/osip/
Page 15
正在阅读:
oSIP协议桟浅析06-06
财务报表分析形成性考核作业三获利能力分析-青岛海尔(电大本科)[1...02-20
农村村委委员个人述职报告范本参考03-24
教师代表毕业致辞 做自己尊重的人02-22
金融写作的几点经验02-11
体育之研究白话译文04-06
环境资源法是一个独立的法律部门11-30
关于2022年开展环保公益活动方案范文03-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 浅析
- 协议
- oSIP
- 5683配置文档
- 高级人力资源管理专业能力自述__2
- 古代汉语模拟试卷和答案
- 技术信息技术人员岗位实习周记原创范文
- 唐诗宋词五代词——北宋词(一)理解性默写
- 徐文长从小就善于动脑筋思考
- 统计学案例
- 三菱电机重庆售后电话报修查询防坑必看攻略 - 图文
- 民俗文化交流协会章程(1)
- 幼儿园社会教育领域活动教学策略
- 徐汇区名师工作室活动简报 - 图文
- 重庆市合川城区排水工程专项规划(说明书)-0801
- 青岛版小学数学三年级上册《走进新农村—方向与位置》教学设计
- 水质模型
- 新柏拉图主义与奥古斯丁
- 2010年宿迁市中考全真模拟试题化学试卷
- 《煤矿窄轨铁道质量标准及检查评级办法》(83)煤生字第892号
- 2017年中国调压器发展现状与市场前景分析(目录) - 图文
- 突发公共卫生事件预防和应急处理预案
- 后河村80m钢-混凝土组合梁施工方案2 - 图文