亚洲综合伊人,成人欧美一区二区三区视频不卡,欧美日韩在线高清,日韩国产午夜一区二区三区,大胆美女艺术,一级毛片毛片**毛片毛片,你瞅啥图片

您當(dāng)前的位置是:  首頁(yè) > 資訊 > 文章精選 >
 首頁(yè) > 資訊 > 文章精選 >

OpenSIPS學(xué)習(xí)筆記-無(wú)狀態(tài)模式下的呼叫確認(rèn)方式和關(guān)閉record_routing()處理討論

2021-01-11 10:06:01   作者:james.zhu    來(lái)源:Asterisk開(kāi)源派   評(píng)論:0  點(diǎn)擊:


  SIP協(xié)議的應(yīng)用場(chǎng)景非常廣泛,但是同時(shí)又非常靈活,SIP的呼叫場(chǎng)景同時(shí)需要集成和兼容不同場(chǎng)景,不同的應(yīng)用。很多用戶(hù)為了滿(mǎn)足一個(gè)簡(jiǎn)單的用戶(hù)需求,做一個(gè)配置實(shí)現(xiàn)了某一個(gè)用戶(hù)的需求,但是這樣的處理方式會(huì)在未來(lái)的實(shí)現(xiàn)中造成很多的難題。一個(gè)比較重要的原則是,在集成和兼容性的支持中,除了實(shí)現(xiàn)某些業(yè)務(wù)的需求,同時(shí)一定要盡量滿(mǎn)足SIP協(xié)議規(guī)范。一些用戶(hù)經(jīng)常在這個(gè)問(wèn)題上犯錯(cuò)誤。單方面滿(mǎn)足了用戶(hù)的需求,但是處理流程卻違反了SIP協(xié)議的規(guī)范,這樣可能就會(huì)帶來(lái)未來(lái)和其他用戶(hù)兼容的難題。在實(shí)際實(shí)現(xiàn)中經(jīng)常會(huì)遇到類(lèi)似的問(wèn)題。今天,筆者專(zhuān)門(mén)針對(duì)以上困惑,通過(guò)兩個(gè)示例(無(wú)狀態(tài)示例和關(guān)閉record_routing())來(lái)說(shuō)明其細(xì)節(jié)。
  筆者在前面的文章中已經(jīng)說(shuō)明,opensips環(huán)境下的無(wú)狀態(tài)模式基本上沒(méi)有任何可支持的場(chǎng)景,一些用戶(hù)為了實(shí)現(xiàn)某個(gè)需求或者節(jié)省系統(tǒng)資源,提高處理能力,就使用了無(wú)狀態(tài)模式處理方式。但是,因?yàn)樗槐4媸聞?wù)狀態(tài),所以不能對(duì)任何返回的響應(yīng)做處理。如果要進(jìn)行更多的SIP響應(yīng)處理,必須切換到有狀態(tài)模式進(jìn)行更多處理。
  opensips學(xué)習(xí)筆記-關(guān)于stateless和stateful 模式討論和retransmissions演示
  繼續(xù)接歷史文章的介紹,筆者這里通過(guò)使用無(wú)狀態(tài)的前轉(zhuǎn)函數(shù)來(lái)替換有狀態(tài)的轉(zhuǎn)發(fā)處理給大家演示為什么無(wú)狀態(tài)模式下沒(méi)有任何響應(yīng)處理。
  在介紹無(wú)狀態(tài)跟蹤的示例之前,讀者首先需要了解幾個(gè)比較重要的功能和工具。
  首先是“P-Hint“的工具使用,在opensips中,運(yùn)維人員可以使用“P-Hint”來(lái)對(duì)呼叫流程進(jìn)行跟蹤?梢栽谌魏瘟鞒讨写蛴∽约旱膌og來(lái)跟蹤呼叫。通過(guò)插入必要的定義log,可以判斷呼叫流程是否是按照自己的定義來(lái)進(jìn)行。
  跟蹤完整的dialog流程
  讀者需要了解無(wú)狀態(tài)模式和有狀態(tài)模式的使用的函數(shù)。這里,測(cè)試環(huán)境從前面測(cè)試的有狀態(tài)呼叫模式切換為一個(gè)無(wú)狀態(tài)的模式環(huán)境中。如果使用無(wú)狀態(tài)環(huán)境的話(huà),用戶(hù)需要修改配置文件的設(shè)置。在route[relay]中使用forward()替換t_relay()。
  route[relay] {
  if (is_method("INVITE")) {
  t_on_branch("per_branch_ops");
  t_on_reply("handle_nat");
  t_on_failure("missed_call");
  }
  #   t_relay();
  forward(); // 修改到了無(wú)狀態(tài)模式,直接前轉(zhuǎn)到目的地。
  exit;
  }
  因?yàn)樾枰櫉o(wú)狀態(tài)的響應(yīng)消息傳來(lái)流程,所以需要在onreply_route[]打印輸出的跟蹤log:
  onreply_route[handle_nat] {
  append_hf("P-hint: (3)reply through onreply_route[handle_nat]\r\n");
  xlog("incoming reply\n");
  }
  重新啟動(dòng)openisps,重新注冊(cè)SIP賬號(hào),sip 賬號(hào)呼叫另外一個(gè)SIP賬號(hào),這里,基于無(wú)狀態(tài)模式的呼叫流程表面上和有狀態(tài)的模式的沒(méi)有什么不同。但是通過(guò)抓包工具可以看到,在onreply_route[]中沒(méi)有任何的 append_hf()log。因?yàn)闊o(wú)狀態(tài)模式的呼叫沒(méi)有任何返回響應(yīng)。通過(guò)這樣的設(shè)置就可以確認(rèn)其無(wú)狀態(tài)模式的工作方式。
  筆者今天討論的另外一個(gè)話(huà)題是關(guān)于opensips環(huán)境下關(guān)閉Record-Route的處理。Record-Route的概念和非常詳解筆者在歷史文檔從多個(gè)層面做過(guò)詳細(xì)說(shuō)明,筆者可以參考以下文章,這里不再討論起概念。
  前面鏈接的幾篇文章非常詳細(xì)說(shuō)明了其重要性。這里,為了快速了解一點(diǎn)Record-Route的用途,筆者簡(jiǎn)單說(shuō)明一下Record-Route的必要性:
  • 需要處理網(wǎng)絡(luò)的地址轉(zhuǎn)換的處理業(yè)務(wù)(NAT,拓?fù)溥h(yuǎn)程,防火墻等)SBC業(yè)務(wù)的要求。
  • 呼叫計(jì)費(fèi)CDR的作用
  • 媒體處理的需要
  • 管理和檢測(cè)dialog流程的必要
  • 可能需要舉例呼叫鏈接的所有hops(有的hop也可以忽略)
  今天,筆者通過(guò)opensips的示例來(lái)說(shuō)明如何實(shí)現(xiàn)關(guān)閉Record-Route的處理。注意,在討論Record-Route關(guān)閉之前,讀者首先需要明確另外一個(gè)OpenSIPS中比較重要的一個(gè)變量概念-sequential requests(SR)。sequential requests(SR)是針對(duì)initinital request(SR)來(lái)說(shuō)的。initinital request(SR)是一個(gè)比較乏的概念。簡(jiǎn)單來(lái)說(shuō),initinital request,To header中沒(méi)有任何的tag參數(shù)。SR請(qǐng)求處理是基于每個(gè)record來(lái)進(jìn)行處理的。因?yàn)镾R是基于某個(gè)record處理的,相比IR處理,因?yàn)镾R不會(huì)重新經(jīng)過(guò)其他的路由邏輯,SR處理的速度更加快捷。
  如果通過(guò)opensips開(kāi)啟了Record-Route記錄的話(huà),SIP呼叫會(huì)通過(guò)opensips返回另外一端。如果關(guān)閉了Record-Route的話(huà),SIP的呼叫會(huì)通過(guò)contact頭直接呼叫到被呼叫方側(cè)終端。為了測(cè)試關(guān)閉Record-Route的示例場(chǎng)景,我們需要關(guān)閉Record-Route()。
  ## record routing
  if (!is_method("REGISTER|MESSAGE"))
  ##  record_route();  關(guān)閉Record-Route
  if (!is_myself("$rd")) {
  append_hf("P-hint: outbound\r\n");
  route(relay);
  }
  重新啟動(dòng)opensips,重新注冊(cè)SIP賬號(hào)進(jìn)行測(cè)試。通過(guò)呼叫流程的示例,抓包工具的檢查,讀者會(huì)發(fā)現(xiàn)關(guān)閉了Record-Route就看不到任何的BYE請(qǐng)求。當(dāng)然,此流程中也沒(méi)有可能看到其他的SR處理的消息。
  筆者通過(guò)無(wú)狀態(tài)示例和關(guān)閉record_routing()兩個(gè)示例和讀者分享了在opensips的呼叫流程中的一些細(xì)節(jié)處理。通過(guò)以上兩個(gè)示例可以看出,用戶(hù)在某些環(huán)境中如果為了滿(mǎn)足一個(gè)需求簡(jiǎn)單修改cfg文件可以實(shí)現(xiàn)某個(gè)功能,但是失去了其他功能和業(yè)務(wù)流程的支持。opensips切換為無(wú)狀態(tài)模式,響應(yīng)處理沒(méi)有辦法做進(jìn)一步處理,包括其他的掛機(jī)狀態(tài)的處理。如果關(guān)閉record_routing,呼叫路徑上的終端就不會(huì)通過(guò)opensips或者其他代理進(jìn)行呼叫,當(dāng)然其他相關(guān)dialog,事務(wù)就發(fā)生了改變,CDR,BYE請(qǐng)求都都會(huì)失去完整的記錄。因此,讀者在實(shí)現(xiàn)某個(gè)功能時(shí)一定要首先滿(mǎn)足SIP協(xié)議規(guī)范的處理流程,然后考慮通過(guò)靈活的方式實(shí)現(xiàn)不同場(chǎng)景的要求。
  參考資料:
  https://opensips.org/html/docs/modules/1.8.x/tm.html
  www.freesbc.cn
  www.asterisk.org.cn
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

相關(guān)閱讀:

評(píng)論排行

專(zhuān)題

CTI論壇會(huì)員企業(yè)