FreeSwitch呼入处理流程
? ? ? ? 為了簡單起見,本文分析一個單邊呼叫。讓終端呼入到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呼入处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 只读文件 删除,linux
- 下一篇: 传感器的应用/SurfaceView/制