1 USA在接收到一个请求之后,首先判断请求的方法是否自己支持,不支持,则回复405,
在405中,应该带有allow头域,表明自己支持哪一些方法。
2 如果请求的方法,UAS支持,那么UAS会检查包头,看看是否自己都认识这些包头,如果有不认识的,ignore them。
3 UAS可以通过TO头域或者request-URI来判断这个请求是否有本UA处理。
UAS可能是处理这个请求的最终接收处理者,也可能这个USA只是最终请求的UAS的一个上级代理,
如果UAS是代理,那么就是一样的了,(这时候还不一样,那就是发了一个错误的SIP请求来到这里了)
如果是最终接收者,那么此时的TO头域就和 自己不一样了,
3261没有规定,此时的UAS是否必须要处理这个请求,只是建议处理这个请求。
但是不管是代理还是最终的接收者都可以根据REQuestc—URI可以确定到底是不是要自己处理这个请求。
4 上面几步都符合,现在就开始处理了。
首先就是要检查to头域有没有带tag,如果没有带,说明这是一条对话外的请求,
因为同一个请求可能会经过不同的路径到达,所以我们要检查这个请求是不是应经接收了,并且已经在处理开了。
检测方法可以参看3261:第8.2.2.2节。
5 到此时,说明,该请求应成功通过了UAS的检查,
此时UAS会查看require头域,这个头域要求UAS以哪一个扩展协议来处理这个请求。
如果UAS不支持要求的扩展协议,就回复420,
并且应答中应该带有unsupport 头域,表明required列表里面哪一些是自己所不支持的
6 接下来,就处理内容了。
消息体的一部分属性会在头域中描述,UAS现在就要检查是不是自己都支持这些媒体类型
Content-Type Content-Language Content-Encoding等等