FreeSwitch呼入处理流程
? ? ? ? 為了簡單起見,本文分析一個單邊呼叫。讓終端呼入到FS,然后播放一個文件就退出,不執(zhí)行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,調(diào)用模塊初始化時注冊的回調(diào)函數(shù)sofia_event_callback()。處理新的INVITE請求,首先調(diào)用switch_core_session_request_uuid()實(shí)例化Session對象,同時實(shí)例化Channel對象,并把Channel狀態(tài)初始化為CS_NEW,激活通道處理線程。
? ? ? ? Sofia棧進(jìn)一步處理INVITE消息,拋出nua_i_invite事件通報事件進(jìn)展,這時驅(qū)動狀態(tài)機(jī)變化,狀態(tài)機(jī)由CS_NEW狀態(tài)遷移到CS_INIT狀態(tài)。最終由狀態(tài)機(jī)核心代碼里的switch_core_standard_on_init()驅(qū)動狀態(tài)遷移到CS_ROUTING。進(jìn)而執(zhí)行核心回調(diào)switch_core_standard_on_routing(),這個函數(shù)執(zhí)行撥號方案的定位與查找,記錄一個todo list,查找結(jié)束后,狀態(tài)遷移到CS_EXECUTE。核心回調(diào)switch_core_standard_on_execute()挨個執(zhí)行前一步todo list的APP。執(zhí)行answer時,會觸發(fā)?SIP的200?OK消息發(fā)出;當(dāng)執(zhí)行完最后一條APP后,觸發(fā)一個hangup,即發(fā)SIP?BYE消息。
? ? ? ? 后續(xù)的狀態(tài)遷移省略。
?
說明:呼叫狀態(tài)機(jī)會調(diào)用所有注冊的狀態(tài)回調(diào)函數(shù),上圖中僅體現(xiàn)推動狀態(tài)遷移的關(guān)鍵調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的FreeSwitch呼入处理流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 只读文件 删除,linux
- 下一篇: 传感器的应用/SurfaceView/制