我有許多簡單的SIP端點可以在後端SIP註冊服務器上註冊。它們可以配置爲僅在一個呼叫處理引擎上註冊。 我想使用Kamailio將REGISTER(以及後來的INVITE)請求轉發給後端。如何將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";
$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請求路由調用。如果1.2.3.4爲UP,則我的測試端點註冊並可用於來自其他端點的呼叫(儘管我必須使用來自測試端點的INVITE)。但是當1.2.3.4關機時,我在/ var/log/syslog中得到了
ERROR: <core> [tcp_main.c:4249]: tcpconn_main_timeout(): connect 1.2.3.4:5060 failed (timeout)
。我認爲這是t_relay_to_tcp失敗,我可以重複從From和To的頭部並將所有內容都傳遞給2.3.4.5,但這不會發生。
這可能是由於傳輸的異步性質 - kamailio腳本更進一步,而中繼的tcp會話掛在一些backgroud線程中。
如何在tcp超時的情況下編輯路由[REGISTRAR]來中繼到2.3.4.5?
也許這種傳遞信息的想法是錯誤的?
一些論壇顯示了kamailio本身的註冊端點示例,但它不適合我。我相信kamailio足夠強大來解決我的問題。