欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

SIP 请求方法(4)-CANCEL OPTIONS

发布时间:2023/12/20 72 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SIP 请求方法(4)-CANCEL OPTIONS 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

CANCEL

        CANCEL方法用于终止还未完成的INVITE。UA或代理都可以生成CANCEL消息,前提是收到1xx应答但没收到最终应答。UA使用这个方法来取消先前发起的,但还未建立的呼叫。代理如果有分支并行处理,可以用这个方法取消之前的所有分支。CANCEL是一种逐跳处理的请求,它的应答由信令路径中下一个有状态元素生成。这个方法的CSeq序号不会递增,这样后面的代理或UA就能匹配CANCEL和对应的INVITE。

端到端与逐跳处理请求

        CANCEL的branch ID与它要取消的INVITE相匹配。CANCEL只针对INVITE,是因为INVITE可能持续几秒(或几分钟)才能完成。而其它SIP请求都是立刻完成的(UAS必须立刻生成最终应答),因此,没必要CANCEL之前的(非INVITE)请求。

        代理服务器收到CANCEL时,把它转发给之前初始INVITE请求相同的位置集。代理不需要等待下游的应答,而是直接向上游发出应答。UA确认取消时,对CANCEL请求回应一条200 OK消息,同时对初始INVITE请求回应487 Request Terminated。

        如果已经收到最终应答,那么UA需要发BYE请求来终止会话。CANCEL与INVITE的最终应答在网络中有可能形成竞争条件。在这个示例中,CANCEL请求与INVITE的200 OK应答都经过代理服务器转发。代理服务器依然对CANCEL请求回应200 OK,同时它也会向UAC转发INVITE的200 OK应答消息。CANCEL请求的200 OK应答只是说明代理已经收到并转发CANCEL请求,UAC依然必须准备接收INVITE请求的最终应答。这个示例中收到的不是487而是200。但这时会话已经被UAC取消了,所以UAC必须先发一条ACK,再发一条BYE,UAS对它回应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

 

CANCEL的必要头域
Via
To
From
Call-ID
CSeq
Max-Forwards

 

OPTIONS

        OPTIONS方法用于查询UA或服务器的能力及发现它当前的可用性。OPTIONS请求的应答消息中描述UA或服务端的能力集。代理服务器永远不会生成OPTIONS请求。UA或服务器对OPTIONS响应与INVITE一样(比如说,他不想理会,可以回应4xx或6xx)。成功类应答(2xx)可以包含Allow, Accept, Accept-Encoding, Accept-Language, 和 Supported头域,用于说明它的能力集。功能tag(比如audio, video , 和 isfocus)应该包含在Contact头域字段中。

        OPTIONS请求不应包含消息体,但是也可以通过消息体说明媒体能力。代理服务器通过检查Request-URI是不是指向自己判断它是不是查询自己。如果Request-URI包含代理服务器的地址或主机名,那么请求就是发给代理的。否则,OPTIONS请求是发给其它代理或UA的,那么直接转发请求。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

对应的应答消息实例:

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

 

OPTIONS的必要头域
Via
To
From
Call-ID
CSeq
Max-Forwards

 

总结

以上是生活随笔为你收集整理的SIP 请求方法(4)-CANCEL OPTIONS的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。