注册(五)之请求处理

30 篇文章 5 订阅

一个注册服务器(registrar)就是一个UAS,这个UAS用来响应REGISTER的请求,并且维持一个绑定表,这个绑定表用来提供给它所管理的区域中的proxy服务器和重定向服务器的。一个注册服务器禁止产生6xx应答。一个注册服务器可以适当的转发REGISTER请求。通常用于一个注册服务器(registar)监听一个多点广播,并且通过302应答(临时转移)转发这个多点广播的REGISTER请求到它正确的处理位置。

注册服务器必须忽略在REGISTER请求中的Record-Route头域,并且也不能在REGISTER请求的应答中包含任何Record-Route头域。注册服务器可能收到一个有proxy转发过来的REGISTER请求,这个请求中由于proxy处理这个请求当作未知请求所以添加了Record-Route头域。

一个注册服务器必须知道(例如,通过配置)它所管理的区域。注册服务器一定需要按照接收到的REGISTER请求顺序进行处理。

REGISTER请求必须当作原子请求来处理,意味着给定的REGISTER请求要么就完整处理,要么就完全拒绝。每一个REGISTER信息的处理都和其他的注册和绑定信息的处理无关。

当接收到一个REGISTER请求,注册服务器(registrar)按照如下步骤处理:

1、注册服务器(registrar)检查Request-URI来决定是否它属于本注册服务器所管理的区域的Request-URI。如果不是,并且如果这个服务器同时也作为一个proxy服务器,那么这个服务器应当转发这个请求到指定的区域。

2、为了保证注册服务器能够支持所需要的扩展,注册服务器UAS不认识请求中的包头域(就是说,包头域不在本规范中定义或者不在任何扩展中定义),那么服务器必须忽略掉这个包头域并且继续处理本请求。UAS必须忽略任何处理本请求所不需要的长得畸形的包头域,情况来处理Require头域。

3、一个注册服务器应当对UAC进行身份认证。注册这个动作需要遵循SIP的通用的身份认证框架。如果没有任何认证机制,注册服务器可以使用From地址来作为原始请求的信任依据。

4、注册服务器应当检查认证的用户是否通过认证来更改这个address-of-record的登记权限。比如,一个登记服务(registrar)可以通过访问一个认证数据库,这个认证数据库映射了用户名和一个address-of-record列表,这些列表是用户可以更改绑定信息的列表。如果认证用户并没有权限修改绑定信息,注册服务器应当返回一个403(禁止访问)并且跳过后续步骤。在支持第三方认证和注册的架构下,一个实体可以被授权来更新多个address-of-record的注册信息。

5、注册服务器(registrar)REGISTER请求的To头域中解出address-of-record。如果这个address-of-record并非在这个Request-URI指明的区域中合法,那么注册服务器必须发出一个404(没有找到)的应答,并且跳过后续步骤。接着URI必须转换成为标准的格式。所有的URI参数都必须删去(包括用户参数user-param,并且任何非法(escaped)字符必须转换成为合法字符(unescaped)格式。最后形成一个可以用于绑定的列表。

6、注册服务器(registrar)检查是否请求包含了一个Contact头域。如果没有包含,它跳过到最后一步。如果Contact头域包含了,注册服务器检查是否有一个Contact头域值是“*”,并且包含了一个Expires头域。如果请求有其他的Contact头域或者任何有效期的值是非0的,这个请求就是非法请求,并且服务器必须送回一个400(非法请求)的应答,跳过后续步骤。如果没有,那么注册服务器检查是否Call-ID复核每一个绑定的值。如果不符合,它必须删除绑定。如果复核,它必须仅仅删除保存的绑定表中CSeq值小于请求中的Cseq值的记录。否则,更新必须终止,请求失败。

7、现在注册服务器(registrar)可以依次处理Contact头域中的联系地址了。对于每一个地址,它根据下边的规则进行有效期检查。

如果含有“expires”参数,这个参数值就是最终的有效期。

如果没有这个参数,并且请求有一个Expires头域,那么这个值就是有效期。

如果没有Expire头域也没有参数,那么本地的缺省配置应当作为有效期。

注册服务器可以选择一个小于请求中的有效期值作为最后的有效期。当且仅当请求的有效期大于0 并且小于1个小时并且小于一个注册服务器配置的最小有效期的时候,注册服务器可以响应一个423(有效期过小)的错误来拒绝。这个应答必须包括了一个Min-Expires头域来表明本注册服务器所接收的最小有效期,然后跳过所有后续步骤。

允许注册服务器设置注册服务器自己的有效期防止了过分频繁的刷新注册信息,并且也降低了维持和管理注册信息的工作量。在服务的创建的时候,注册信息中的有效期会经常用到。一个例子是follow-me服务,在这个服务中,一个用户可能在一个终端上只停留一小会儿。因此,注册服务器应当接收简略的注册;一个请求只有当它的有效期过短的时候(短到可能降低注册服务器性能的时候)才应当被拒绝。

对于每一个地址,注册服务器在当前绑定列表中用URI比较规则进行搜索。如果绑定不存在,它会暂时性的添加进去。如果绑定存在,注册服务器检查Call-ID值。如果Call-ID值在这个已经存在的绑定中和本次请求的Call-ID值不一样,那么绑定的有效期为0就删除这个绑定,否则就刷新这个绑定。如果Call-ID值一样,那么注册服务器比较Cseq值,如果请求中的这个值比现存的绑定值中的Cseq高,那么必须更新或者删除这个绑定(如果有效期为0 就删除,否则就刷新)。如果这个Cseq值比现存的Cseq值小,那么必须终止更新并且请求失败。

这个规则确保了从同一个UA过来的请求顺序处理,对于非顺序的请求跳过处理。

每一个绑定记录都包含了当时请求的Call-IDCseq的值。

只有当且仅当所有的绑定更新和绑定添加都完成的时候,绑定才可以做COMMIT处理(就是说,这次修改对proxy和重定向服务器可见)。如果任何更新或者添加失败了(比如,由于后台的数据库commit失败),必须给出一个500(服务器错误)的应答,并且中间进行的临时更新都必须删除。

8、注册服务器(registrar)返回一个200OK)应答。这个应答必须包含Contact头域,并且这个头域的值中列举了所有当前绑定的注册信息。每一个Contact值都必须包含一个”expires”参数,用来标志还有多久这个绑定信息就过期了。应答也必须包含一个Date头域。


 

REGISTERsip:ims1.fj.chinamobile.com SIP/2.0

From:<sip:+865939007710@ims1.fj.chinamobile.com>;tag=90abf8-1a0ba8c0-13c4-40030-8cad-541bce30-8cad

To:<sip:+865939007710@ims1.fj.chinamobile.com>

Call-ID:933464-1a0ba8c0-13c4-40030-8cad-3097e46a-8cad

CSeq: 1 REGISTER

Via: SIP/2.0/UDP192.168.11.26:5060;branch=z9hG4bK-4b3e8cad-ec558580-338fd0f9;rport

Max-Forwards: 70

Supported: replaces,100rel,timer

Contact:<sip:+865939007710@192.168.11.26:5060>

Expires: 360

Content-Length: 0

 

SIP/2.0 401 Unauthorized

Via: SIP/2.0/UDP192.168.11.26:5060;received=192.168.11.26;rport=5060;branch=z9hG4bK-4b3e8cad-ec558580-338fd0f9

To:<sip:+865939007710@ims1.fj.chinamobile.com>;tag=ztesiph8rHexBcK*1-1-16648*dcb.1

From:<sip:+865939007710@ims1.fj.chinamobile.com>;tag=90abf8-1a0ba8c0-13c4-40030-8cad-541bce30-8cad

Call-ID: 933464-1a0ba8c0-13c4-40030-8cad-3097e46a-8cad

CSeq: 1 REGISTER

Content-Length: 0

WWW-Authenticate: *****

 

REGISTER sip:ims1.fj.chinamobile.comSIP/2.0

From:<sip:+865939007710@ims1.fj.chinamobile.com>;tag=90abf8-1a0ba8c0-13c4-40030-8cad-541bce30-8cad

To:<sip:+865939007710@ims1.fj.chinamobile.com>

Call-ID:933464-1a0ba8c0-13c4-40030-8cad-3097e46a-8cad

CSeq: 2 REGISTER

Via: SIP/2.0/UDP 192.168.11.26:5060;branch=z9hG4bK-4b3e8cad-ec5585e4-b443527;rport

Max-Forwards: 70

Supported: replaces,100rel,timer

Contact:<sip:+865939007710@192.168.11.26:5060>

Expires: 360

Authorization: ****

Allow:INVITE,ACK,CANCEL,BYE,OPTIONS,PRACK,UPDATE,SUBSCRIBE,NOTIFY,REFER,INFO

Content-Length: 0

 

SIP/2.0 200 OK

Via: SIP/2.0/UDP192.168.11.26:5060;received=192.168.11.26;rport=5060;branch=z9hG4bK-4b3e8cad-ec5585e4-b443527

To: <sip:+865939007710@ims1.fj.chinamobile.com>;tag=ztesipwhDonkzixa0YuEMlv21ZjADI*1-1-16648*dcc.1

From:<sip:+865939007710@ims1.fj.chinamobile.com>;tag=90abf8-1a0ba8c0-13c4-40030-8cad-541bce30-8cad

Call-ID: 933464-1a0ba8c0-13c4-40030-8cad-3097e46a-8cad

CSeq: 2 REGISTER

Contact:<sip:+865939007710@192.168.11.26:5060>;expires=360

Date: Wed, 21 Aug 2013 10:27:27 GMT

Authentication-Info:nextnonce="9c1073811c21b566f5cc3163436db326",qop=auth,rspauth="ad19571c3d07288de00c9abe3d3eb341",cnonce="ec5585e4",nc=00000001

Content-Length: 0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值