我有许多简单的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)
/ log / syslog中的。我认为这是t_relay_to_tcp失败我可以重复修改From和To标头并将所有内容转发到2.3.4.5,但这不会发生。
可能是因为传输的异步性质 - kamailio脚本更进一步,而中继的tcp会话在某些背景线程中挂起。
在tcp超时的情况下,如何编辑路由[REGISTRAR]以转发到2.3.4.5?
也许以这种方式传递消息的整个想法是错误的?
有些论坛会显示在kamailio上注册端点的示例,但它并不适合我。我相信kamailio足以解决我的问题。
答案 0 :(得分:0)
看起来Kamailio不会这样工作。所以我改变了我的配置:
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";
uac_replace_from("$var(frst)");
uac_replace_to("$var(frst)");
t_on_failure("REGISTERBACKUP");
t_relay_to_tcp("1.2.3.4","5060");
}
else return;
failure_route[REGISTERBACKUP] {
rewritehost("2.3.4.5");
xlog("Registering $(fu{uri.user}) with 2.3.4.5\n");
#Edited to relay to 2.3.4.5
t_relay_to_tcp("2.3.4.5","5060");
}
当1.2.3.4关闭时,我的端点在2.3.4.5上注册。当1.2.3.4上升时当然是寄存器。