如何将Kamailio设置为简单接力

时间:2015-09-15 09:36:17

标签: sip kamailio

我有许多简单的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足以解决我的问题。

1 个答案:

答案 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上升时当然是寄存器。