中文字幕无码久久精品,13—14同岁无码A片,99热门精品一区二区三区无码,菠萝菠萝蜜在线观看视频高清1

您當(dāng)前的位置是:  首頁 > 資訊 > 國內(nèi) >
 首頁 > 資訊 > 國內(nèi) >

SIP協(xié)議規(guī)范RFC3261中文分享-11

2019-11-26 15:31:23   作者:james.zhu    來源:Asterisk開源派   評論:0  點(diǎn)擊:


  接上次文章
  8.1.3.5 Processing 4xx Responses
  某些4xx 響應(yīng)碼要求UA有特定的處理流程,這取決于method本身。如果收到一個(gè)401 (Unauthorized) 或407 (Proxy Authentication Required) 響應(yīng)時(shí),UAC應(yīng)該遵從認(rèn)證部分的處理流程Section 22.2 和 Section 22.3 重新通過請求獲取安全消息。
  如果收到一個(gè)413 (Request Entity Too Large)響應(yīng)(Section 21.4.11),這個(gè)請求包含的消息體大于UAS能夠接收的消息體時(shí)。如果可能的話,UAC應(yīng)該重發(fā)這個(gè)請求,忽略這個(gè)消息體或者重發(fā)一個(gè)小一點(diǎn)的消息體。
  • 如果收到415 (Unsupported Media Type)響應(yīng)(Section 21.4.13),這個(gè)請求中包含一個(gè)UAS不支持的媒體類型。UAC應(yīng)該重發(fā)這個(gè)請求,這次僅使用在響應(yīng)消息中列表支持的content類型,這些列出的支持類型在Accept-Encoding頭中,或者在Accept-Language 的languages列表中。
  • 如果收到一個(gè)416 (Unsupported URI Scheme)響應(yīng)(Section 21.4.14),表示服務(wù)器端不支持此Request-URI使用的URI scheme?蛻舳藨(yīng)該重發(fā)請求,這次的請求使用SIP URI。
  • 如果收到一個(gè)420 (Bad Extension) 響應(yīng)(Section 21.4.15),表示這個(gè)請求在option-tag標(biāo)簽所支持的功能中包含了一個(gè)Require或者Proxy-Require頭值,這個(gè)標(biāo)簽所支持的功能是proxy或UAS不能支持的。UAC應(yīng)該重發(fā)這個(gè)請求,在響應(yīng)中忽略任何不支持的拓展頭域。
  在以上的例子中,請求重發(fā)都是通過創(chuàng)建一個(gè)新的請求,在新請求中需要做一定的必要的修改才能滿足協(xié)商機(jī)制。這個(gè)新請求重構(gòu)了一個(gè)新的事務(wù),并且也應(yīng)該和前面的請求具有同樣的 Call-ID和To頭值,但是CSeq 應(yīng)該包含一個(gè)新的序列號碼,這個(gè)新的序列號碼高于前面的號碼。
  對于其他的4xx響應(yīng),還有其他沒有被定義的響應(yīng),重發(fā)請求可能或者也不可能發(fā)生,這依賴于使用的method和用戶使用場景。
  8.2 UAS Behavior
  當(dāng)UAS處理一個(gè)請求處于dialog外部的請求(outside of a dialog)情況下的請求,規(guī)范規(guī)定了一系列的處理流程,這些流程獨(dú)立于method。Section 12 給出了一個(gè)指導(dǎo),指導(dǎo)說明了UAS如何通知請求是一個(gè)內(nèi)部的還是outside of a dialog。
  注意,這里的請求處理是非常恒定的。具體來說,如果接受了這樣的請求,所有和此請求綁定的狀態(tài)修改必須執(zhí)行。如果拒絕了此請求,所有和此請求綁定的狀態(tài)修改不能執(zhí)行。
  UASs應(yīng)該根據(jù)以下步驟處理請求(開始認(rèn)證處理,檢查method,頭域和以及本章節(jié)其他部分處理)。
  8.2.1 Method Inspection
  一旦請求完成認(rèn)證流程(或者跳過認(rèn)證),UAS必須檢查請求的method。如果UAS已經(jīng)識別到method,但是不能支持請求的method的話,它必須生成一個(gè)405(Method Not Allowed)響應(yīng)消息。生成此響應(yīng)消息的處理流程在Section 8.2.6有介紹。UAS也必須對這個(gè)405響應(yīng)消息增加一個(gè)Allow頭。這個(gè)Allow頭必須增加一個(gè)列表來表示UAS能夠支持的methods列表。Allow 頭的討論在Section 20.5有討論。如果服務(wù)器端可以支持其中一個(gè)method,則處理流程繼續(xù)進(jìn)行。
  8.2.2 Header Inspection
  如果UAS不能理解請求中的一個(gè)頭的話(規(guī)范中沒有定義這個(gè)頭域或規(guī)范不支持這個(gè)拓展頭),服務(wù)器必須忽略這個(gè)頭,繼續(xù)處理消息。如果出現(xiàn)異常的頭域,UAS應(yīng)該忽略異常的頭域值,這些頭值對于進(jìn)一步處理請求是沒有必要的。
  8.2.2.1 To and Request-URI
  To頭域定義請求的初始接收方,這里的請求是由在From頭域中定義的用戶發(fā)起。 因?yàn)榭赡苡泻艚星稗D(zhuǎn)或其他代理的操作,初始接收方可能是或不是正在處理此請求的UAS。當(dāng)這里的To頭域不是UAS的確認(rèn)身份時(shí),UAS可以使用任何策略來決定它是否接受請求。
  但是,規(guī)范推薦,UAS接受請求,即使它們不能識別To頭域中的URI scheme(例如,一個(gè)tel:URL),或如果To頭域不能處理這個(gè)UAS的已知的或當(dāng)前用戶。 如果,在另一方面,UAS決定拒絕這個(gè)請求,UAS應(yīng)該生成一個(gè)響應(yīng)消息和其響應(yīng)狀態(tài)碼403 (Forbidden),并且返回這個(gè)響應(yīng)碼到服務(wù)器事務(wù)層的傳輸。
  如果,Request-URI定義這個(gè)UAS,它來處理這個(gè)請求。 如果Request-URI使用的一個(gè)scheme不是這個(gè)UAS所支持的scheme,它應(yīng)該拒絕這個(gè)請求,并且返回一個(gè)416 (Unsupported URI Scheme)響應(yīng)消息。如果Request-URI沒有定義一個(gè)地址,這個(gè)地址是UAS愿意為這個(gè)請求所接受的地址,它應(yīng)該拒絕這個(gè)請求,并且返回一個(gè)404 (Not Found) 響應(yīng)消息。典型環(huán)境下,一個(gè)UA會(huì)使用REGISTER method綁定它自己的address-of-record(aor)到一個(gè)具體的contact地址上,contact地址可以是多個(gè)地址形式。UA將會(huì)看到請求中的Request-URI 地址和contact地址相同。接收Request-URIs的其他潛在地址源包括請求的Contact頭和由UA發(fā)送到響應(yīng)地址源,這個(gè)響應(yīng)地址源是創(chuàng)建或刷新dialogs的地址。
  8.2.2.2 Merged Requests
  如果請求中的To頭域中沒有tag標(biāo)簽,UAS core必須對比檢查請求的將要處理的事務(wù)。如果From tag, Call-ID,和CSeq 完全和將要處理的事務(wù)所關(guān)聯(lián)的匹配,但是請求事務(wù)的話(匹配規(guī)則參見Section 17.2.3),UAS core 應(yīng)該生成一個(gè)482 (Loop Detected)響應(yīng)消息,然后把這個(gè)響應(yīng)傳遞給這個(gè)服務(wù)器的事務(wù)層。
  如果同樣的請求,這些請求抵達(dá)UAS多于一次以上的話,這些請求是來自于不同的路徑的話,原因可能是進(jìn)行了分叉forking處理。這里的UAS處理第一個(gè)這樣的請求,然后對其他請求返回響應(yīng)482(Loop Detected)。
  8.2.2.3 Require
  假設(shè)UAS決定處理請求中的符合規(guī)則的參數(shù)要素,如果Require頭出現(xiàn)在當(dāng)前的消息中,它會(huì)檢查這個(gè)Require頭域。
  Require頭的作用是UAC用來通知UAS關(guān)于SIP拓展的消息,UAC期望UAS支持這些SIP拓展,UAS能夠正確處理這些請求中的SIP拓展。Require頭的格式在Section 20.32章節(jié)中有進(jìn)一步的描述。如果UAS不能理解Require頭中列出的option-tag 列表的話,UAS必須返回一個(gè)生成的響應(yīng)狀態(tài)碼 420(Bad Extension)。UAS必須添加一個(gè) Unsupported 頭,在這個(gè)Unsupported 頭中列出UAS不能支持的拓展,這些拓展是請求中的Require 頭所列出的拓展。
  注意,Require 和 Proxy-Require 不能使用在SIP CANCEL請求中或ACK 請求,這里的ACK請求是發(fā)送給non-2xx響應(yīng)消息的。如果這些頭值出現(xiàn)在這些請求中時(shí),它們必須要被忽略掉。
  一個(gè)針對2xx響應(yīng)的ACK請求必須僅包含那些出現(xiàn)在初始請求中的Require和Proxy-Require值。
  例如:
  • UAC->UAS:  INVITE sip:watson@bell-telephone.com SIP/2.0
  • Require: 100rel
  • UAS->UAC:  SIP/2.0 420 Bad Extension
  • Unsupported: 100rel
  客戶端和服務(wù)器端能夠互相理解雙方所有可選參數(shù)值,規(guī)范所定義的流程可以確?蛻舳撕头⻊(wù)器端的交互將會(huì)快速處理,無任何時(shí)延。如果雙方參數(shù)中,一方不能理解對方的拓展時(shí),處理流程放緩,例如上面的示例。因此,對于客戶端和服務(wù)器端所支持的拓展都能完全匹配的場景中,交互處理流程會(huì)相對較快。如果需要保存一個(gè)雙向處理,通常需要協(xié)商機(jī)制來完成。另外,當(dāng)客戶端需要支持的功能,但是服務(wù)器端不能理解此拓展功能的話,此頭可以移除一些帶歧義的拓展功能支持,例如呼叫處理方面的功能,這些功能可能僅是呼叫流程末端系統(tǒng)感興趣的功能。
  8.2.3 Content Processing
  假設(shè)UAS理解所有客戶端請求的拓展功能,然后UAS檢查消息體的內(nèi)容和頭域。如果其中任何消息的類型(由Content-Type表示),語言(由Content-Language表示)或者 編碼(由Content-Encoding表示)不能被支持,并且body 部分不是一個(gè)可選的值(由 Content-Disposition頭表示),UAS必須拒絕這個(gè)請求,返回錯(cuò)誤狀態(tài)響應(yīng)碼415 (Unsupported Media Type)響應(yīng)。這個(gè)響應(yīng)必須包含一個(gè)Accept頭的列表,列表表示UAS可以理解的消息體類型,在事件中包含UAS不能理解的消息體類型。如果UAS不能理解請求做包含的內(nèi)容解碼,UAS響應(yīng)中必須包含一個(gè)UAS可接受的Accept-Encoding 頭列表,列表中列出UAS所支持的解碼方式。如果UAS不能理解請求的頭中列出的支持的內(nèi)容語言,響應(yīng)中必須包含一個(gè)Accept-Language頭,這個(gè)頭列出UAS所支持的語言。除了檢查以上這些類型以外,消息體處理還依賴于method和類型。更多關(guān)于具體內(nèi)容頭的處理,參考Section 7.4 ,還有 Section 20.11 到20.15。
  未完繼續(xù)……
 
   
  關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
  Asterisk freepbx,F(xiàn)reeSBC技術(shù)文檔:www.freepbx.org.cn
  融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
  Asterisk / FreePBX / FreeSBC中國合作伙伴,官方qq技術(shù)分享群(3000人):589995817
 
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點(diǎn)判斷保持中立,不對所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

專題

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