OSIP工作原理和过程2 osip2 exosip2

三、工作过程

1、系统初始化过程。

在OSIP工作之前,必须先初始化,主要有以下几个部分:

(1)系统资源申请,包括资源和链表的处理。

函数:osip_init()

(2)设置系统CALLBACK函数

osip_set_cb_send_message ();//系统的信令发送函数,在这个函数中,要完成信令包的向外发送功能。这个函数在后面会详细的讲。

osip_set_kill_transaction_callback();//设置四个状态机下消息传输失败的处理函数。

osip_set_message_callback();//设置各种状态机下各种事件发生后用户的回调,注意:你可以只设置你需要的,对你不关心的,你可以不设置,那么这些事件发生的时候,系统就不会处理。比如你可以不对1XX消息处理,那么你不对挂1xx事件对挂就可以了。

(3)打开接收远端消息接收通道。

打开通道就是保证远方的消息能够顺利的被本地接收到,然后交给SIPCORE处理,它包括以下几个步骤

Step1:监听端口

打开SIP端口SOCKET,然后监听此端口,如5060。但目前SIP被封杀,所以建议您换一个。需要注意的是,SIP支持TCP和UDP两种方式,请注意这两种方式的不同。

Step2:解析消息

接收到消息后,调用osip_parse函数,来完成对消息包的解析。这个函数完成后,消息就从普通信令消息分解成了OSIP2自己可以理解的消息事件。osip_parse函数在srcosipparser2,应该说是比较复杂的,需要的时候可以自己看代码,但我的建议是,在不需要的时候,没有看这些代码的必要,这些代码中,只有你在深入的时候,才需要理解,如果您是初学,似乎没有这个必要。

Step3:将消息送给SIPCORE处理

解析后的消息,系统调用osip_find_transaction_and_add_event函数,把消息发送给和此消息相关的处理事务(或者说session),如果系统中没有和这个消息相关的session(也就是说是个新的request),那么此时将新建立一个session(或者说transaction,因为在不同层面有不同理解),用于处理新的事务。实际上,这个session创立的过程也就是一个新的系统状态机的建立过程,根据这个消息的种类,osip_transaction_init负责初始化,建立一个新的和种类对应的状态机(四种状态机中的一种),然后调用osip_transaction_add_event把消息扔给这个刚建立起来的状态机处理。一个新的状态机也就开始运做。

到此,OSIP就已经正常工作,可以接收网络来的消息。

2、一个呼叫过程。

下面通过一对呼叫的连接过程说明OSIP的消息的整个处理过程。假设终端A呼叫终端B,两方都是用的OSIPCORE。注意:阅读以下的东西的时候我认为你已经理解了我上面说的东西,并且对OSIP的状态机有了一个比较完整的理解,如果不理解,请先阅读另一篇文挡:osip2的状态机分析。

Stp1:A生成一个Invite消息

这个过程是大家都熟悉的过程,也就是利用本地信息,组建一个SIP包的过程,需要注意的是:rtp流的本地接收发送端口是在这里就建立的,然后放到SDP中。

Step2:A把生成的消息交给核心处理。

首先系统调用osip_transaction_init ,产生一个新的状态机。在发送invite请求的时候,这个状态机是ICT(带invite的client端状态机)。状态机产生后,系统调用函数把消息扔给状态机处理,osip_transaction_add_event负责把消息插到队列中。

Step3:A的ICT状态机调用ict_snd_invite函数发送invite包给对方,状态机自身从初始状态跳转到calling状态,等待对方回应,并设置响应的A超时和B超时,当A超时到达的时候,向对方重发一次数据包,并且把A的时间增加一倍(最长为4S,如果超过4S,将不再增加)。当B时间到达后,系统认为对方没有响应,则释放资源,结束本次操作。

Step4:B的信令监听端口接收到此invite请求包,调用osip_parse函数,来完成对消息包的解析,然后系统调用osip_find_transaction_and_add_event函数来试图把此消息包插入已经存在的session的传输队列(比如系统还有另外一个呼叫),当系统发现当前信令包并不属于已经存在的session的时候,系统认为之是一个新的呼叫过程,因此,系统调用osip_transaction_init函数建立一个新的状态机来处理这个session,这个状态机也就是IST(带invie的server状态机),然后把信令消息插到新状态机的事件列表中,供其处理。

Step5:B的IST处理A的invite请求,自身的状态机从IST_PRE_PROCEEDING跳转到IST_PROCEEDING状态,并发送100消息给对方,调用用户设置的回调函数来完成用户收到请求时候的处理。注意,B应该发两次1XX消息给对方,一个是100,一个是180。因为这两个类似就不写了,下面的状态也一样。

Step6:A收到1xx的回应,自身从ICT_CALLING状态跳转到ICT_PROCEEDING状态,并调用用户的回调函数来完成用户的要求。注意,A会收到B过来的两次1XX消息,参考step5的说明。

Step7:B的用户认可,可以接收A的此次呼叫,B发送调用ist_snd_2xx函数,发送200OK消息给A,B的状态机IST从IST_PROCEEDINGIST_TERMINATED。完成一次IST的服务。

Step8:A接收到2000K,状态机跳转到ICT_TERMINATED状态,完成一个ICT服务。

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/359012.html

更多阅读

电磁炉工作原理和结构 电磁炉工作原理详解

美的电磁炉维修手册包含MC-PSD/A/B/C/D/E、MC-PF10E、MC-PF16JA、MC-PF18B维修案例第一章 电磁炉工作原理和结构第一节 电磁炉工作原理电磁炉主要是利用电磁感应原理将电能转换为热能的厨房电器,当电磁炉在正常工作时,由整流电路将50H

声明:《OSIP工作原理和过程2 osip2 exosip2》为网友散场后分享!如侵犯到您的合法权益请联系我们删除