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

正文內(nèi)容

osip協(xié)議棧及exosiportp等使用入門(參考版)

2025-07-25 16:56本頁(yè)面
  

【正文】 特別聲明: 1: 資料來(lái)源于互聯(lián)網(wǎng),版權(quán)歸屬原作者 2:資料內(nèi)容屬于網(wǎng)絡(luò)意見(jiàn),與本賬號(hào)立場(chǎng)無(wú)關(guān) 3:如有侵權(quán),請(qǐng)告知,立即刪除。transaction,ICT,invite)初始化了狀態(tài)機(jī),之前還有一個(gè) eXosip_call_init 是用來(lái)初始化 eXosip 的一些參數(shù)的,暫時(shí)不管它,同樣 osip_new_outgoing_sipmessage(invite)發(fā)送呼叫消息,但實(shí)際還是要狀態(tài)機(jī)處理后調(diào)用消息發(fā)送回調(diào)函數(shù)真實(shí)發(fā)送呼叫請(qǐng)求函數(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ù)了。 另有 osip_new_outgoing_sipmessage(reg),表示發(fā)送消息,到這里,我們應(yīng)該可以理解,真實(shí)的發(fā)送操作,是要到由狀態(tài)機(jī)處理后,調(diào)用了消息發(fā)送回調(diào)函數(shù)才真正地將注冊(cè)消息發(fā)送出去的。 eXosip_register_send_register 中可以看到是_eXosip_transaction_init(amp。 線程調(diào)用的事件處理函數(shù)代碼最后是 if( 0) { _eXosip_keep_alive(); } 這段代碼印證了上文提到了, keep_alive 是用來(lái)設(shè)置是否自動(dòng)重新注冊(cè),由 _eXosip_keep_alive 函數(shù)來(lái)實(shí)現(xiàn)自動(dòng)將 eXosip 全局變量中保存的注冊(cè)消息解析后自動(dòng)根據(jù)需要重新向 SIP 服務(wù)器發(fā)起 Register 注冊(cè)。 請(qǐng)求事件處理 eXosip_process_newrequest,首先是對(duì)事件進(jìn)行探測(cè),MSG_IS_INVITE、 MSG_IS_ACK、 MSG_IS_REQUEST…,對(duì)事件進(jìn)行所屬狀態(tài)機(jī)分類,隨后使用_eXosip_transaction_init(amp。 如果沒(méi)有找到事務(wù)狀態(tài)機(jī)呢 ?直接丟棄嗎 ?不是的,如果這是一個(gè)回應(yīng)消息,但沒(méi)有事務(wù)狀態(tài)機(jī)處理它,那它是一個(gè)錯(cuò)誤的,要進(jìn)行清理后才能丟棄,而如果是一個(gè)請(qǐng)求,那更不能丟棄了,因?yàn)?UAS 事務(wù)狀態(tài)機(jī)要由它來(lái)啟動(dòng)創(chuàng)建的。 看到 _eXosip_execute 的代碼中有很多時(shí)間函數(shù)和變量,仔細(xì)看,調(diào)用了osip_timers_gettimeout 而不是系統(tǒng) API 為了跨平臺(tái),來(lái)實(shí)現(xiàn)定時(shí)器功能,除去一些控制代碼,主要處理函數(shù)是eXosip_read_message(1,),即取出消息,1表示只取出一條消息,其代碼量非常的大,但同樣的,其中也許多的控制代碼和錯(cuò)誤檢測(cè)代碼,我們?cè)诓榭磿r(shí)可以暫時(shí)忽略掉它們。 下面來(lái)說(shuō)一下消息處理回調(diào)函數(shù)用到的 SOCK 的初始化函數(shù),即我們上面說(shuō)的除了系統(tǒng)初始化外的網(wǎng)絡(luò)初始化函數(shù) eXosip_listen_addr: 從上文知道了,系統(tǒng)將初始化兩個(gè) SOCK,一個(gè) UDP 一個(gè) TCP,但查看代碼發(fā)現(xiàn)還有第三個(gè), TCPs 的,但好象還不能實(shí)用,現(xiàn)在不管它,代碼首先是根據(jù)傳輸是 UDP 還是 TCP 來(lái)設(shè)置對(duì)應(yīng)的數(shù)組值,并且如果沒(méi)有提供 IP 地址和端口號(hào),系統(tǒng)會(huì)自動(dòng)取出本機(jī)網(wǎng)絡(luò)接口并創(chuàng)建可用的 SOCK(_port 的方式暫不用考慮 )。 OSIP_NIST_STATUS_XXX_SENT 即對(duì)應(yīng)于上面的 uac的處理,這里是 uas 的對(duì)應(yīng)的消息處理,相比較于 uac 簡(jiǎn)單一點(diǎn)。 其它 4xx, 5xx, 6xx 則分別是對(duì)應(yīng)的處理,根據(jù)實(shí)現(xiàn)情況進(jìn)行概要的查看即可。 OSIP_ICT_STATUS_1XX_RECEIVED uac 收到 1xx 消息,一般是表示對(duì)端正在處理中,這時(shí),主要是設(shè)置一下事務(wù)狀態(tài)機(jī)的狀態(tài)值,并對(duì)會(huì)話中的 osip 的一些參數(shù)根據(jù)返回值進(jìn)行相應(yīng)設(shè)置,里面有許多條件判斷,但我們常用的一般是100,180,183 的判斷而已,暫 時(shí)可以忽略里面復(fù)雜的判斷代碼。 從代碼可知,只是在 NOTIFY,SUBSCRIBE,OPTION 操作失敗才進(jìn)行處理,其它錯(cuò)誤可直接忽略。 cb_tcp_snd_essage 的函數(shù)實(shí)現(xiàn)要比上文的 udp 的實(shí)現(xiàn)簡(jiǎn)單很多,主要是環(huán)境探測(cè)錯(cuò)誤控制方面,因?yàn)楫吘?tcp 是穩(wěn)定連接的,對(duì)比一下代碼,可以看到主要流程還是將 SIP 消息轉(zhuǎn)換后,發(fā)送到從 SIP 消息中解析出的 host 和port 對(duì)應(yīng)的目標(biāo)。message,amp。 *畢竟 eXosip 是一個(gè)通用的開(kāi)發(fā)庫(kù),它考慮了要支持TCP,UDP,TCPs,IPV4,IPV6, WIN32,*nix,WINCE 等等多樣化的復(fù)雜環(huán)境,所以,我們可以略過(guò)我們暫時(shí)不需要的部分,比如, IPV6 相關(guān)的代碼實(shí)現(xiàn)等。 eXosip_set_callbacks(osip)沒(méi)有什么好看的,無(wú)非是和 oSIP 官方文檔介紹的一樣,設(shè)置一大堆的回調(diào)函數(shù),關(guān)鍵是回調(diào)函數(shù)的實(shí)現(xiàn),這也是許多初學(xué)者使用 oSIP 被卡殼的主要原因,不知道 oSIP 構(gòu)建的程序是怎樣跑起來(lái)的,隨便選幾個(gè)回調(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)試,并沒(méi)有完整實(shí)現(xiàn)什么功能,我們學(xué)習(xí)時(shí),完全可以用相同的方法,定義一大堆回調(diào)函數(shù),并不忙想怎么完全實(shí)現(xiàn),先都是只打印一下調(diào)試信息,看具體的應(yīng)用邏輯根據(jù)抓包測(cè)試分析和看調(diào)試看程序走到 了哪一步,調(diào)用了哪一個(gè)回調(diào),來(lái)明白具體回調(diào)函數(shù)要實(shí)現(xiàn)什么用途,再來(lái)實(shí)現(xiàn)代碼就方便多了,當(dāng)然,如果看透了 RFC 文檔,應(yīng)該從字面就能知道各個(gè)回調(diào)函數(shù)的用途了,這是后話,不是誰(shuí)都能快速完全看懂 RFC 的,所以我們要參考eXosip: ) 我們對(duì)其中的重要的回調(diào)函數(shù)進(jìn)行逐個(gè)的分析: osip_set_cb_send_message(osip,amp。j0) { =htons((short)aport); if(bind(s,(struct sockaddr*)amp。eXosip)是比較有意思的,它讓下面的 eXosip_set_callbacks(osip)給 osip 設(shè)置大量的回調(diào)函數(shù)時(shí),能讓
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1