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