Thank you for your reply!
But i'm still misundestand what to do, sorry i'm a beginner :(
if (uri==myself) { append_hf("P-hint: Local Destination\r\n"); if (method=="ACK") { setflag(1); route(9); break;
.......... route[9] { if (method=="ACK") { t_relay(); return; };
lookup("aliases"); if (uri!=myself) { route(1); break; }; lookup("location"); route(1); }
is it right ???
in syslog i see LOOP DETECTED and warning: sl_send_reply:i won't send a reply for ack
the whole route block route {
# ------------------------------------------------------------------------ # Sanity Check Section # ------------------------------------------------------------------------ if (!mf_process_maxfwd_header("10")) { log(1, "LOOP DETECTED"); sl_send_reply("483", "Nah, too many hops"); break; };
if (msg:len > max_len) { log(1, "MESSAGE OVERFLOW"); sl_send_reply("513", "Fucking shit, ═essage too large"); break; };
# ------------------------------------------------------------------------ # Record Route Section # ------------------------------------------------------------------------ if (method=="INVITE" && client_nat_test("3")) { setflag(7); record_route_preset("212.212.212.212:5060;nat=yes"); } else if (method!="REGISTER") { record_route_preset("212.212.212.212:5060"); };
# ------------------------------------------------------------------------ # Media Proxy Tear Down # ------------------------------------------------------------------------ if (method=="BYE" || method=="CANCEL") { setflag(1); end_media_session(); };
# ------------------------------------------------------------------------ # Message Handler Logic # ------------------------------------------------------------------------ if (loose_route()) { append_hf("P-hint: Loose Routed\r\n"); if (has_totag() && (method=="INVITE" || method=="ACK")) { if (isflagset(7) || search("^Route:.*;nat=yes")) { setflag(6); use_media_proxy(); }; }; route(1); break; };
if (uri!=myself) { append_hf("P-hint: External Destination\r\n"); route(1); break; };
if (uri==myself) { append_hf("P-hint: Local Destination\r\n"); if (method=="ACK") { setflag(1); route(9); break; } else if (method=="CANCEL") { route(5); break; } else if (method=="INVITE") { setflag(1); route(5); break; } else if (method=="REFER") { route(5); break; } else if (method=="REGISTER") { setflag(1); route(3); break; } else if (method=="OPTIONS") { options_reply(); break; };
lookup("aliases"); if (uri!=myself) { append_hf("P-hint: Alias External Destination\r\n"); route(1); break; };
if (!lookup("location")) { sl_send_reply("404", "User Not Found"); break; }; };
append_hf("P-hint: USRLOC Applied\r\n"); route(1); }
route[1] { # ------------------------------------------------------------------------ # Default Message Handler # ------------------------------------------------------------------------ remove_hf("Proxy-Authorization"); t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; }
route[2] { # ------------------------------------------------------------------------ # Call Forwarding Reply Route Handler # ------------------------------------------------------------------------
if (!lookup("location")) { rewritehost("213.213.213.213"); # PSTN GW IP ADDRESSS GOES HERE } else { route(8); route(1); }; }
route[3] { # ------------------------------------------------------------------------ # REGISTER Message Handler # ------------------------------------------------------------------------
# ------------------------------------------------------------------------ # NAT Test Section # ------------------------------------------------------------------------ if (!search("^Contact:\ +*") && client_nat_test("7")) { setflag(6); fix_nated_register(); force_rport(); };
if (!www_authorize("", "subscriber")) { www_challenge("", "1"); break; };
consume_credentials();
add_rcv_param(); append_time();
if (!save("location")) { sl_reply_error(); break; }; }
route[5] { # ------------------------------------------------------------------------ # NAT Test # ------------------------------------------------------------------------ if (client_nat_test("3")) { setflag(7); force_rport(); fix_nated_contact(); };
# ------------------------------------------------------------------------ # Aliases Section # ------------------------------------------------------------------------ lookup("aliases"); if (uri!=myself) { append_hf("P-hint: Alias External Destination\r\n"); route(1); break; };
# ------------------------------------------------------------------------ # Load ACL Section # ------------------------------------------------------------------------ if ((method=="INVITE") && (uri=~"^sip:9[0-9]*@")) {
if (!allow_trusted()) {
if (!proxy_authorize("", "subscriber")) { proxy_challenge("", "1"); break; };
if (is_from_local() || is_uri_host_local()) {
if (is_user_in("credentials", "int")) { setflag(29); };
};
consume_credentials();
};
# ---------------------------------------------------------------- # 9 International Call Test # ---------------------------------------------------------------- if (uri=~"^sip:9[0-9]*@") { if (isflagset(29)) { route(7); } else { acc_db_request("403 - Int Disabled", "acc"); sl_send_reply("403", "Service Unavailable"); }; break; }; };
# ------------------------------------------------------------------------ # Call Routing Section # ------------------------------------------------------------------------ if (!lookup("location")) { if (method=="CANCEL") { route(1); break; };
};
# ------------------------------------------------------------------------ # CANCEL message branch # ------------------------------------------------------------------------ if (method=="CANCEL") { route(1); break; };
# ------------------------------------------------------------------------ # NAT Test # ------------------------------------------------------------------------ if (isflagset(6) && !isflagset(7)) { force_rport(); fix_nated_contact(); };
# ------------------------------------------------------------------------ # Final Call Routing Decision # ------------------------------------------------------------------------ route(8); t_on_failure("1");
route(1); }
route[7] {
# ------------------------------------------------------------------------ # PSTN Handler # ------------------------------------------------------------------------
rewritehost("195.135.204.85"); # PSTN GW IP ADDRESSS GOES HERE
if (method!="CANCEL") {
if (!proxy_authorize("", "subscriber")) { proxy_challenge("", "1"); break; };
consume_credentials(); route(8); };
t_on_failure("1"); route(1); }
route[8] {
# ------------------------------------------------------------------------ # RTP Proxy Enabler # ------------------------------------------------------------------------
if (isflagset(6) || isflagset(7)) { use_media_proxy(); }; }
route[9] {
# ------------------------------------------------------------------------ # ACK Handler # ------------------------------------------------------------------------ if (method=="ACK") { t_relay(); return; };
# ------------------------------------------------------------------------ # Aliases Section # ------------------------------------------------------------------------ lookup("aliases"); if (uri!=myself) { route(1); break; };
lookup("location");
route(1); }
onreply_route[1] {
# Not all 2xx messages have a content body so here we # make sure our Content-Length > 0 to avoid a parse error
if (isflagset(6) || isflagset(7) || search("212.212.212.212")) {
if (status=~"(180)|(183)|2[0-9][0-9]") {
if (!search("^Content-Length:\ +0")) { append_hf("P-hint: NATed Reply\r\n"); use_media_proxy(); }; }; };
if (client_nat_test("1")) { fix_nated_contact(); }; }
failure_route[1] {
if (t_check_status("487")) { break; };
if (t_check_status("5[0-9]{2}")) { if (t_check_status("500")) { acc_db_request("500 - PSTN GW Says Internal Server Error", "acc"); } else if (t_check_status("501")) { acc_db_request("501 - PSTN GW Says Not Implemented", "acc"); } else if (t_check_status("502")) { acc_db_request("502 - PSTN GW Says Bad Gateway", "acc"); } else if (t_check_status("503")) { acc_db_request("503 - PSTN GW Says Service Unavailable", "acc"); } else if (t_check_status("504")) { acc_db_request("504 - PSTN GW Says Server Time Out", "acc"); }; };
if (isflagset(27) && t_check_status("408")) {
# forward no answer is flag 27 if (avp_pushto("$ruri", "s:fwdnoanswer")) { append_hf("P-hint: Forward No Answer\r\n"); avp_delete("s:fwdnoanswer"); resetflag(27); route(2); break; }; };
end_media_session(); }; }
help me please, my head is burning :(
-----Original Message----- From: Andrei Pelinescu-Onciul andrei@iptel.org To: deviator deviator@inbox.ru Date: Thu, 3 Nov 2005 14:45:21 +0100 Subject: Re: [Serusers] Strange problem - SIP-->PSTN - 40 sec calls duration
On Nov 03, 2005 at 09:50, deviator deviator@inbox.ru wrote:
Thanks for reply!
This is part of my openser.cfg
[...]
if (uri==myself) { append_hf("P-hint: Local Destination\r\n"); if (method=="ACK") { setflag(1); route(9);
^^^^^^^^ - you haven't sent route[9], check it to see if you drop the ACKs in there (you should treat them almost the same as the invites)
break; } else if (method=="CANCEL") { route(5); break; } else if (method=="INVITE") { setflag(1); route(5); break;
[...]
I dont think that my UA is broken, same results have all my ipphones and softphones :(
The ACK was not dropped because the UA was broken, but nevertheless you the UA didn't properly handle record-routing.
Andrei