freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

osip協(xié)議棧及exosiportp等使用入門(文件)

2025-08-14 16:56 上一頁面

下一頁面
 

【正文】 本完整可用的 SIP 軟電話YouToo 版本的 VC 源碼工程文件作參考 )。 我們可以在代碼中看到很多 OSIP_TRACE,這是調(diào)試輸出宏調(diào)用了函數(shù)osip_trace,可以用 ENABLE_TRACE 宏來打開調(diào)試以方便我們開發(fā)調(diào)試。eXosip)是比較有意思的,它讓下面的 eXosip_set_callbacks(osip)給 osip 設(shè)置大量的回調(diào)函數(shù)時,能讓 osip能訪問到 eXosip 這個全局變量中設(shè)置的大量程序運(yùn)行時交互的信息,相當(dāng)于我們在 VC 下開啟一個線程時,給線程傳入的一個 void 指針指向我們的 MFC 應(yīng)用程序的當(dāng)前 dialog 對象實(shí)例,可以用void*osip_get_application_context(osip_t*osip)這個函數(shù)來取出指針來使用,不過好象 exosip 中并沒有用到它,可能是留給個人自已擴(kuò)展的吧 還能看到初始化代碼前面有一段 WIN32 平臺下的 SOCK 的初始化代碼,可以知道 eXosip 是用的原生的 winsock api 函數(shù),也就是我們可能以前學(xué)過的用VC和 WINAPI 寫 sock 程序時 (不是 MFC),用到的那段 SOCK 初始代碼,還有一段有意思的代碼,就是 jpipe()函數(shù),它們返回的是一個管道,一個有 2個整型數(shù)值的數(shù)組 (一個進(jìn)一個出 ),查看其代碼發(fā)現(xiàn),非 WIN32 平臺是直接使用的pipe 系統(tǒng)函數(shù),而 WIN32 下則是用一對 TCP 的本地 SOCK 連接來模擬的管道,一個 SOCK 寫一個 SOCK 讀,這段代碼是比較有 參考價(jià)值的: ) j=50; while(aport++amp。 eXosip_set_callbacks(osip)沒有什么好看的,無非是和 oSIP 官方文檔介紹的一樣,設(shè)置一大堆的回調(diào)函數(shù),關(guān)鍵是回調(diào)函數(shù)的實(shí)現(xiàn),這也是許多初學(xué)者使用 oSIP 被卡殼的主要原因,不知道 oSIP 構(gòu)建的程序是怎樣跑起來的,隨便選幾個回調(diào)函數(shù)看一下 eXosip 是怎樣實(shí)現(xiàn)的,有許多是形如下文的函數(shù): static void cb_sndbye(int type,osip_transaction_t*tr,osip_message_t*sip) { OSIP_TRACE(osip_trace (__FILE__,__LINE__,OSIP_INFO3,NULL,cb_sndbye(id=%i)\r\n, trtransactionid)); } 即,只是打印一下調(diào)試,并沒有完整實(shí)現(xiàn)什么功能,我們學(xué)習(xí)時,完全可以用相同的方法,定義一大堆回調(diào)函數(shù),并不忙想怎么完全實(shí)現(xiàn),先都是只打印一下調(diào)試信息,看具體的應(yīng)用邏輯根據(jù)抓包測試分析和看調(diào)試看程序走到 了哪一步,調(diào)用了哪一個回調(diào),來明白具體回調(diào)函數(shù)要實(shí)現(xiàn)什么用途,再來實(shí)現(xiàn)代碼就方便多了,當(dāng)然,如果看透了 RFC 文檔,應(yīng)該從字面就能知道各個回調(diào)函數(shù)的用途了,這是后話,不是誰都能快速完全看懂 RFC 的,所以我們要參考eXosip: ) 我們對其中的重要的回調(diào)函數(shù)進(jìn)行逐個的分析: osip_set_cb_send_message(osip,amp。message,amp。 從代碼可知,只是在 NOTIFY,SUBSCRIBE,OPTION 操作失敗才進(jìn)行處理,其它錯誤可直接忽略。 其它 4xx, 5xx, 6xx 則分別是對應(yīng)的處理,根據(jù)實(shí)現(xiàn)情況進(jìn)行概要的查看即可。 下面來說一下消息處理回調(diào)函數(shù)用到的 SOCK 的初始化函數(shù),即我們上面說的除了系統(tǒng)初始化外的網(wǎng)絡(luò)初始化函數(shù) eXosip_listen_addr: 從上文知道了,系統(tǒng)將初始化兩個 SOCK,一個 UDP 一個 TCP,但查看代碼發(fā)現(xiàn)還有第三個, TCPs 的,但好象還不能實(shí)用,現(xiàn)在不管它,代碼首先是根據(jù)傳輸是 UDP 還是 TCP 來設(shè)置對應(yīng)的數(shù)組值,并且如果沒有提供 IP 地址和端口號,系統(tǒng)會自動取出本機(jī)網(wǎng)絡(luò)接口并創(chuàng)建可用的 SOCK(_port 的方式暫不用考慮 )。 如果沒有找到事務(wù)狀態(tài)機(jī)呢 ?直接丟棄嗎 ?不是的,如果這是一個回應(yīng)消息,但沒有事務(wù)狀態(tài)機(jī)處理它,那它是一個錯誤的,要進(jìn)行清理后才能丟棄,而如果是一個請求,那更不能丟棄了,因?yàn)?UAS 事務(wù)狀態(tài)機(jī)要由它來啟動創(chuàng)建的。 線程調(diào)用的事件處理函數(shù)代碼最后是 if( 0) { _eXosip_keep_alive(); } 這段代碼印證了上文提到了, keep_alive 是用來設(shè)置是否自動重新注冊,由 _eXosip_keep_alive 函數(shù)來實(shí)現(xiàn)自動將 eXosip 全局變量中保存的注冊消息解析后自動根據(jù)需要重新向 SIP 服務(wù)器發(fā)起 Register 注冊。 另有 osip_new_outgoing_sipmessage(reg),表示發(fā)送消息,到這里,我們應(yīng)該可以理解,真實(shí)的發(fā)送操作,是要到由狀態(tài)機(jī)處理后,調(diào)用了消息發(fā)送回調(diào)函數(shù)才真正地將注冊消息發(fā)送出去的。 特別聲明: 1: 資料來源于互聯(lián)網(wǎng),版權(quán)歸屬原作者 2:資料內(nèi)容屬于網(wǎng)絡(luò)意見,與本賬號立場無關(guān) 3:如有侵權(quán),請告知,立即刪除。transaction,ICT,invite)初始化了狀態(tài)機(jī),之前還有一個 eXosip_call_init 是用來初始化 eXosip 的一些參數(shù)的,暫時不管它,同樣 osip_new_outgoing_sipmessage(invite)發(fā)送呼叫消息,但實(shí)際還是要狀態(tài)機(jī)處理后調(diào)用消息發(fā)送回調(diào)函數(shù)真實(shí)發(fā)送呼叫請求函數(shù)的,osip_transaction_add_event(transaction,sipevent)則標(biāo)準(zhǔn)地,將事件入狀態(tài)機(jī),狀態(tài)機(jī)將能處理隨后的應(yīng)用邏輯調(diào)用相應(yīng)的回調(diào)函數(shù)了。 eXosip_register_send_register 中可以看到是_eXosip_transaction_init(amp。 請求事件處理 eXosip_process_newrequest,首先是對事件進(jìn)行探測,MSG_IS_INVITE、 MSG_IS_ACK、 MSG_IS_REQUEST…,對事件進(jìn)行所屬狀態(tài)機(jī)分類,隨后使用_eXosip_transaction_init(amp。 看到 _eXosip_execute 的代碼中有很多時間函數(shù)和變量,仔細(xì)看,調(diào)用了osip_timers_gettimeout 而不是系統(tǒng) API 為了跨平臺,來實(shí)現(xiàn)定時器功能,除去一些控制代碼,主要處理
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1