1
OSIP2
协议栈学习总结
1
�/p>
Osip2
协议栈介ç»?/p>
Osip2
是一个开放源代码çš?/p>
sip
协议æ ?/p>
,
是开源代码中不多使用
C
语言写的协议栈之一ï¼?/p>
å®?/p>
具有短小简洁的特点。它的核心特性为
sip
协议数据的解析和事务的管理。数据包的收发ã€?/p>
RTP
流的处理等,并不åœ?/p>
Osip2
中完成。应用程序使ç”?/p>
Osip
时需要单独去实现这些模块ã€?/p>
Osip2
的缺点是没有很好的上å±?/p>
api
封装,使得上层应用在调用协议栈时很破碎;只做到了
transaction
层次的协议过程解析,
缺少
call
�/p>
session
�/p>
dialog
等过程的解析ï¼?/p>
这也增加äº?/p>
使用的难度ã€?/p>
2
�/p>
Osip2
协议栈体系结æž?/p>
OSIP
主要由解析模块ã€?/p>
工具模块和状态机模块构成ï¼?/p>
其核心是状态机模块ï¼?/p>
OSIP
结构å¦?/p>
图所示.
2.1
语法解析å™?/p>
libosip
库源ç ?/p>
src/osipparser2
为解析器源码ï¼?/p>
OSIP
解析模块主要用于å¯?/p>
SIP
请求与响
应进行封装与解析处理,分ä¸?/p>
SIP
解析ã€?/p>
URL
解析ä¸?/p>
SDP
解析完成å¯?/p>
sip
协议相关字段的构造和
解析。比如,将紧凑的存储于内å?/p>
buffer
中的
sip
数据解析到清晰定义的数据结构体中,每
一个字段代è¡?/p>
sip
协议中有意义的一个头域。ã€?/p>
SIP
解析主要负责
SIP
标题头的解析与封装ã€?/p>
SDP
解析除了对数据包ä¸?/p>
SDP
会话各类型进行解析外还包含对各类型的初始化和释放操作ä»?/p>
及对整个
SDP
包的一些基本操作ã€?/p>
URL
解析主要负责å¯?/p>
SIP
URI
中包含的
host
ï¼?/p>
port
ï¼?/p>
username
ï¼?/p>
password
等信息进行解析与设置ã€?/p>
2.2
有限状态机
SIP
状态机模块负责完成对某个事务状态的维持及处理。并且在特定的状态下触发相应
的事件或者回调函数ã€?/p>
OSIP
协议栈的状态机主要分为
4
类:
INVITE
客户端事åŠ?/p>
ICT
ï¼?/p>
�/p>
INVITE
客户端事åŠ?/p>
NICT
ï¼?/p>
INVITE
服务器端事务
IST
,非
INVITE
服务器端事务
NIST
�/p>
2.3
工具模块
OSIP
工具模块分为对话管理工具å’?/p>
SDP
协商工具ã€?/p>
对话管理工具使用户能够根æ�?/p>
RFC3261
�/p>
dialog
进行操作ï¼?/p>
建立相应
dialog
结构体ã€?/p>
并通过å¯?/p>
dialog
结构体的添加ã€?/p>
删除ã€?/p>
查询å®?/p>
现对话管理ã€?/p>
SDP
协商工具负责å�?/p>
SIP
终端用户提供协商
codec
等功能ã€?/p>
2.4
协议栈框æž?/p>
框架并不是指代码的某一部分ï¼?/p>
而是指它的构成形式ã€?/p>
主要有三部分ï¼?/p>
底层套接字接æ”?/p>
/
发送,模块间通信管道,上层调ç”?/p>
api
接口ã€?/p>
Osip2
并不实现底层套接字的接收
/
发送,ç”?/p>
eXosip
实现,现在只支持
UDP
的链路连接ã€?/p>
SIP
解析
SRL
解析
SDP
解析
�/p>
é™?/p>
�/p>
�
SDP
协商工具
DIALOG
工具
应用程序
状态机模块