SIP 请求方法(4)-CANCEL OPTIONS
CANCEL
? ? ? ? CANCEL方法用于終止還未完成的INVITE。UA或代理都可以生成CANCEL消息,前提是收到1xx應(yīng)答但沒收到最終應(yīng)答。UA使用這個方法來取消先前發(fā)起的,但還未建立的呼叫。代理如果有分支并行處理,可以用這個方法取消之前的所有分支。CANCEL是一種逐跳處理的請求,它的應(yīng)答由信令路徑中下一個有狀態(tài)元素生成。這個方法的CSeq序號不會遞增,這樣后面的代理或UA就能匹配CANCEL和對應(yīng)的INVITE。
端到端與逐跳處理請求? ? ? ??CANCEL的branch ID與它要取消的INVITE相匹配。CANCEL只針對INVITE,是因為INVITE可能持續(xù)幾秒(或幾分鐘)才能完成。而其它SIP請求都是立刻完成的(UAS必須立刻生成最終應(yīng)答),因此,沒必要CANCEL之前的(非INVITE)請求。
? ? ? ? 代理服務(wù)器收到CANCEL時,把它轉(zhuǎn)發(fā)給之前初始INVITE請求相同的位置集。代理不需要等待下游的應(yīng)答,而是直接向上游發(fā)出應(yīng)答。UA確認(rèn)取消時,對CANCEL請求回應(yīng)一條200 OK消息,同時對初始INVITE請求回應(yīng)487 Request Terminated。
? ? ? ? 如果已經(jīng)收到最終應(yīng)答,那么UA需要發(fā)BYE請求來終止會話。CANCEL與INVITE的最終應(yīng)答在網(wǎng)絡(luò)中有可能形成競爭條件。在這個示例中,CANCEL請求與INVITE的200 OK應(yīng)答都經(jīng)過代理服務(wù)器轉(zhuǎn)發(fā)。代理服務(wù)器依然對CANCEL請求回應(yīng)200 OK,同時它也會向UAC轉(zhuǎn)發(fā)INVITE的200 OK應(yīng)答消息。CANCEL請求的200 OK應(yīng)答只是說明代理已經(jīng)收到并轉(zhuǎn)發(fā)CANCEL請求,UAC依然必須準(zhǔn)備接收INVITE請求的最終應(yīng)答。這個示例中收到的不是487而是200。但這時會話已經(jīng)被UAC取消了,所以UAC必須先發(fā)一條ACK,再發(fā)一條BYE,UAS對它回應(yīng)200 OK。
CANCEL與INVITE的競爭條件? ? ? ? 因為CANCEL是逐跳處理的請求,所以它不能攜帶消息體。下面是一個CANCEL請求消息實例:
CANCEL sip:i.newton@cambridge.example.com SIP/2.0 Via: SIP/2.0/UDP 10.downing.example.org:5060;branch=z9hG4bK3134134 Max-Forwards:70 To: Isaac Newton <sip:i.newton@cambridge.example.com> From: Rene Descartes <sip:visitor@10.downing.example.org>;tag=034323 Call-ID: 23d8e0e4e2e505329299e288bbd4155a CSeq: 32156 CANCEL Content-Length: 0?
| Via |
| To |
| From |
| Call-ID |
| CSeq |
| Max-Forwards |
?
OPTIONS
? ? ? ? OPTIONS方法用于查詢UA或服務(wù)器的能力及發(fā)現(xiàn)它當(dāng)前的可用性。OPTIONS請求的應(yīng)答消息中描述UA或服務(wù)端的能力集。代理服務(wù)器永遠不會生成OPTIONS請求。UA或服務(wù)器對OPTIONS響應(yīng)與INVITE一樣(比如說,他不想理會,可以回應(yīng)4xx或6xx)。成功類應(yīng)答(2xx)可以包含Allow, Accept, Accept-Encoding, Accept-Language, 和 Supported頭域,用于說明它的能力集。功能tag(比如audio, video , 和 isfocus)應(yīng)該包含在Contact頭域字段中。
? ? ? ? OPTIONS請求不應(yīng)包含消息體,但是也可以通過消息體說明媒體能力。代理服務(wù)器通過檢查Request-URI是不是指向自己判斷它是不是查詢自己。如果Request-URI包含代理服務(wù)器的地址或主機名,那么請求就是發(fā)給代理的。否則,OPTIONS請求是發(fā)給其它代理或UA的,那么直接轉(zhuǎn)發(fā)請求。OPTIONS請求消息的實例如下:
OPTIONS sip:user@carrier.example.com SIP/2.0 Via: SIP/2.0/UDP cavendish.kings.cambridge.example.com;branch=z9hG4bK1834 Max-Forwards:70 To: <sip:wiliamhopkins@cambridge.example.com> From: J.C. Maxwell <sip:james.maxwell@kings.cambridge.example.com> ;tag=34 Call-ID: 747469e729acd305 CSeq: 29 OPTIONS Content-Length: 0對應(yīng)的應(yīng)答消息實例:
SIP/2.0 200 OK Via: SIP/2.0/UDP cavendish.kings.cambridge.example.com;tag=512A6;branch=z9hG4bK0834 ;received=192.0.0.2 To: <sip:wiliamhopkins@cam.ac.uk>;tag=432 From: J.C. Maxwell <sip:james.maxwell@kings.cambridge.example.com> ;tag=34 Call-ID: 747469e729acd305 CSeq: 29 OPTIONS Contact: <sip:william@tutors.cambridge.example.com>;audio;video Allow: INVITE, OPTIONS, ACK, BYE, CANCEL, REFER Supported: replaces, join Accept-Language: en, de, fr Content-Type: application/sdp Content-Length: ...v=0 o=jc 2590845378 2590945578 IN IP4 tutors.cambridge.example.com s= c=IN IP4 tutors.cam.ac.uk t=0 0 m=audio 32852 RTP/AVP 96 0 a=rtpmap:96 SPEEX/8000 a=rtpmap:0 PCMU/8000 m=video 82852 RTP/AVP 34 a=rtpmap:34 H263/90000?
| Via |
| To |
| From |
| Call-ID |
| CSeq |
| Max-Forwards |
?
總結(jié)
以上是生活随笔為你收集整理的SIP 请求方法(4)-CANCEL OPTIONS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 灰度图
- 下一篇: 【优化模型】最优化计算蒙特卡洛法