exosip2协议栈原理分析以和总结 - 图文 联系客服

发布时间 : 星期三 文章exosip2协议栈原理分析以和总结 - 图文更新完毕开始阅读8c460c28bdeb19e8b8f67c1cfad6195f302be86f

.

用来管理subscribe模块 3.6 eXosip_pub_t

用来管理publish模块 3.7 eXosip_notify_t

用来管理notify模块

3.8 jinfo_t

这个结构体关联了dialog、call、subscribe以及notify几个结构体 3.9 eXosip_event_t

. .

.

与 event 有关的结构体。这个结构体主要用来在应用层和exosip 之间通信。Exosip 在处理事务的过程中,如果需要将结果反馈给上层应用,则会生成如上结构类型的事

件,并将其放到exosip 的事件队列中。应用层会不断循环从事件队列中读取事件,然后进行应用层的处理。

3.10 eXosip_t

exosip_t 是exosip 中最重要的结构体之一。从图可以看出,这个结构体比较大,其中包含了exosip 中用到的各个子模块的结构。比如call、reg、pub 等等。代码中定义了一个该 结构类型的全局变量,通过该全局变量,就可以对exosip 前的状态进行掌控(许多相关的信息要么包含在该结构上,要么可以通过该结构找到)。

. .

.

Extl 是eXtl_protocol 类型的指针,保存了网络接口类。 J_osip 保存了osip 初始化时返回的osip 结构体。

J_transactions 一般是等待释放的事务。在事务经过osip 处理完后,不再需要时,exosip会将其放在j_transactions 上,等待释放。

4、exosip的初始化

Exosip 的初始化有两部分组成,这主要是从使用exosip 的角度看。 4.1 对exosip 全局结构体变量的配置

这步通过调用接口eXosip_init 完成。主要完成工作如下: 4.1.1 初始化条件变量和互斥信号量。

4.1.2 调用osip_init 初始化osip 库,并将生成osip 结构体给exosip,同时也让osip 的 application_contexgt 指针指向exosip,也就是二者相互指向。

4.1.3 调用eXosip_set_callbacks 设置osip 的回调函数,所以回调函数都是exosip 自己实现。

4.1.4 调用jpipe 创建通信用的pipe,之前已经说了,对于windows 平台,是通过

. .

.

socket 接口模拟实现的。

4.1.5 初始化其上的事务和事件队列。主要,这不同于osip 的事务和事件队列。 4.1.6 调用extl 指向的结构体的init 函数指针,初始化网络接口。

4.2在socket 接口上进行监听

这步通过调用eXosip_listen_addr 接口完成。 主要完成工作如下:

4.2.1 将eXosip 全局变量的eXtl 指针指向eXtl_udp 全局变量。

4.2.2 根据参数,配置extl_protocol 和exosip 上有关ip 端口地址等信息。另外,调用extl_udp的tl_open 函数指针,完成在本机指定的端口上监听连接的工作。需要注意的是,虽然是监听,但是使用的UDP 来建立连接的,所以消息的recv 和发送在同一个socket 上完成。在osip中设置的out_socket 并不会起作用。

4.2.3 调用osip_thread_create 创建exosip 后台任务,用于驱动osip 的状态机。(在osip 中,

在发送sip 消息部分,提到将9 个函数放到一个线程中执行,exosip 就是这样做的)

下面展示了初始化的示例代码: include int i;

TRACE_INITIALIZE (6, stdout); i=eXosip_init(); if (i!=0)

. .