概述
为了简单起见,本文分析一个单边呼叫。让终端呼入到FS,然后播放一个文件就退出,不执行FS的呼出动作。参考拨号方案:
<extension name="fs_one_way_inbound">
<condition field="destination_number" expression="^10086$">
<action application="sleep" data="1000 "/>
<action application="answer"/>
<action application="playback" data="ivr/8000/ivr-welcome_to_freeswitch.wav"/>
</condition>
</extension>
Sofia栈捕获INVITE消息后,处理100 Trying,调用模块初始化时注册的回调函数sofia_event_callback()。处理新的INVITE请求,首先调用switch_core_session_request_uuid()实例化Session对象,同时实例化Channel对象,并把Channel状态初始化为CS_NEW,激活通道处理线程。
Sofia栈进一步处理INVITE消息,抛出nua_i_invite事件通报事件进展,这时驱动状态机变化,状态机由CS_NEW状态迁移到CS_INIT状态。最终由状态机核心代码里的switch_core_standard_on_init()驱动状态迁移到CS_ROUTING。进而执行核心回调switch_core_standard_on_routing(),这个函数执行拨号方案的定位与查找,记录一个todo list,查找结束后,状态迁移到CS_EXECUTE。核心回调switch_core_standard_on_execute()挨个执行前一步todo list的APP。执行answer时,会触发 SIP的200 OK消息发出;当执行完最后一条APP后,触发一个hangup,即发SIP BYE消息。
后续的状态迁移省略。
说明:呼叫状态机会调用所有注册的状态回调函数,上图中仅体现推动状态迁移的关键调用。
最后
以上就是失眠小甜瓜为你收集整理的FreeSwitch呼入处理流程的全部内容,希望文章能够帮你解决FreeSwitch呼入处理流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复