Featured image of post registrar模块介绍

registrar模块介绍

registrar模块简介

version: kamailio 5.8.5 (x86_64/linux)

本文主要是通过实战来展示参数的用法,让您有个比较清晰的认识。官方文档地址:kamailio.org

重要参数介绍

  1. default_expires

默认过期时间3600s,此参数只有在REGISTER信令中没有Expires或者contact中没有expires时生效,如果有这些参数,此变量不生效。 软电话都带有Expires,目前无法模拟.

  1. default_exipires_range

默认过期时间变化范围(0-100),[default_expires - default_expires_range%, default_expires]

  1. expires_range

作用在expires上,范围(0-100), 例如:30,那么expires的范围为 [0.7*expires, expires]

1
modparam("registrar", "expires_range", 30)

REGISTERExpires为300 ,usrloc中存储的过期时间为210~300之间,此时返回的200OKContact里的expires也是此随机值 REGISTER

  1. min_expires
  2. min_expires_mode

最小的过期时间,如果REGISTER里的Expires大于此值,此值不起作用,过期时间按照ExpiresREGISTERExpires(70)时间小于min_expires(100):

  • min_expires_mode0时, 设置usrloc里坐席过期时间为min_expires,200OK返里的Contactexpiresmin_expires
  • min_expires_mode1时, kamailio会返回423 Interval Too Brief,并带有Min-Expires时间, 软电话收到此错误,会自动重试,重试的Expiresmin_expires,此时注册成功。 REGISTER
  1. max_expires

最大过期时间,REGISTERExpires过期时间高过此值,坐席过期时间以此值为准; 比此值低,则按照REGISTERExpires过期。

  1. append_branches

默认是1, 当一个用户有多个Contacts时(比如:同一个账号使用不同的软电话注册),在lookup查找坐席时:

  • append_branches1时,会给所有的Contact发送请求
  • append_branches0时,只给第一个Contact发送请求
  1. received_avp
1
modparam("registrar", "received_avp", "$avp(s:rcv)")

存储REGISTERReceived地址到s:rcv变量中。

  1. received_param

默认received, 返回200OKContact里带received变量: REGISTER

  1. max_contacts

能接受的最大Contact个数,超过会报错503,设置max_contacts为1, 使用两个软电话注册同一个账号,第二个报错: REGISTER

  1. retry_after

REGISTER返回5xx错误之后,重新尝试注册的间隔。5xx的返回头带此参数Retry-After

  1. method_filtering

lookup 查找用户时,contact是否支持method过滤,0不支持,其他为支持。

  1. outbound_mode
  • 默认是0,接受不带SupportedREGISTER,返回的200OK不带Require 如果REGISTERRequire, 报错返回420 Bad Extension
  • 1,接受带SupportedREGISTER,返回的200OKRequire或者Supported
  • 2,拒绝不带SupportedREGISTER
  1. contact_max_size

设置contact的最大长度,默认为512

  1. use_expired_contacts

是否使用过期的contacts,默认0不用,1使用

重要函数介绍

save(domain, [,flag [,uri]])

  1. domain为:location
  2. flag:
  • 0x01: 不存DB,只缓存
  • 0x02: 不生成SIP reply,不能用在ONREPLY_ROUTE上, 可以用在转发注册上
  • 0x04: 只保存一个contact,同一个账号有多个软电话注册时,只会保存最新的一个contact
  • 0x08: 使expires_rangeordefault_expires_range失效
  • 0x10: 准备reply的Headers,要和0x02一起使用
  1. url: flag必须先设置,自定义contacturi
  2. 返回值:
  • -2: 错误, 太多contact
  • -1: 错误
  • 1: contact保存成功
  • 2: contact更新成功
  • 3: contact删除成功
  • 4: contact 返回

代理转发示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
route[REGISTRAR] {
        if (!is_method("REGISTER")) return;

        if(isflagset(FLT_NATS)) {
                setbflag(FLB_NATB);
#!ifdef WITH_NATSIPPING
                # do SIP NAT pinging
                setbflag(FLB_NATSIPPING);
#!endif
        }
        if (!save("location","0x12")) {
                sl_reply_error();
        }
        $fs="tcp:172.16.4.111:5461";
        $du="sip:172.16.4.114:5060;transport=tcp";
        route(RELAY);
        exit;
}

$fs 为本地出去的地址, $du 为代理方的地址: REGISTER

  1. 从信令可以看出,如果转发的sip协议是tcp,那么出去的端口不是5461,是随机生成的。
  2. 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存储用户信息。

本博客已稳定运行
发表了26篇文章 · 总计45.09k字
本站总访问量 次 · 您是本站第 位访问者
粤ICP备2025368587号-1| 使用 Hugo 构建
主题 StackJimmy 设计