复旦光华之osip协议栈使用入门

复旦光华之osip协议栈使用入门

ID:12425725

大小:27.50 KB

页数:4页

时间:2018-07-17

复旦光华之osip协议栈使用入门_第1页
复旦光华之osip协议栈使用入门_第2页
复旦光华之osip协议栈使用入门_第3页
复旦光华之osip协议栈使用入门_第4页
资源描述:

《复旦光华之osip协议栈使用入门》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、OSIP协议栈使用入门(续一:纯协议栈逻辑分析)(注:下文假设阅读者已经大概了解SIP协议的简单呼叫流程,会使用Ethereal等抓包工具分析SIP消息结构,对C语言的指针、链表、内存控制及状态机等概念有足够的认识。)  要应用Osip到我们的程序中去,首先要看官方文档,文档中对Osip协议栈提供的各个功能部件如何使用都有比较详细的描述,但未进行整体性的分析,某些中文的指导文档也都停留在对其简单的翻译,不能为不熟悉该协议栈使用的用户快速参考使用,本文档不按照Osip的代码进行按功能分块说明,而是根据实际使

2、用时的代码使用顺序来对主要逻辑流程进行分析,并适当对流程中使用到的功能部件进行说明,具体更详细的功能说明或疑问可直接查看官方文档对应部分的解释或直接查看功能函数源代码即可解决。准备工作先认识几个结构体:osip_t,osip_message_t,osip_dialog_t,osip_transaction_t;  osip_t是一个全局变量,所有要使用Osip协议栈的事务处理能力的程序都要第一步就初始化它(相对应于只使用osipparser库进行SIP消息字段解析的应用来说,如果只使用parser库到自己

3、的程序中,想必对SIP协议栈已经很熟悉了,不需再往下看了^_^),它内部主要是定义了Osip协议栈的四个主要事务链表、消息实际发送函数及状态机各状态事件下的回调函数等;  osip_message_t是SIP消息的C语言结构体存储空间,收到SIP消息解析后存在该结构中方便程序使用接收到的消息中的指定的字段,发送消息前为方便设置要发送的字段值,将要发送的内容存在该结构中等发送时转为字符串;  osip_dialog_t则是SIPRFC中的dialog或叫callleg的定义,它标识了uac和uas的一对关系

4、,并一直保持到会话(session)结束,一个完整的dialog主要包括from,to,callid,fromtag,totag,state等(可查看源码),其中fromtag,totag,callid在一个dialog成功建立后才完整,体现在SIP消息中,就是From、To的tag,Call-id字段的值相同时,这些消息是属于它们对应的一个Dialog的,例如将要发起invite时,只有fromtag,callid填充有值,在收到to远端的响应时,收到totag填充到dialog中,建立成功一个dial

5、og,后继的逻辑均是使用这个dialog进行处理(如transaction事务处理),state表示本dialog的状态,与transaction的state有很大的关联,共用由Enum结构state_t定义;osip_transaction_t则是RFC中的事务的定义,它表示的是一个会话的某个Dialog之间的某一次消息发送及其完整的响应,例如invite-100-180-200-ack这是一个完整的事务,bye-200这也是一个完整的事务,体现在SIP消息中,就是Via中的branch的值相同表示属于

6、一个事务的消息(当然,事务是在Dialog中的,所以From、To的tag,Call-id值也是相同的),事务对于UAC,UAS的终端类型不同及消息的不同,分为四类,前面说的invite的事务,主叫uac中会关联一个ict事务,被叫uas会关联一个ist事务,而除了invite之外,都归类定义主叫nict,被叫nist,在Osip中,它是靠有限状态机来实现的上述四种事务(osip_fsm_type_t中定义)的,它的主要属性值有callid,transactionid,分别来标识dialog和transa

7、ction,其中还有一个时间戳birth_time标识事务创建时间,可由超时处理函数用来判断和决定超时情况下的事务的进行和销毁,而它的state属性是非常重要的,根据上述的事务类型不同,其值也不同,它是前面提到的状态机的“状态”,在实际状态机的逻辑执行中是一个关键值;Osip初始化  提到osip的初始化,可能大家都看过官方文档里第一页的代码,首先就是osip_init(&osip)初始化了全局的osip_t结构体,然后对它的回调函数进行设置,很多人估计就是一看到这密密麻麻的一页多的call_back设置

8、被吓到了,但结合前面分析的三个结构体的含义,这里的含义就很清晰了:  osip_t中有一个cb_send_message函数指针,它是Osip最终与外界网络交互的接口,它的参数有(osip_transaction_t*trn,osip_message_t*sipmsg,char*dest_socket_str,int32_tdest_port,int32_tsend_sock)      其中trn传入主要是为了方便获取事务的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。