RFC3261 sip协议------cancel请求
来源:互联网 发布:asm4 java 编辑:程序博客网 时间:2024/05/09 05:47
Cancel请求
Cancel请求是用来取消一个之前已经发送过得请求的,如果这个请求已经得到了应答,那么Cancel请求是失效的。所以Cancel请求一般都用是用来取消invite请求的,因为invite的请求得到最终应答的时间比较长。对于一个有状态的UAS来说,Cancel请求是点对点的,就是Cancel请求需要每个proxy服务器进行处理和应答。而无状态服务器只是转发这个cancel请求。
UAC behavior
UAC端只能发送invite请求的cancel请求,这是应为其他的请求在UAS端处理过快,cancel请求不会起作用。为了匹配要取消的invite请求,构建cancel请求时,要把要取消的invite请求的request-uri、call-id、to、cseq以及from头域都要复制到cancel请求中去。cancel请求构建的时候via头域的值,只能是invite请求的第一个via头域。如果invite请求中包含了route头域,那么cancel请求也要包含这个头域,这是为了能让无状态服务器能够路由cancel消息。
在cancel请求构造成功之后,UAC准备发送之前,需要检查是否收到了临时或者是最终的应答,如果未收到临时应答,UAC不能发送cancel请求,直到有一个临时应答发送回来才能发送。这是因为,如果在未收到临时应答就发送cancel请求,那么cancel请求就可能要比它要取消的invite请求先一步到达。
UAS behavior
在UAS这边,如果收到了一个cancel请求,如果是无状态服务器,那么就会直接转发。如果是有状态服务器,那么这个服务器会处理这个请求,并产生一些自己的cancel请求,发送出去。
在有状态服务器中,首先要对这个cancel进行匹配,如果没有匹配到这个cancel请求要取消的原始请求,那么服务器发送481状态(Call Leg/Transaction Does Not Exist)应答给客户端。如果匹配到了这个cancel请求的原始请求,那么是否取消这个原始请求,取决于是否已经发送了最终应答,如果已经发送了最终应答,那么cancel请求失效。如果未发送最终应答,如果最终应答是一个invite请求,那么服务器发送一个487应答给客户端。无论原始请求是什么方法,如果原始请求与cancel请求已经匹配,那么服务器就会发送一个200ok的应答给客户端。
- RFC3261 sip协议------cancel请求
- RFC3261(SIP协议)
- SIP协议浅析(RFC3261)
- RFC3261(SIP协议)
- RFC3261 SIP协议----register
- RFC3261 SIP协议---- invite
- 提供SIP协议中文版(RFC3261)
- RFC3261 sip协议---UAC行为详解
- RFC3261 SIP协议---proxy的代理行为
- RFC3261 SIP协议---常用消息部件
- RFC3261 SIP协议学习笔记----sip协议基本功能描述
- rfc3261-SIP
- RFC3261 sip协议学习------sip消息结构描述
- RFC3261 SIP: Session Initiation Protocol 会话发起协议
- SIP协议文档RFC3261:第八章(一)
- SIP协议文档RFC3261:第八章(二)
- RFC3261(SIP)读书笔记
- sip RFC3261 中文版
- SparkStreaming+Flume 环境搭建配置
- 理解CNN-2
- 原码、补码和用补码表示时的溢出
- Heap Corruption Detected Error
- 广播监听手机中应用程序是否安装并卸载
- RFC3261 sip协议------cancel请求
- IOS开源库一览表
- 关于srcollTop+clientTop+offsetTop的总结
- 渣蜀黍 - iOS 个人笔记(四)_极光推送使用步骤
- 创建job让oracel自动运行存储过程
- Libnids在Ubuntu下的安装
- java笔试面试题(二)
- “创客”进政府工作报告 创业迎来黄金时代
- jsp之javabean快捷赋值