У меня есть несколько простых конечных точек SIP, которые могут быть зарегистрированы на бэкэнд-регистраторах SIP. Они могут быть настроены для регистрации только на одном из двигателей прецессии вызова. Я хочу использовать Kamailio для ретрансляции запросов REGISTER (и позже INVITE) на сервер.Как настроить Kamailio как простое реле
До сих пор у меня есть следующий CONFIG
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;
}
Этот маршрут [REGISTRAR] вызывается из основной маршрутизации запроса SIP. Если 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, но этого не происходит.
Возможно, из-за асинхронного характера передачи - сценарии kamailio идут дальше, в то время как ретранслированная сессия tcp висит в какой-то обратной линии.
Как отредактировать маршрут [REGISTRAR] для передачи на 2.3.4.5 в случае тайм-аута tcp?
Возможно, вся идея передачи сообщений таким образом неправильная?
На некоторых форумах показаны примеры регистрации конечных точек на самом камалио, но это меня не устраивает. Я считаю, что kamailio достаточно силен, чтобы решить мою проблему.