opensips可以通过registrar模块实现注册的能力,
所有的账户信息默认是在opensips的subscibe表中,
ha1 = md5(concat(username,":",domain,":",password))
ha1b = md5(concat(username,"@",domain,":",domain,":",password))
客户端通过REGISTER消息来注册,注册流程如下
第一个Register可能会不带任何鉴权信息,opensips会做鉴权。这些是需要写在opensips.cfg文件中
下面是一个示例片段,
if (is_method("REGISTER")) {
if (!www_authorize("", "subscriber")) {
www_challenge("", "0");
exit;
}
# indicate that the client supports DTLS
# so we know when he is called
if (isflagset(SRC_WS)) {
setbflag(DST_WS);
}
if (nat_uac_test("19")) {
fix_nated_register();
}
if (!save("location","f")){
sl_reply_error();
exit;
}
exit;
}
注:
if ($proto == "ws" || $proto == "wss") {
setflag(SRC_WS);
}
默认的字段比较多,不逐一介绍了。这里主要看几个重要的字段含义
注册到opensips的地址成为AOR (Address-of-Record)存于opensips的内存中,这里应该是共享内存中。
如何查看AOR呢? (2.x版本)
opensipsctl ul show
可以看所有的AOR
opensipsctl ul show
可以查看某一个具体的username的AOR
opensipsctl ul show --brief
查看所有AOR (简约信息)
在SIP中注册消息是REGISTER,但是却没有UNREGISTER消息。 那么,除了等注册超时外,怎么显示地去注册呢?
方法如下:
还是发送REGISTER消息,不过REGISTER消息中需要特殊处理一下,下面两种方式,
样例如下:(注意Expires)
REGISTER sip:XXX.XXX.XXX:5060 SIP/2.0
Via: SIP/2.0/UDP YYY.YYY.YYY.YYY:5060;branch=z9hG4bK3AF1E87
From: ;tag=48206668-C6C
To:
Date: Tue, 21 May 2019 11:01:00 GMT
Call-ID: 8CFC113F-7AEE11E9-8525B193-993D21B5
User-Agent: Cisco-SIPGateway/IOS-12.x
Max-Forwards: 70
Timestamp: 1558436460
CSeq: 4 REGISTER
Contact:
Expires: 0
Supported: path
Content-Length: 0
该例子是从cisco网站上看到的,没有测试过。
样例如下:(注意Contact)
REGISTER sip:xxxxx.xxxxx.xxx:32060 SIP/2.0
Via: SIP/2.0/UDP 10.11.0.65:53310;branch=z9hG4bK-d87543-bb51c7089769c71a-1--d87543-;rport
Max-Forwards: 70
Contact: ;expires=0
To: "gw_61225552"
From: "gw_61225552";tag=d71dd162
Call-ID: Y2JiMTIxODMzODZiNWMzN2E5MjIxZWQ5ZDkwM2ExMmY.
CSeq: 12 REGISTER
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: eyeBeam release 1011d stamp 40820
该例子是从eyeBeam客户端去注册或者关闭软件时抓包截取的。实测是有效的。
答案是不可以的。 从上面的介绍可以看到,opensips中的注册信息其实分为两部分,location数据和内存中的AOR,如果仅仅是删除location表中的数据,opensips中还是存在AOR信息的。
所以删除location数据后,还需要执行opensipsctl ul rm
来删除AOR。
注意,该命令可能不会立刻生效,执行后要观察一下。
总之,不建议通过手动删除的方式去注册。还是通过上面一节介绍的方式,通过register来去注册。