注册
注册订阅
终端在注册成功后,向S-CSCF发送SUBSCRIBE请求,请求订阅该用户所有相关的公有标识注册信息。
“隐式注册处理”、“网络发起重认证”、“网络发起注销”功能都需要基于当前功能点。
1、终端向P-CSCF发起订阅请求
SUBSCRIBEsip:ue@ims.test SIP/2.0
Via: SIP/2.0/UDP1.1.1.1;brach=1111
Route:<sip:1.1.1.2;lr>
Route:<sip:1.1.1.4;lr>
From:<sip:ue@ims.test>;tag=xxx
To:<sip:ue@ims.test>
Event: reg
Expires: 600
Accept:application/reginfo+xml
Contact:sip:1.1.1.1
Content-Length:0
-
终端添加VIA头域,告知该事务请求的应答应该发送到哪里。
-
这里有两条Route头域,其中第一条是终端已知的P-CSCF地址,表示下一跳首先发给P-CSCF,第二条Route头域是S-CSCF的地址,该地址信息就是在之前UE向S-CSCF注册过程中,由S-CSCF在200 OK里协带的Service-Route头域值(参考“UE协带鉴权发起第二次注册”小节)。
-
From、To头域的值都为ue@ims.test,表示终端希望订阅自己的信息(在有些情况下,P-CSCF也希望订阅终端信息,如果P-CSCF实现向S-CSCF进行注册订阅,则From头域为P-CSCF的URL,To头域为终端的URL)。
-
在Event头域里指示需要订阅注册相关事件。
-
Expires头域指示当前期望订阅的有效生命周期为600秒。
-
Accept头域指明终端这次订阅只能处理“reginfo+xml”类型的信息。
-
Content头域告知远端,后续主动向终端发送事务请求时应该发送到哪里。
2、P-CSCF转发订阅请求到S-CSCF
P-CSCF收到终端发来的订阅请求后,检查如果没有协带P-Preferred-Identiy头域,则取该用户的默认公有标识做为有效的公有用户身份,做为新加的P-Asserted-Identity头域值,告诉S-CSCF需要订阅和这个公有标识相关的注册信息。
P-CSCF在转发消息之前,删除为自身地址的首个Route头域,同时将自己的地址添加到Via头域。
SUBSCRIBEsip:ue@ims.test SIP/2.0
Via: SIP/2.0/UDP1.1.1.2; brach=1112
Via: SIP/2.0/UDP1.1.1.1;brach=1111
Route:<sip:1.1.1.4;lr>
From:<sip:ue@ims.test>;tag=xxx
To:<sip:ue@ims.test>
Event: reg
Expires: 600
Accept:application/reginfo+xml
Contact:sip:1.1.1.1
Content-Length:0
3、4、S-CSCF收到订阅请求,给予订阅请求应答,并通过P-CSCF转发到终端
5、6、S-CSCF从P-Asserted-Identity头域提取公有用户标识,验证合法后,将该公有用户标识相关联的所有公有用户标识的注册信息通过Notify信令告知给终端,其中信令报文如下:
NOTIFYsip:ue@1.1.1.1 SIP/2.0
Via: SIP/2.0/UDP1.1.1.4;brach=1114
From: <sip:ue@ims.test>;tag=xxxxx
To:<sip:ue@ims.test>
Contact:<sip:1.1.1.4 >
Content-Type:application/reginfo+xml
Event: reg
Subscription-State:active
……
<?xmlversion="1.0" encoding="UTF-8"?>
<reginfoxmlns="urn:ietf:params:xml:ns:reginfo" version="0" state="full">
<registration aor="sip:ue@ims.test " id="11 " state="active">
<contact id="12" state="active" event="registered">
<uri>sip:ue@1.1.1.1</uri>
/contact>
</registration>
<registration aor="tel:+867551234567" id="14 " state="active">
<contact id="15" state="active" event=" created ">
<uri>sip:ue@1.1.1.1</uri>
/contact>
</registration>
<registration aor="sip:uehome@ims.test " id="17 " state="terminated">
</registration>
</reginfo>
当前只关注Body内容描述,其它SIP头域信息不详细描述。
-
reginfo根元素,指明当前子元素描述是个注册信息。
-
xmlns属性指明所使用的名字空间为urn:ietf:params:xml:ns:reginfo
-
version属性表示当前这个消息通知的版本为0,后面不断发送注册通知消息后,该值会不断递增
-
state属性为“full”,表明当前发送的是比较完整的全部相关用户标识的注册信息,如果后面再进行通知刷新时仅针对某个用户标识的改变,则state属性将为“partial”,同时仅包括部分用户标识信息
-
第一条registration表明,当前公有标识sip:ue@ims.test已经成功注册(event="registered"),该公有标识绑定的联系地址为sip:ue@1.1.1.1。
-
第二条registration表明,当前公有标识tel:+867551234567是隐性注册的(event="created "),该公有标识是第一条公有标识一样,都绑定到sip:ue@1.1.1.1这个联系地址,这里意思就是打哪个都可以呼叫到sip:ue@1.1.1.1。
-
第三条registration的state="terminated",表明没有注册,所以也就没有子元素。
7、8终端在收到Notify注册事件通知后,给S-CSCF发送应答。
参考资料
《中国电信IMS网络SIP协议总体技术要求》
《IMS-移动领域的IP多媒体概念和服务》