注册(Registrations)

注册创建了特定域中定位服务的绑定,该域将记录地址URI和一个或多个联系地址相关联。注册必须发送REGISTER请求给特定类型的UAS——注册服务器(registrar)。注册服务器作为域中定位服务器的前端,读取和写入基于REGISTER请求的映射。SIP不强制实现位置服务的具体机制。唯一的要求是域中的注册服务器必须能够在定位服务器中读和写数据,代理和重定向服务可以读取相同的数据。


1、构造REGISTER请求

REGISTER请求添加、删除和查询绑定

添加绑定。

发送给注册服务器的REGISTER请求包括SIP请求应该转发给记录地址的contact地址。记录地址包含在REGISTER请求的To头字段中。REGISTER请求的Contact头字段值主要由SIP/SIPS URI组成的,它确定具体的SIP终端。一旦客户端在注册服务器上建立了绑定,如果需要,客户端可以发送包含新绑定或绑定的后续注册。REGISTER请求的2XX响应,将在Contact头字段中包含完整的在此注册服务器上注册记录地址的绑定列表。

注册不需要更新所有的绑定,典型的,UA仅更新其自己的联系地址。


删除绑定

注册是软状态,除非是更新到期,或者明确的删除。通过在REGISTER请求的联系地址指定“0”逾期间隔,UA请求立即删除绑定。REGISTER-specific Contact头字段值“*”用于所有的注册,但是,如果Expires头字段不用值“0”表示,不能使用“*"。


2、处理REGISTER请求

注册服务器是UAS,在其管理域内,它响应REGISTER请求,并保留可以访问代理服务器和重定向服务器的一系列绑定。注册服务器只接受REGISTER请求,且不能生成6XX响应。

如果REGISTER请求中包含Record-Route头字段,注册服务器必须忽略Record-Route头字段,注册服务器不能在REGISTER请求的响应中包含Record-Route头字段。

注册服务器遵循RFC3261中规定的通用处理响应的行为。


当接收到REGISTER请求,注册服务器遵循以下步骤:

(1) 注册服务器检查Request-URI,确定它是否可以访问Request-URI指定域的绑定。如果不能,并且服务器也可以当作代理服务器,那么,服务器应该将该请求转发给地址域。

(2) 为了保证注册服务器支持任何必要的扩展,注册服务器必须处理Require头字段。

(3) 注册服务器应该认证UAC。如果认证机制不可用,那么注册服务器可以将From地址作为请求发起者声明的身份。

(4) 注册服务器应该确定,认证用户是否有权修改记录地址的注册。如果认证用户无权修改绑定,注册服务器必须返回403(禁止),并跳过剩下的步骤。

(5) 注册服务器从请求的To头字段取出记录地址。如果记录地址不可用于Request-URI域,注册服务器发送404(禁止),并跳过剩下的步骤。

(6) 注册服务器检查请求是否包含Contact头字段。如果没有,跳到最后一步。如果有,注册服务器检查Contact头字段是否包含了特殊值“*”和Expires字段。如果请求有其他的Contact头字段或为0的到期时间,那么请求是无效的,服务器必须返回400(无效的请求),并跳过剩下的步骤;如果没有,注册服务器检查Call-ID是否和每个绑定的存储值一致,如果不一致,它必须删除这些绑定,如果一致,仅在请求的Cseq高于绑定的存储值时,删除绑定。否则必须放弃更新,同时请求失败。

(7) 注册服务器依次处理Contact头字段的每个联系地址。

(8) 注册服务器返回200(OK)响应。响应必须包含列出了所有当前绑定的Contact头字段值。此响应应该包含Date头字段。