云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > exosip2协议栈原理分析以及总结 - 图文

exosip2协议栈原理分析以及总结 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/23 10:59:00

exosip2协议栈学习总结

1、exosip2协议栈介绍

eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。

使用 sip 协议建立多媒体会话是一个复杂的过程,exosip 库开发的目的在于隐藏这种复杂性。正如它的名称所表示的,eXosip2 - the eXtended osip Library,它扩展了osip 库,实现了一个简单的高层API。通过使用exosip,我们可以避免直接使用osip 带来的困难。需要注意,exosip 并不是对osip 的简单封装包裹,而是扩展。Osip 专注于sip 消息的解析,事务状态机的实现,而exosip 则基于osip 实现了call、options、register、publish 等更倾向于功能性的接口。当然,这些实现都是依赖于底层osip 库已有的功能的。

2、exosip的模块构成

2.1 底层连接管理

extl.c、extl_udp.c、extl_tcp.c、extl_dtls.c、extl_tls.c 是与网络连接有关的文件。实现了连接的建立,数据的接收以及发送等相关的接口。其中,extl_udp.c 为使用UDP 连接的实现,extl_tcp.c 为使用TCP 连接的实现。Extl_dtls.c 以及extl_tls.c 都是使用安全socket 连接的实现。 2.2 内部功能模块实现 Jauth.c、jcall.c、jdialog.c、jevents.c、jnotify.c、jpublish.c、jreg.c、jrequest.c、jresponse.c、jsubscribe.c 等文件实现了内部对一些模块的管理,这些模块正如其文件名所表示的,jauth.c

主要是认证,jcall.c 则是通话等等。 2.3 上层API 封装实现

Excall_api.c、exinsubsription_api.c、exmessag_api.c、exoptions_api.c、expublish_api.c、exrefer_api.c、exregister_api.c、exsubsribtion_api.c 这几个以api 为后缀的文件,实现各个子模块的管理。应用程序可以调用这里提供的接口,方便的构造或者发送sip 消息。 2.4 其他

Inet_ntop.c 实现ip 地址的点分十进制与十六进制表示之间的转换。 Jcallback.c 实现一堆回调函数,这些回调函数就是用来注册到osip 库的。我们使用exosip 库,就是避免直接使用osip 库,因为一些工作exosip 已经帮我们做了,所以这样一来,可 以简化上层的实现。

Udp.c 文件主要用来对通过UDP 连接接收到的消息进行分类处理。 Exutilis.c 文件实现一些杂项的函数。有ip 地址到字符串之间的转换,域名的解析等一些 辅助的功能函数。

Exconf.c 文件实现了exosip 的初始化相关的接口,包括后台任务的实现。实际上是 “configuration api”的实现。

Exosip.c 文件实现了与exconf.c 文件相似的功能。比如管道的使用,exosip 上事务的创建和查找,register 和subscribe 的更新,认证信息的处理等。

3、exosip关键数据结构及其说明

1

3.1 eXtl_protocol

eXtl_protocol 是为实现网络通信专门定义的一个数据结构,包括了变量和方法两部分。其中,变量包括了建立网络连接过程中使用的ip 地址、端口等;方法部分封装了网络socket编程常用的系统调用接口。

代码中定义了四个该数据结构体的全局变量:

eXtl_udp、eXtl_tcp、eXtl_tls 以及eXtl_dtls。 分别针对使用UDP、TCP 以及安全加密连接进行了实现。

3.2 eXosip_call_t

Exosip_call_t 定义了call 相关的信息,包括call 的id,call 的dialogs,call 上incoming的事务和outgoing 的事务。另外,还包括了前向和后向指针,所以,所有的call 可以通过该结构体串接起来。

3.3 eXosip_dialog_t

exosip_dialog_t 包含了dialog 相关的信息。

2

3.4 eXosip_reg_t

用来管理Register模块 3.5 eXosip_subscribe_t

用来管理subscribe模块 3.6 eXosip_pub_t

用来管理publish模块 3.7 eXosip_notify_t

用来管理notify模块 3.8 jinfo_t

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

3

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 的

4

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

exosip2协议栈学习总结 1、exosip2协议栈介绍 eXosip是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。使用 sip 协议建立多媒体会话是一个复杂的过程,exosip 库开发的目的在于隐藏这种复杂性。正如它的名称所表示的,eXosip2 - the eXtended osip Library,它扩展了osip 库,实现了一个简单的高层API。通过使用exosip,我们可以避免直接使用osip 带来的困难。需要注意,exosip 并不是对osip 的简单封装包裹,而是扩展。Osip 专注于sip 消息的解析,事务状态机的实现,而exosip 则基于osip 实现了call、options、register、publish 等更倾向于功能性的接口。当然,这些实现都是依赖于底层osip 库已有的

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com