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准备发送之前,需要检查是否收到了临时或者是最终的应答,如果