天天透天天干,欧美福利在线,国产三级网站,色婷婷综合网,亚洲欧美成人一区二区,亚洲国产精品成人久久久麻豆,国产剧情久久久

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

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

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


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

專題

CTI論壇會員企業(yè)