
Sip协议栈Doubango设计分析
argpunk
以梦为马
展开
-
五 SIP中一个INVITE消息的发起过程
SIP协议的INVITE消息发起流程 当通过sip协议发起一个会话时,需要通过invite消息实现该流程。而SIP协议是一个基于事务的协议,每一个sip会话的都是通过sip部件间的一系列消息来完成的。首先需要明确的重要概念就是事务。 事务 在SIP协议中,一个事务是指完成一次消息交互的整个流程。以INVITE消息为例,一个基于代理服务器交换信令和语音视频数据包的事务模型如下图所示: 如原创 2012-07-06 17:06:22 · 24272 阅读 · 2 评论 -
二 底层协议栈结构分析
tsip_stack_handle_t 实例 1. tsip_stack_handle_t的创建 在底层,真正运转的协议栈结构式tsip_stack_handle_t的一个实例,它的创建时机为SipStack类在构造时,也就是说,当上层不管用何种方式触发一个SipStack的创建动作时。在上层,SipStack会被继续抽象封装,这种封装有可能是封装成为一个java类,一个C#类,原创 2012-07-02 14:21:06 · 2678 阅读 · 0 评论 -
三 协议栈的启动过程
协议栈启动的上层接口 对于Doubango中得sip协议栈,是通过SipStack类粘合上层代码与底层代码的,该类定义在SipStack.h中,实现在SipStack.cxx中。当构造好一个SipStack实例之后,对于底层而言,实际上是创建了一个tsip_stack_t 的实例,这个实例在SipStack类中通过tsip_stack_handle_t *handle字段指向。原创 2012-07-02 15:56:30 · 2405 阅读 · 0 评论 -
一 从协议栈结构说起
自顶向下与自底向上 软件设计的两种方法不过于自顶向下与自底向上。 对于自顶向下而言,先设计好用户接口,再往下延伸至各个功能块的具体实现。而对于自底向上而言,自然是有了设计好的各个功能代码块,再将这些功能代码块拼接成具体的用户接口,然而实际的软件实践中,这两种方法是同时展开的,因为无论单独实施哪一种,都是有所缺陷,会令人陷入某种困境。 设计软件如此,那么在分析一款软件的时候,结合自顶向下与自底原创 2012-07-02 11:49:32 · 3068 阅读 · 0 评论 -
六 Doubango协议栈中对RTP的管理
相关数据结构 1. tsip_dialog_invite_t 描述: 一个invite_dialog代表了一个invite期间的所有的信令流程,因此,它首先是一个普遍的dialog的特殊化结构,在该结构的起始部分,有一个TSIP_DECLARE_DIALOG声明,该声明展开后是一个tsip_dilog_t __dialog字段的定义,这是一种在C中一个具化对象对通用对象的继承机制,ts原创 2012-08-27 11:29:12 · 5689 阅读 · 1 评论 -
四 SIP协议栈传输层的启动(1)
协议栈的默认传输结构 对于一个刚启动的协议栈来说,它需要有一个传输层,支持若干的传输结点。每一个传输结点对应于一个端口,若采用TCP连接,一个传输结点就针对于一个点到点的连接,这个连接负责sip信令的可靠交换;若采用UDP进行sip信令的交换,则需要由应用程序维护一个定时器,以防数据包丢失的时候用于重传。 Doubango里一个协议栈对应于一个tsip_stack_t实例,而这样一个实例原创 2012-07-04 17:27:40 · 4724 阅读 · 1 评论