0

我有许多可以在后端 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 足以解决我的问题。

4

1 回答 1

1

看起来 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 启动时,当然是在上面注册。

于 2015-09-18T10:46:50.057 回答