http://blog.csdn.net/flyhawk007j2me/article/details/6830586

Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高

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

exosip2增加了call、dialog、registration、subscription等过程的解析,使得实用性更强。

//========================================================================================================================

osip2协议栈分为三部分:sip协议的语法分析,sip协议的过程分析和协议栈框架。

1>>sip协议的语法分析

主要是osipparser2部分,目前支持RFC3261和RFC3265定义的sip协议消息,

包括INVITE、ACK、OPTIONS、CANCEL、BYE、SUBSCRIBE、NOTIFY、MESSAGE、REFER和INFO。不支持RFC3262定义的PRACK。

遵循RFC3264关于SDP的offer/answer模式。带有SDP的语法分析。

支持MD5加解密算法。支持Authorization、www_authenticate和proxy_authenticate

2>>sip协议的过程分析

主要是osip2部分,基于RFC3261、RFC3264和RFC3265的sip协议描述过程,围绕transaction这一层来实现sip的解析。

Transaction是指一个发送方和接收方的交互过程,由请求和应答组成。请求分为Invite类型和Non-Invite类型。应答分为响应型的应答和确认型的应答。

响应型的应答是指这个应答仅代表对方收到请求。请求经过处理后都必须返回确认型的应答。响应型的应答有1xx,确认型的应答包括2xx、3xx、4xx、5xx和6xx。

一个transaction由一个请求和一个或多个响应型应答、一个确认型应答组成。

3>>sip协议框架

主要有三部分:底层套接字接收/发送,模块间通信管道,上层调用api接口。

Osip2并不实现底层套接字的接收/发送,由eXosip2实现;

上层调用的api接口大致有两类:sip协议的调用接口和sdp协议的调用接口。

EXosip封装了大部分的sip协议调用接口

//********************************************************************************************************************************//

exosip2协议栈的分析

exosip是osip2协议的封装和调用。它实现了作为单个sip终端的大部分功能,如register、call、subscription等

exsiop使用udpsocket套接字实现底层sip协议的接受和奉送,并且封装了sip消息的解释器。

参考:http://blog.163.com/haidiniao@126/blog/static/117538091200961093456878/?latestBlog

eXosip_init()是eXosip的初始化函数,我们来看看它的内部实现:

首行是定义的 osip_t *osip,这在oSIP的官方手册里我们看到,所有使用oSIP的程序都要在最开始处声明一个osip_t的指针,并使用 osip_init(&osip)来初始化这个指针,销毁这个资源使用osip_release(osip)即可。

我们可以在代码中看到很多OSIP_TRACE,这是调试输出宏调用了函数osip_trace,可以用ENABLE_TRACE宏来打开调试以方便我们开发调试。

其它就是很多的eXosip_t的全局变量eXosip的一些初始化操作,包括最上面的memset (&eXosip, 0, sizeof (eXosip))完全清空和下面的类似eXosip.user_agent = osip_strdup ("eXosip/" EXOSIP_VERSION)的exosip变量的一些初始值设置,其中有一个eXosip.j_stop_ua = 0应该是一个状态机开关,后面可以看到很多代码检测这个变量来决定是否继续流程处理,默认置成了0表示现在exosip的处理流程是就绪的,即ua是 not stop的。

osip_set_application_context (osip, &eXosip)是比较有意思的,它让下面的eXosip_set_callbacks (osip)给osip设置大量的回调函数时,能让osip能访问到eXosip这个全局变量中设置的大量程序运行时交互的信息,相当于我们在VC下开启一个线程时,给线程传入的一个void指针指向我们的MFC应用程序的当前dialog对象实例,可以用void *osip_get_application_context (osip_t * osip)这个函数来取出指针来使用,不过好象exosip中并没有用到它,可能是留给个人自已扩展的吧:)

osip_set_cb_send_message (osip, &cb_snd_message) SIP消息发送回调函数

这个函数可能是最重要的回调函数之一,消息发送,包括请求消息和回应消息,一般情况下,状态机的状态就是由它控制的,发起一个消息初始化一个状态机,回应一个消息对状态机修改,终结消息发送结束状态机……

//==================================================================================

exosip协议示例:

osip和mysql_osip2和eXosip2协议相关推荐

  1. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  2. 基于GBT28181:SIP协议组件开发-----------第五篇SIP注册流程eXosip2实现(二)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3966794.html. 上章节讲解了讲解一个用eXosip2库实现 ...

  3. 一个基于 osip 库的 UAC 和 UAS 的代码整理(转)

    从网上搞了一个基于osip 库的 SIP 协议的简单的 UAC 代理客户端和 UAS 代理服务器端,并进行了编译连接,代码整理后如下: ----------- UAC 代理客户端的代码整理 ----- ...

  4. oSIP协议栈(及eXoSIP,Ortp等)使用入门

    http://blog.csdn.net/lhsxsh/article/details/4593908 文档最新版本及文中提到的相关源码及VC6工程文件请在本站找,嘿嘿~~ (首页的SkyDriver ...

  5. oSIP协议栈(及eXoSIP、Ortp等)使用入门

    http://ghj19850926.blog.163.com/blog/static/18591560201241410033429/ 一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版本, ...

  6. oSIP协议栈(及eXoSIP、Ortp等)使用入门(转)

    oSIP协议栈(及eXoSIP.Ortp等)使用入门(转) 转自http://mbstudio.spaces.live.com/blog/cns!C898C3C40396DC11!955.entry ...

  7. 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍

    **************************************************************************************************** ...

  8. 几种开源SIP协议栈对比OPAL,VOCAL,sipX,ReSIProcate,oSIP

    随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进 的H.323协议栈展现在普通程序员的眼前,为H.323 ...

  9. linux ortp 编译,Linux下oSIP的编译使用应该是很简单的,其Install说明文档.doc

    Linux下oSIP的编译使用应该是很简单的,其Install说明文档.doc Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windo ...

最新文章

  1. 实现JavaScript匿名透明递归
  2. 如何从开始掌控会议?
  3. 无主之地kill ajax,阿克斯顿 - 无主之地中文维基 - 灰机wiki
  4. 10套高质量Linux教程,放在百度网盘了
  5. 用PHP搞掂黑群晖IPv6的DNSPod解析【7月23日更新,支持v4和v6】
  6. IAR for ARM介绍、下载、安装与注册
  7. 操作系统的目标和作用
  8. 张小龙请回答:微信这些功能是咋想的?
  9. android开发工具类之获得WIFI IP地址或者手机网络IP
  10. 有趣的程序代码c语言,一个有趣的小程序
  11. 报错:Collecting package metadata (current_repodata.json): failed
  12. pytorch实现手写数字图片识别
  13. tailwind css的使用
  14. 点对点传输现状,镭速高速点对点传输解决方案
  15. 2017年终总结——第一篇博客开端
  16. 【每天一个Linux命令】25. 查看文件命令(cat/more/less/tail/tac/nl/od)
  17. 用计算机打开手机密码,开机不用输入密码-怎么设置开机不用密码就能直接进入我的电脑? – 手机爱问...
  18. 消防应急照明灯具安装方式
  19. 有关衬衫领:你所不知的各种“秘密”_第1页_福布斯中文网
  20. 小鸟且偷生, 飞入天空便自由!

热门文章

  1. python lambda表达式及用法_python lambda表达式简单用法
  2. 基于JAVA+Servlet+JSP+MYSQL的高校后勤管理系统
  3. 【docker学习之二】Docker的基本概念
  4. 当对象转换成JSON的时候处理时间格式
  5. [置顶] Oracle 11.2.0.3.0 Active Data Guard 遇 ORA-10458、ORA-01152、ORA-01110 错误
  6. Windows Server 2008 将与 Visual Studio 2008 和 SQL Server 2008 于2008年2月27 日在洛杉矶共同发布...
  7. 相等运算符重载中的问题
  8. mysql 时间序列可视化工具_mysql – 从from到to条目创建时间序列
  9. 450g带盖吐司配方_【配方分享】预祝冬安 明石克彦老师的提子吐司
  10. 模拟电子技术不挂科学习笔记3(放大电路的分析方法)