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_expiresmin_expires_mode
最小的过期时间,如果REGISTER里的Expires大于此值,此值不起作用,过期时间按照Expires。
REGISTER里Expires(70)时间小于min_expires(100):
min_expires_mode为0时, 设置usrloc里坐席过期时间为min_expires,200OK返里的Contact的expires为min_expiresmin_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_rangeordefault_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存储用户信息。