I have activated the "failed_transactions" flag in SER 0.9.4.
Now the "acc" module logs the 487 errors for INVITEs, but it DOESN'T log the 404 or 480 errors. Why?
Perhaps they are considered "missed calls" (i don't log missed calls)? But then the 487 should be considered missed call too...
Thanks.
Federico Giannici wrote:
I have activated the "failed_transactions" flag in SER 0.9.4.
Now the "acc" module logs the 487 errors for INVITEs, but it DOESN'T log the 404 or 480 errors. Why?
Probably as they are no transactions. Usually you will handle 404 stateless without tm module. Thus, there is no failed transaction.
klaus
Perhaps they are considered "missed calls" (i don't log missed calls)? But then the 487 should be considered missed call too...
Thanks.
Klaus Darilion wrote:
Now the "acc" module logs the 487 errors for INVITEs, but it DOESN'T log the 404 or 480 errors. Why?
Probably as they are no transactions. Usually you will handle 404 stateless without tm module. Thus, there is no failed transaction.
Maybe it works when accounting it manually using acc_db|log|rad_request(...) before sl_send_reply()?
Andy
Klaus Darilion wrote:
Federico Giannici wrote:
I have activated the "failed_transactions" flag in SER 0.9.4.
Now the "acc" module logs the 487 errors for INVITEs, but it DOESN'T log the 404 or 480 errors. Why?
Probably as they are no transactions. Usually you will handle 404 stateless without tm module. Thus, there is no failed transaction.
You are right, I didn't thought of that...
I replaced the sl_send_reply() with t_reply() (after creating a new transaction with t_newtran()) and now those errors are logged too (and without duplications!).
Thanks.
Hello to all, Is there any way of making debug in RTP proxy? My SER has one public IP and one private IP. The public phones can speak each other, but the private IP phones can t speak each other (they just ring, but theres no voice ) , and apears this error on SER: ERROR: send_rtpp_command: can't read reply from a RTP proxy
How can I debug RTPproxy? Thanks
Joao Pereira www.fccn.pt
Joao,
The problem is probably and error in your ser.cfg file. I'd recommend you download a copy of the Getting Started document from www.onsip.org and look at the section on RTPproxy.
Regards, Paul
On 10/4/05, Joao Pereira joao.pereira@fccn.pt wrote:
Hello to all, Is there any way of making debug in RTP proxy? My SER has one public IP and one private IP. The public phones can speak each other, but the private IP phones can t speak each other (they just ring, but theres no voice ) , and apears this error on SER: ERROR: send_rtpp_command: can't read reply from a RTP proxy
How can I debug RTPproxy? Thanks
Joao Pereira www.fccn.pt
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
I dont know If the problem is realy of my ser.cfg, because the IP phones with public IPs work, but the phones with private IPs just ring... but I believe theres no RTP passing. Theres my SER:
|--------------| | |-------------- private IP | S E R | | |-------------- public IP |--------------|
Theres my ser.cfg:
(...) listen = 193.136.xxx.xxx listen = 10.0.0.135
(...)
alias=fccn.pt alias=193.136.xxx.xxx alias=10.0.0.135
# memlog - Debugging level for final memory statistics report. Default # is L_DBG -- memory statistics are dumped only if debug is set high. memlog=1
# ------------------ module loading ----------------------------------
loadmodule "/usr/local/lib/ser/modules/postgres.so" loadmodule "/usr/local/lib/ser/modules/sl.so" loadmodule "/usr/local/lib/ser/modules/tm.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/maxfwd.so" loadmodule "/usr/local/lib/ser/modules/usrloc.so" loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
# Uncomment this if you want digest authentication loadmodule "/usr/local/lib/ser/modules/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/exec.so" loadmodule "/usr/local/lib/ser/modules/group.so" loadmodule "/usr/local/lib/ser/modules/print.so" #loadmodule "/usr/local/lib/ser/modules/mediaproxy.so" loadmodule "/usr/local/lib/ser/modules/uri.so" loadmodule "/usr/local/lib/ser/modules/uri_db.so" loadmodule "/usr/local/lib/ser/modules/domain.so" loadmodule "/usr/local/lib/ser/modules/xlog.so" loadmodule "/usr/local/lib/ser/modules/speeddial.so" loadmodule "/usr/local/lib/ser/modules/options.so" loadmodule "/usr/local/lib/ser/modules/avpops.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" #loadmodule "/usr/local/lib/ser/modules/xdz_tools.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
# ----------------- setting module-specific parameters ---------------
# -- nathelper params --
# proxy nat modparam("nathelper", "natping_interval", 15) modparam("nathelper", "ping_nated_only", 1)
(...)
# ------------------------- request routing logic -------------------
# main routing logic
route{
if (!mf_process_maxfwd_header("10")) { sl_send_reply("483","Too Many Hops"); break; };
if (msg:len > max_len ) { sl_send_reply("513", "Message too big"); break; };
# -------------------------------------------------- # NOTIFY Keep-Alive Section # -------------------------------------------------- if ((method=="NOTIFY") && search("^Event: keep-alive")) { sl_send_reply("200", "OK"); break; };
if ((method=="NOTIFY") && (uri=~"^sip:700@")) { sl_send_reply("200", "OK"); break; };
# -------------------------------------------------- # OPTIONS Section # -------------------------------------------------- if (method=="OPTIONS") { options_reply(); break; };
if (method=="REGISTER" && nat_uac_test("3")) {
fix_nated_contact(); force_rport(); setflag(2); };
# -------------------------------------------------- # Registration Section # -------------------------------------------------- (...)
# -------------------------------------------------- # Accounting Section # NOTE: We test for flag 14 because we do not want to record Click2Dial # entries # --------------------------------------------------
if ((method=="INVITE" || method=="BYE" || method=="CANCEL"||method=="ACK" ||method=="REGISTER") && !isflagset(14)) { setflag(1); };
# -------------------------------------------------- # NAT Tear-Down Section # --------------------------------------------------
if ((method == "BYE" || method == "CANCEL")) { unforce_rtp_proxy(); };
# -------------------------------------------------- # Record Route Section # -------------------------------------------------- # we record-route all messages -- to make sure that subsequent messages # will go through our proxy; that's particularly good if upstream and # downstream entities use different transport protocol if (!method=="REGISTER") { record_route(); };
# -------------------------------------------------- # Loose Route Section # # Grant route routing if route headers present # -------------------------------------------------- if (loose_route()) { route(2); break; };
#
# -------------------------------------------------- # NAT Test Section #1 # --------------------------------------------------
if (nat_uac_test("3") && !search("^Record-Route:")) { force_rport();
fix_nated_contact(); };
(...)
# -------------------------------------------------- # Alias Routing Section # --------------------------------------------------
lookup("aliases"); if (!uri==myself) { route(2); break; };
(...)
# -------------------------------------------------- # Anonymous Call Rejection Section # -------------------------------------------------- if (isflagset(24) && (method=="INVITE") && search("^(f|F)rom:.*(a|A)nonymous")) { route(8); break; };
# -------------------------------------------------- # URI Compare Section # -------------------------------------------------- # Here we compare the "from" and "to" to see if the caller is dialing # their own extension. If so then we route to voicemail if needed if (method=="INVITE") { avp_write("$from", "i:34"); if (avp_check("i:34", "eq/$ruri/i")) { if (isflagset(31)) { route(5); break; } else { sl_send_reply("486", "Busy"); break; }; }; };
(...)
# -------------------------------------------------- # Do Not Disturb Section # -------------------------------------------------- if (avp_db_load("$ruri/username", "s:donotdisturb")) { if (avp_check("s:donotdisturb", "eq/y/i")) { route(5); break; }; };
# -------------------------------------------------- # Call Routing Section # --------------------------------------------------
if (!lookup("location")){
# if flag 31 (ie voicemail) is set and we made it here this means # the user's phone is not registered anywhere. We'll forward to # voicemail after this block because we need to check the call # forward settings first if (isflagset(31)) {
# flag 19 means the user has voicemail but is not online # so we need to remember to send to voicemail if call # forwarding is not enabled setflag(19); };
if (method=="INVITE") {
if( !uri=~"@fccn.pt" ) { if (!method=="REGISTER") record_route(); t_relay(); break; }
if (does_uri_exist()) { # o utilizador foi encontrado mas esta offline sl_send_reply("480", "Temporarily Unavailable"); break; };
sl_send_reply("404", "Utilizador nao Encontrado"); break; }; };
# -------------------------------------------------- # Call Forwarding Section # --------------------------------------------------
if (method=="INVITE") {
# only load the forward no answer option if voice mail is not enabled if (!isflagset(31)) { if (avp_db_load("$ruri/username", "s:fwdnoanswer")) { route(1);
if (!avp_check("$calltype", "eq/-/i")) { if (avp_check("$calltype", "eq/dom/i")) { avp_write("dom", "$fwd_no_answer_type"); } else if (avp_check("$calltype", "eq/int/i")) { avp_write("int", "$fwd_no_answer_type"); } else { avp_write("sip", "$fwd_no_answer_type"); }
setflag(27); }; }; };
if (avp_db_load("$ruri/username", "s:fwdbusy")) { route(1);
if (!avp_check("$calltype", "eq/-/i")) {
if (avp_check("$calltype", "eq/dom/i")) { avp_write("dom", "$fwd_busy_type"); } else if (avp_check("$calltype", "eq/int/i")) { avp_write("int", "$fwd_busy_type"); } else { avp_write("sip", "$fwd_busy_type"); }
setflag(26); }; };
avp_pushto("$ruri", "i:99"); };
if (isflagset(19)) { # send to voicemail route(5); } else { route(2); };
} #route
route[1] {
avp_write("-", "$calltype");
if (uri=~"^sip:1[0-9]{10}@") { strip(1); };
lookup("aliases"); if (!lookup("location")) { if (uri=~"^sip:[0-9]{10}@") {
# test for domestic PSTN number if (isflagset(28)) { avp_write("dom", "$calltype"); };
} else if (uri=~"^sip:011[0-9]*@") {
# test for international PSTN number if (isflagset(29)) { avp_write("int", "$calltype"); }; };
break; };
avp_write("sip", "$calltype");
}
route[2] {
# check for RFC1918 ip addresses # -- NATHELPER -- if (uri=~"[@:](192.168.|10.|172.(1[6-9]|2[0-9]|3[0-1]).)" && !search("^Route:")){ sl_send_reply("479", "We don't forward to private IP addresses"); break; };
#check if the NAT Flag is set if (isflagset(6)) { log(1, "LOG: flag 6 set => One of the sides is NATed -> force_rtp_proxy()\n"); if(!force_rtp_proxy()) { log(1, "LOG: force_rtp_prpoxy FAILED!\n"); } else { log(1, "LOG: force_rtp_proxy() succeeded!\n"); }; };
if (isflagset(25)) { replace("^From:(.*)>" , "From: "Anonymous" <sip:someone at anonymous.invalid>"); };
if (method=="INVITE" || method=="ACK") { force_rtp_proxy(); };
t_on_failure("1"); t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") { unforce_rtp_proxy(); };
sl_reply_error(); }; }
# encaminhamento para o Gateway PSTN route[3] {
if (method=="INVITE") {
if (!proxy_authorize("fccn.pt", "utilizador")) {
proxy_challenge("fccn.pt", "0"); break; } } else if (!check_from()) {
log(1, "Spoofed SIP call attempt"); sl_send_reply("403", "Use From=ID"); break;
} else if (!(is_from_local() || is_uri_host_local())) {
sl_send_reply("403", "Please register to use our service"); break; };
# enable caller id blocking for PSTN calls if (isflagset(25)) { append_rpid_hf(); }; };
# SIP->PSTN calls get 45 seconds to timeout avp_write("i:45", "inv_timeout");
rewritehostport("10.0.0.135:1720");
if (method=="INVITE" || method=="ACK") { force_rtp_proxy(); };
if (isflagset(31)) { t_on_failure("1"); };
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") { unforce_rtp_proxy(); };
sl_reply_error(); }; }
(...)
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 (status=~"(180)|(183)|2[0-9][0-9]") {
if (!search("^Content-Length:\ 0")) { force_rtp_proxy(); }; };
if (nat_uac_test("1")) { fix_nated_contact(); }; }
failure_route[1] {
if (t_check_status("487")) { break; };
if (isflagset(26) && t_check_status("486")) {
# forward busy is flag 26 if (avp_pushto("$ruri", "s:fwdbusy")) { avp_delete("s:fwdbusy"); append_branch(); resetflag(26); # test for domestic PSTN gateway if (avp_check("$fwd_busy_type", "eq/dom/i")) { # test for domestic PSTN gateway route(3); # sl_send_reply("503", "Gateway PSTN Indisponivel-3"); #} else if (avp_check("$fwd_busy_type", "eq/int/i")) { # test for international PSTN gateway # route(6); # } else { # default to sip call route(2); };
break; }; };
# here we can have either voicemail __OR__ forward no answer if (isflagset(27) && t_check_status("408")) {
# forward no answer is flag 27
if (avp_pushto("$ruri", "s:fwdnoanswer")) { avp_delete("s:fwdnoanswer"); append_branch(); resetflag(27);
if (avp_check("$fwd_no_answer_type", "eq/dom/i")) { # test for domestic PSTN gateway route(3); #sl_send_reply("503", "Gateway PSTN Indisponivel"); #} else if (avp_check("$fwd_no_answer_type", "eq/int/i")) { # test for international PSTN gateway # route(6); #} else { # default to sip call route(2); };
break; };
} else if (isflagset(31) && avp_pushto("$ruri", "$voicemail")) {
avp_delete("$voicemail"); route(4); break; }; }
onreply_route[2] {
log(1, "LOG: entered onreply_route[2] now... \n");
if(isflagset(6)) { # && status =~"(183)|2[0-9][0-9]") { log(1, "LOG: TRansaction was sent to a NATed client --> fix_nated_contact() and force_rtp_proxy().\n"); if(!fix_nated_contact()) { log(1, "LOG: fix_nated_contact() FAILED!\n"); } else { log(1, "LOG: fix_nated_contact() succeded.\n"); };
if(!force_rtp_proxy()) { log(1, "LOG: force_rtp_proxy() FAILED!\n"); } else { log(1, "LOG: force_rtp_proxy() succeded.\n"); };
append_hf("P-hint: fixed NAT contact for response\r\n");
} else if (nat_uac_test("1")) { log(1, "LOG: Uncaught NAT. => fix_nated_contact()\n"); if(!fix_nated_contact()) { log(1, "LOG: fix_nated_contact() FAILED!\n"); } else { log(1, "LOG: fix_nated_contact() succeded.\n"); }; };
}
Sorry the long post. Joao Pereira www.fccn.pt
Paul Hazlett wrote:
Joao,
The problem is probably and error in your ser.cfg file. I'd recommend you download a copy of the Getting Started document from www.onsip.org and look at the section on RTPproxy.
Regards, Paul
On 10/4/05, Joao Pereira joao.pereira@fccn.pt wrote:
Hello to all, Is there any way of making debug in RTP proxy? My SER has one public IP and one private IP. The public phones can speak each other, but the private IP phones can t speak each other (they just ring, but theres no voice ) , and apears this error on SER: ERROR: send_rtpp_command: can't read reply from a RTP proxy
How can I debug RTPproxy? Thanks
Joao Pereira www.fccn.pt
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers