osip状态机分析「建议收藏」

osip状态机分析「建议收藏」OSIP的核心是系统状态机,在不同情况下,系统处于不同的状态,在某一状态下当系统发生某一个动作后(如接受或者发送了消息),状态机做相应的跳转。的状态机在不同的状态下,对某一动作的响应也是不一样的。由于SIP的复杂性,为了降低代码实现难度,也为了能够保证代码的模块化,Osip把整个SIP的实现分成了四个状态机,分别是:      (1)ICT(带invit事件的out处理)

大家好,又见面了,我是你们的朋友全栈君。

OSIP的核心是系统状态机,在不同情况下,系统处于不同的状态,在某一状态下当系统发生某一个动作后(如接受或者发送了消息),状态机做相应的跳转。的状态机在不同的状态下,对某一动作的响应也是不一样的。

由于SIP的复杂性,为了降低代码实现难度,也为了能够保证代码的模块化,Osip把整个SIP的实现分成了四个状态机,分别是:

       (1)ICT (带invit事件的out处理)

       (2)IST (带invit事件的in处理)

       (3)NCT(不带invit事件的out处理)

       (4)NST(不带invit事件的in处理)

实际上,1和2是一队连接,1负责一个callout,2负责一个相应的callin,3和4也是一样,不同之处是他们负责的是不带invite的请求,比如NOTIFY,SUBSCRIBE等等。下面对这些状态机做说明。

(1)      ICT    callout的状态机,当系统make a call out的时候,系统处于这个状态机,这个状态机处理1xx,2xx,3xxx等消息,围绕这些消息,系统的状态机切换状态。

(2)      IST  callin的状态机,当系统接收到一个invite请求后,系统处于这个状态机下,在这个状态机下,系统发送1xx,2xx消息。可以看到,状态机1和2负责电话呼叫流程的控制,而3和4负责其它的非呼叫的状态控制。

(3)      NCT 无invite的out请求的状态机,实际上就是初了invit呼叫的其它状态处理,比如NOTIFY等等。

(4)      NST无invite的in请求的状态机,和上面的对应,没什么好讲。

这四个状态机的实现是基本一致的,你理解了其中一个,理解其他三个就没有任何问题了,在这里我详细的将第一个,其它的您可以举一反三。如果看这些东西有困难,建议您先看下RTC3261,熟悉下SIP呼叫流程,这也许对您理解OSIP状态机有帮助。

 

状态机ICT(Invite client callout)说明

 

1、 说明:

本文件的作用是解释终端callout的时候的状态控制,它是osip中的四个状态机中最重要的一个,处理callout的各种事件,比如180,200,timeout等等。文件中的函数是系收发消息的核心处理函数,为状态机切换服务。其它三个状态机和此类似。

包含文件:fsm.h、ict_fsm.c、ist_fsm.c、ict.c、ist.c。

状态五种状态机:

    ICT_PRE_CALLING

    ICT_CALLING

    ICT_PROCEEDING

    ICT_COMPLETED

    ICT_TERMINATED

ICT_PRE_CALLING:

呼叫前的状态,系统处于准备状态。系统调用osip_transaction_init函数后,系统初始化,处于这个状态。在这个状态下,系统调用ict_snd_invite,发送invte请求出去后,系统跳转到ICT_CALLING状态。

ICT_CALLING:

已经成功发送invit请求,但还没有收到远方的任何响应的时候,系统处于此状态。在这个状态下,当timeouta时间到达后,系统会冲发消息,以确保对方可以收到请求包。当timeb时间到达后,系统认为对方无响应,状态直接跳到ICT_TERMINATED状态,释放资源完成此次呼叫。

当系统在此状态下接收到1xx消息后,认为对方有响应,则系统跳到ICT_PROCEEDING状态。

ICT_PROCEEDING:

当系统发送invite后,接收到对方的响应(100 trying),系统跳到此状态。正常接收到200 OK后,系统跳到ICT_TERMINATED,认为完成一次请求。如果接收到3456xxx等请求,系统跳到ICT_COMPLETED,发送ACK给对方(有些不需要发送ACK),设置timeoutd时间,等待D时间到来。

ICT_COMPLETED:

当系统接收到3456xx的时候,系统发送ACK给对方,系统处于此状态,当timeoutd时间到达后,系统跳到ICT_TERMINATED状态,完成一次呼叫。

ICT_TERMINATED:

完成一次呼叫,这是状态机的必经的最后一个状态。状态到达这里,就表示了一个状态机的完结,也就表示了一个呼叫的完结,无论成功于否,最后都会到达这个终结状态。

系统状态切换的函数见状态图,图中其它几个timout事件函数没有添加,需要了解的请自己查阅文件。

osip状态机分析「建议收藏」

                                           图1 ICT状态机                                                                                    

osip状态机分析「建议收藏」

图2 sip完整通话抓包

osip状态机分析「建议收藏」

图3 sip通话拒接抓包

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148355.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 【Java安全技术探索之路系列:Java可扩展安全架构】之五:JCE(一):JCE架构介绍

    【Java安全技术探索之路系列:Java可扩展安全架构】之五:JCE(一):JCE架构介绍作者:郭嘉邮箱:allenwells@163.com博客:http://blog.csdn.net/allenwellsgithub:https://github.com/AllenWellJCE最初是作为JCA的扩展包开发的,旨在提供受美国出口控制条例管制的加密服务API和实现。JCE提供一个提供者实现和一组相关的API和包,以支持加密和解密,密钥的生成和协商以及消息验证算法,其中对加

    2022年6月22日
  • 树莓派更换pip源

    树莓派更换pip源注:pip更换为国内源,可以大大的提高安装成功率和速度。不管你用的是pip3还是pip,方法都是一样的,如下:例:这里举例换豆瓣源(个人认为它比较好用)先创建这个文件vim~/.pip/pip.conf在里面添加如下内容:[global]timeout=6000index-url=http://pypi.douban.com/simple/[install]use-mi…

    2022年6月4日
  • 上海电信光猫SA1456C桥接后4K IPTV继续使用[通俗易懂]

    上海电信光猫SA1456C桥接后4K IPTV继续使用[通俗易懂]上海电信光猫SA1456C路由器TL-R488GPM-AC背景:打电话给上海电信客服被告知,改桥接不能看4KIPTV,电信安装师傅也是同一口径。网上也是很多类似观点,解决方案是用软路由方式去改造。这种方案需要软路由,万一不稳定,会影响家庭安定团结的局面。需求:1、光猫直接接IPTV看,有两条IPTV接路由器即可,不需要更改任何东西。2、光猫桥接路由器,路由器宽带拨号,保证贤妻上网和IPTV的基本需求,再接旁路由满足自己小玩法。当然如有移动或联通送的宽带更好。核心:稳定简单,不折腾。如何光

    2022年10月8日
  • 企业如何制定SOP?

    企业如何制定SOP?企业制定SOP的根本目的是为了提高企业的管理运营能力,使得企业运行效率和运行效果得以改善,从而为企业带来更大的效益,每个企业由于管理模式不同,制定SOP会有所区别。

    2022年5月25日
  • 树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作

    树莓派4b c语言,【树莓派4B学习】七、树莓派4B的GPIO基础操作链接:https://pan.baidu.com/s/1icgrCoc-piC0Eid0NlRlMA提取码:6h0b一、主流GPIO库介绍【pythonGPIO】【开发语言】——python【简单介绍】——该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。pythonGPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操…

    2022年5月31日
  • Tomcat闪退问题

    Tomcat闪退问题这两天快被这些搞的头大了,tomcat重配了几次,老出现闪退的问题(直接下的tomcat8.0压缩包免安装),总结下来有三个方面,大家如果也遇到这个问题,可以试试下面三个办法:1.网上帖子基本上说出现这个问题最大的原因是因为环境变量没有配对,大家可以参见下面这个帖子比对一下:http://blog.csdn.net/wsad_hjk/article/details/27374753我这里jdk8….

    2022年5月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号