我有许多可以在后端 SIP 注册器上注册的简单 SIP 端点。它们可以配置为仅在其中一个呼叫处理引擎上注册。我想使用 Kamailio 将 REGISTER(以及后来的 INVITE)请求中继到后端。
到目前为止,我有以下配置
route[REGISTRAR] {
if (is_method("REGISTER")){
rewritehost("1.2.3.4");
xlog("Registering $(fu{uri.user}) with 1.2.3.4\n");
$var(frst) = "sip:" + $(fu{uri.user}) +"@1.2.3.4";
$var(scnd) = "sip:" + $(fu{uri.user}) +"@2.3.4.5";
uac_replace_from("$var(frst)");
uac_replace_to("$var(frst)");
if( !t_relay_to_tcp("1.2.3.4","5060") ) {
rewritehost("2.3.4.5");
uac_replace_from("$var(scnd)");
uac_replace_to("$var(scnd)");
xlog("Registering $(fu{uri.user}) with 2.3.4.5\n");
if( !t_relay_to_tcp("2.3.4.5","5060") ) {
sl_reply_error();
}
}
exit;
}
else return;
}
从主 SIP 请求路由调用此路由[REGISTRAR]。如果 1.2.3.4 是 UP 我的测试端点注册并且可用于从其他端点调用(尽管我也必须使用来自测试端点的 INVITE)。但是当 1.2.3.4 关闭时,我得到
ERROR: <core> [tcp_main.c:4249]: tcpconn_main_timeout(): connect 1.2.3.4:5060 failed (timeout)
在 /var/log/syslog 中。我认为这是 t_relay_to_tcp 失败我可以重复对 From 和 To 标头进行修改并将所有内容中继到 2.3.4.5,但这不会发生。
这可能是因为传输的异步性质 - 当中继的 tcp 会话挂在某个背景线程中时,kamailio 脚本走得更远。
如果 tcp 超时,我应该如何编辑 route[REGISTRAR] 以中继到 2.3.4.5?
也许以这种方式传递消息的整个想法是错误的?
一些论坛显示了在 kamailio 本身上注册端点的示例,但它不适合我。我相信 kamailio 足以解决我的问题。