日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

FS SIP呼叫的消息線程和狀態機線程

系統 2424 0

THREAD

當收到一次呼叫的時候, FS 會在 TU 層創建兩個線程,一個線程為狀態機線程,另外一個為消息線程。狀態機線程通過 switch_core_session_thread_launch創建,顧名思義其作用是不斷的檢查channel 的狀態,并進行處理。以下為詳細處理過程。

狀態機的執行機制:

2 個回調函數

分別為:

const?switch_state_handler_table_t?*driver_state_handler?=?NULL;

const?switch_state_handler_table_t?*application_state_handler?=?NULL;

?

下面為具體的代碼分析:

FS 里面有大量的結構體,其變量的類型為函數指針。然后定義此結構,直接使用全局函數名稱進行初始化。達到回調的效果。

例:

結構體

struct?switch_state_handler_table?{

/*!?executed?when?the?state?changes?to?init?*/

switch_state_handler_t?on_init;

/*!?executed?when?the?state?changes?to?routing?*/

switch_state_handler_t?on_routing;

。。。。/ 這里只顯示部分

};

全局結構變量

switch_state_handler_table_t?sofia_event_handlers?=?{

/*.on_init?*/?sofia_on_init,

/*.on_routing?*/?sofia_on_routing,

。。。

};

通過sofia_event_handlers 即可對所有的函數進行調用。

?

通過宏定義進行回調

#define?STATE_MACRO(__STATE,?__STATE_STR)??do{....}while(...)

?

狀態機的回調過程,下圖:

?

??概括為:

1、根據狀態機的狀態執行 mod_sofia 中對應的回調函數

2、根據狀態機的狀態執行 application core 設置的對應的回調函數

3、如果狀態沒有發生改變根據狀態機的狀態執行對應的 standard 函數

?

l?狀態機狀態一覽

typedef?enum?{

CS_NEW,

CS_INIT,

CS_ROUTING,

CS_SOFT_EXECUTE,

CS_EXECUTE,

CS_EXCHANGE_MEDIA,

CS_PARK,

CS_CONSUME_MEDIA,

CS_HIBERNATE,

CS_RESET,

CS_HANGUP,

CS_REPORTING,

CS_DESTROY,

CS_NONE

}?switch_channel_state_t;

以上為呼叫過程中的所有狀態機。其中標注藍色的狀態會根據當前狀態執行狀態機函數。

修改 channel 狀態

channel 的狀態發生改變,進行修改時,會進行喚醒動作,把之前進入 sleep session 線程喚醒。然后從新執行狀態機。

?

另外一個線程為消息線程,其功能為不斷的從呼叫對應的消息隊列里面取出消息,并進行處理,我在 SESSION 文檔里面有過描述,會創建一個消息隊列。

消息的處理會在消息隊列里面進行描述。這里不再消息講述。

FS SIP呼叫的消息線程和狀態機線程


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 信宜市| 来凤县| 吉林市| 尚志市| 莲花县| 沂水县| 长武县| 湘乡市| 榕江县| 南华县| 江口县| 潮安县| 溧水县| 侯马市| 宾阳县| 馆陶县| 白沙| 平顶山市| 清徐县| 双柏县| 琼中| 阳高县| 绥化市| 佛山市| 封开县| 西乡县| 禄劝| 西乌珠穆沁旗| 萍乡市| 长兴县| 休宁县| 锡林浩特市| 南雄市| 灵璧县| 阿坝| 大理市| 固始县| 瓦房店市| 呼和浩特市| 武山县| 个旧市|