registrar模块简介
version: kamailio 5.8.5 (x86_64/linux)
本文主要是通过实战来展示参数的用法,让您有个比较清晰的认识。官方文档地址:kamailio.org
重要参数介绍
default_expires
默认过期时间3600s,此参数只有在REGISTER
信令中没有Expires
或者contact
中没有expires
时生效,如果有这些参数,此变量不生效。
软电话都带有Expires
,目前无法模拟.
default_exipires_range
默认过期时间变化范围(0-100),[default_expires - default_expires_range%, default_expires]
expires_range
作用在expires
上,范围(0-100), 例如:30,那么expires的范围为 [0.7*expires, expires]
|
|
REGISTER
的Expires
为300 ,usrloc中存储的过期时间为210~300
之间,此时返回的200OK
的Contact
里的expires
也是此随机值
min_expires
min_expires_mode
最小的过期时间,如果REGISTER
里的Expires
大于此值,此值不起作用,过期时间按照Expires
。
REGISTER
里Expires
(70)时间小于min_expires
(100):
min_expires_mode
为0
时, 设置usrloc里坐席过期时间为min_expires
,200OK
返里的Contact
的expires
为min_expires
min_expires_mode
为1
时,kamailio
会返回423 Interval Too Brief
,并带有Min-Expires
时间, 软电话收到此错误,会自动重试,重试的Expires
为min_expires
,此时注册成功。
max_expires
最大过期时间,REGISTER
的Expires
过期时间高过此值,坐席过期时间以此值为准;
比此值低,则按照REGISTER
的Expires
过期。
append_branches
默认是1, 当一个用户有多个Contacts时(比如:同一个账号使用不同的软电话注册),在lookup
查找坐席时:
append_branches
为1
时,会给所有的Contact
发送请求append_branches
为0
时,只给第一个Contact
发送请求
received_avp
|
|
存储REGISTER
的Received
地址到s:rcv
变量中。
received_param
默认received
, 返回200OK
的Contact
里带received
变量:
max_contacts
能接受的最大Contact
个数,超过会报错503,设置max_contacts
为1,
使用两个软电话注册同一个账号,第二个报错:
retry_after
REGISTER
返回5xx
错误之后,重新尝试注册的间隔。5xx
的返回头带此参数Retry-After
method_filtering
lookup
查找用户时,contact
是否支持method
过滤,0不支持,其他为支持。
outbound_mode
- 默认是0,接受不带
Supported
的REGISTER
,返回的200OK
不带Require
如果REGISTER
带Require
, 报错返回420 Bad Extension
- 1,接受带
Supported
的REGISTER
,返回的200OK
带Require
或者Supported
- 2,拒绝不带
Supported
的REGISTER
contact_max_size
设置contact
的最大长度,默认为512
use_expired_contacts
是否使用过期的contacts
,默认0不用,1使用
重要函数介绍
save(domain, [,flag [,uri]])
- domain为:
location
- flag:
- 0x01: 不存DB,只缓存
- 0x02: 不生成
SIP reply
,不能用在ONREPLY_ROUTE
上, 可以用在转发注册上 - 0x04: 只保存一个
contact
,同一个账号有多个软电话注册时,只会保存最新的一个contact
- 0x08: 使
expires_range
ordefault_expires_range
失效 - 0x10: 准备reply的Headers,要和0x02一起使用
- url: flag必须先设置,自定义
contact
的uri
- 返回值:
- -2: 错误, 太多contact
- -1: 错误
- 1: contact保存成功
- 2: contact更新成功
- 3: contact删除成功
- 4: contact 返回
代理转发示例:
|
|
$fs
为本地出去的地址, $du
为代理方的地址:
- 从信令可以看出,如果转发的sip协议是
tcp
,那么出去的端口不是5461
,是随机生成的。 flag
可以多个叠加,十六进制直接相加即可。
lookup(domain [, uri])
查找contact, 把Contact
放在Request-URI
上,转发请求。
registered(domain [, uri [, match_option [, match_action]]])
判断坐席是否已经注册
unregister(domain, uri[, ruid])
注销AOR
总结
registrar模块还有一些其他的参数和函数未提到,目前场景中还未用到,重要的主要是注册,查找,注销功能。
registrar需要和usrloc
一起使用。usrloc
决定是否使用DB
存储用户信息。