kamailio mid-register

最近写了一个 kamailio mid-register 的路由脚本,简述如下:

kamailio 收到 REGISTER 请求后,可以增加 path 头(其他的不动),再 dispatcher 到 FreeSWITCH。

这是一种处理办法,就是转发注册。

但对 FreeSWITCH 版本有要求,需要 1.10.8 或者更高版本(之前的版本对 path 的处理是有 bug 的)

那如果碰到 FreeSWITCH 低版本(有的客户因为各种原因无法升级),那怎么办呢?

那就在 Contact 头上做文章,也就是把 Contact 头换成 kamailio 自己的。

这个就是 mid-register。

主要的路由代码如下:

route[REGISTRAR] {
	if (!is_method("REGISTER")) return;

	if (isflagset(FLT_NATS)) {
		setbflag(FLB_NATB);
		setbflag(FLB_NATSIPPING);
	}

	if (!ds_select_dst("1", "4")) {
		send_reply("403", "Not Relay");
		# sl_reply_error();
		exit;
	} else {
		save("location", 2);
		
		if (is_present_hf("expires")) {
			$var(expires) = $hdr(expires);
		} else {
			if (str_ifind("$ct", "expires")) {
				$var(expires) = $(ct{re.subst,/^(.*);expires=([0-9]+)/\2/});
			} else {
				$var(expires) = 0;
			}
		}
		$var(lhst) = $(ct{re.subst,/^(.*);expires.*/\1/}); // contact 删除 expires
		$var(lhst) = $(var(lhst){s.encode.base64t}); // base64 编码

		remove_hf("Contact");
		$var(sut) = $(sut{s.encode.base64t});
		append_hf("Contact: <sip:$fU@MY_IP4_ADDR:MY_SIP_PORT;transport=tcp;lhst=$var(lhst);sut=$var(sut);bf=$bf>;expires=$var(expires)\r\n");
		t_on_reply("MANAGE_REGISTER_REPLY");
		route(RELAY);
		exit;
	}
}

onreply_route[MANAGE_REGISTER_REPLY] {
    # ...
    # 恢复 ua contact
    return;
}

route[INVITE] {
    # $var(contact) = 
    # $var(sut) = 
    # $var(bf) = 
    # $du = $var(sut);
    # route(RELAY);
    exit;
}

其中:

  • lhst 参数: base64(ua contact)
  • sut 参数: ua 地址
  • bf 参数: 分支标志

 mid-register 的另外一个作用可能是做流量处理,比如:

ua<---60秒注册--->kam<---3600秒注册--->fs

目前这个脚本暂时没有实现这个功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值