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(a)iptel.org>
To: deviator <deviator(a)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(a)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