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

FS SIP呼叫的消息線程和狀態(tài)機(jī)線程

系統(tǒng) 2449 0

THREAD

當(dāng)收到一次呼叫的時(shí)候, FS 會(huì)在 TU 層創(chuàng)建兩個(gè)線程,一個(gè)線程為狀態(tài)機(jī)線程,另外一個(gè)為消息線程。狀態(tài)機(jī)線程通過(guò) switch_core_session_thread_launch創(chuàng)建,顧名思義其作用是不斷的檢查channel 的狀態(tài),并進(jìn)行處理。以下為詳細(xì)處理過(guò)程。

狀態(tài)機(jī)的執(zhí)行機(jī)制:

2 個(gè)回調(diào)函數(shù)

分別為:

const?switch_state_handler_table_t?*driver_state_handler?=?NULL;

const?switch_state_handler_table_t?*application_state_handler?=?NULL;

?

下面為具體的代碼分析:

FS 里面有大量的結(jié)構(gòu)體,其變量的類型為函數(shù)指針。然后定義此結(jié)構(gòu),直接使用全局函數(shù)名稱進(jìn)行初始化。達(dá)到回調(diào)的效果。

例:

結(jié)構(gòu)體

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;

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

};

全局結(jié)構(gòu)變量

switch_state_handler_table_t?sofia_event_handlers?=?{

/*.on_init?*/?sofia_on_init,

/*.on_routing?*/?sofia_on_routing,

。。。

};

通過(guò)sofia_event_handlers 即可對(duì)所有的函數(shù)進(jìn)行調(diào)用。

?

通過(guò)宏定義進(jìn)行回調(diào)

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

?

狀態(tài)機(jī)的回調(diào)過(guò)程,下圖:

?

??概括為:

1、根據(jù)狀態(tài)機(jī)的狀態(tài)執(zhí)行 mod_sofia 中對(duì)應(yīng)的回調(diào)函數(shù)

2、根據(jù)狀態(tài)機(jī)的狀態(tài)執(zhí)行 application core 設(shè)置的對(duì)應(yīng)的回調(diào)函數(shù)

3、如果狀態(tài)沒有發(fā)生改變根據(jù)狀態(tài)機(jī)的狀態(tài)執(zhí)行對(duì)應(yīng)的 standard 函數(shù)

?

l?狀態(tài)機(jī)狀態(tài)一覽

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;

以上為呼叫過(guò)程中的所有狀態(tài)機(jī)。其中標(biāo)注藍(lán)色的狀態(tài)會(huì)根據(jù)當(dāng)前狀態(tài)執(zhí)行狀態(tài)機(jī)函數(shù)。

修改 channel 狀態(tài)

當(dāng) channel 的狀態(tài)發(fā)生改變,進(jìn)行修改時(shí),會(huì)進(jìn)行喚醒動(dòng)作,把之前進(jìn)入 sleep session 線程喚醒。然后從新執(zhí)行狀態(tài)機(jī)。

?

另外一個(gè)線程為消息線程,其功能為不斷的從呼叫對(duì)應(yīng)的消息隊(duì)列里面取出消息,并進(jìn)行處理,我在 SESSION 文檔里面有過(guò)描述,會(huì)創(chuàng)建一個(gè)消息隊(duì)列。

消息的處理會(huì)在消息隊(duì)列里面進(jìn)行描述。這里不再消息講述。

FS SIP呼叫的消息線程和狀態(tài)機(jī)線程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 砀山县| 蓬莱市| 上杭县| 万载县| 阜新市| 山东省| 海丰县| 宣城市| 铜川市| 容城县| 武城县| 郓城县| 望都县| 弥渡县| 安多县| 富蕴县| 台北市| 陇川县| 靖州| 营口市| 天柱县| 罗城| 中牟县| 江西省| 民权县| 岳池县| 玛沁县| 商都县| 随州市| 浏阳市| 新化县| 台湾省| 卫辉市| 扎鲁特旗| 平湖市| 托克逊县| 达拉特旗| 民和| 建昌县| 栾城县| 航空|