Hi Ricky, I think you should increase the mediaproxy natping interval to 30 and then add use_media_proxy() line after you setflag(6). check below:---
##Detect requests in the dialog behind NAT and flag with 6 if(nat_uac_test("19") || search("^Route:.*;nat=yes")){ append_hf("P-hint: LR|fixcontact,setflag6\r\n"); fix_contact(); setbflag(6); *USE MEDIA PROXY HERE---> use_media_proxy(); *}; route(1); } else { sl_send_reply("404", "Not here"); } exit; }
On Fri, Oct 31, 2008 at 5:21 AM, Ricky Gutierrez xserverlinux@yahoo.comwrote:
I show you here my openser.cfg
my best regards
rickygm
loadmodule "nathelper.so" loadmodule "mediaproxy.so"
modparam("registrar", "received_avp", "$avp(i:42)") modparam("usrloc", "db_mode", 2) modparam("usrloc", "nat_bflag", 4)
modparam("nathelper","rtpproxy_sock", "")
modparam("nathelper","natping_interval", 0) modparam("nathelper","received_avp", "$avp(i:42)") modparam("mediaproxy","natping_interval",20) modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock") modparam("mediaproxy", "mediaproxy_socket", "/var/run/proxydispatcher.sock")
modparam("mediaproxy","sip_asymmetrics","/etc/openser/sip-clients") modparam("mediaproxy","rtp_asymmetrics","/ect/openser/rtp-clients")
route{ # initial sanity checks -- messages with # max_forwards==0, or excessively long requests if (!mf_process_maxfwd_header("10")) { sl_send_reply("483","Too Many Hops"); exit; }; if (msg:len >= 2048 ) { sl_send_reply("513", "Message too big"); exit; }; # 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 (!is_method("REGISTER")) { if(nat_uac_test("19")){ record_route(";nat=yes"); } else { record_route(); }; };
if (has_totag()) {
# subsequent messages withing a dialog should take the # path determined by record-routing if (loose_route()) { if(method=="BYE") { #Account BYE transactions setflag(2); }; if (method=="INVITE" && (!allow_trusted())) { if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); exit; } else if (!check_from()) { sl_send_reply("403", "Forbidden, use From=ID"); exit;
}; }; if(method=="BYE" || method=="CANCEL") { end_media_session(); };
##Detect requests in the dialog behind NAT and flag with 6 if(nat_uac_test("19") || search("^Route:.*;nat=yes")){ append_hf("P-hint: LR|fixcontact,setflag6\r\n"); fix_contact(); setbflag(6); }; route(1); } else { sl_send_reply("404", "Not here"); } exit; }
##Loose_route packets if
(loose_route()) { if(!has_totag()){ sl_send_reply("403", "Initial Loose-Routing Rejected"); exit; };
route(1); }; #CANCEL processing if (is_method("CANCEL")) { if (t_check_trans()) { end_media_session(); t_relay(); }; exit; } t_check_trans();
if (method=="REGISTER"){ route(2); } else { route(3); }; }
route[1] {
# send it out now; use stateful forwarding as it works reliably # even for UDP2TCP t_on_reply("1"); t_on_failure("1"); if (!t_relay()) { ; if (method=="INVITE" || method=="ACK") { ; end_media_session(); ; };
# sl_reply_error(); }; exit; } route[2] { # # -- Register request handler -- # if (is_uri_host_local()) { if (!www_authorize("", "subscriber")) {
www_challenge("", "0"); exit; }; if (!check_to()) { sl_send_reply("403", "Forbidden"); exit; }; sl_send_reply("100", "Trying"); if(!search("^Contact:[ ]**") && client_nat_test("7")) { setbflag(6); fix_nated_register(); force_rport(); };
save("location"); exit;
} else if { sl_send_reply("403", "Forbidden"); }; }
route[3] { # # -- INVITE request handler -- # if (method=="INVITE") { # Account INVITE packets setflag(2); # Account Missed calls setflag(3); }; if (is_from_local()){ # From an internal domain -> check the credentials and the FROM if(!allow_trusted()){ if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); exit; } else if (!check_from()) { sl_send_reply("403", "Forbidden, use From=ID"); exit;
};
}; if (client_nat_test("3")) { append_hf("P-hint: route(3)|setflag7,forcerport,fix_contact\r\n"); setbflag(7); force_rport(); fix_contact(); }; if(avp_db_load("$ru/username","$avp(s:callfwd)")) { avp_pushto("$ru", "$avp(s:callfwd)"); route(4); route(1); exit; }
consume_credentials();
# Verify aliases lookup("aliases"); if (is_uri_host_local()) {
# -- Inbound to Inbound
route(10); } else {
# -- Inbound to outbound route(11); };
} else { # From an external domain -> do not check credentials #Verify aliases, if found replace R-URI. lookup("aliases"); if (is_uri_host_local()) { #-- Outbound to inbound route(12); } else { # -- Outbound to outbound route(13); }; }; } route[6] {
# # -- NAT handling -- # if (isbflagset(6) || isbflagset(7)) { append_hf("P-hint: Route[6]: mediaproxy \r\n"); use_media_proxy(); }; }
route[10] { #from an internal domain -> inbound
#Native SIP destinations are handled using the location table append_hf("P-hint: inbound->inbound \r\n"); if (uri=~"^sip:[2346578][0-9]{6}@.*") { if (is_user_in("credentials", "local")){ # rewritehostport("192.168.10.1:5070"); route(6); route(4); exit; } else { sl_send_reply("403", "No tienes permiso para llamadas locales"); exit; }; };
if (!lookup("location")) { if (does_uri_exist()) { revert_uri(); prefix("u"); rewritehostport("192.168.10.1:5070"); route(6); route(1); } else { sl_send_reply("404", "Not Found"); exit; }; sl_send_reply("404", "Not Found"); exit; };
route(6); route(1);
}
route[11] { # from an internal domain -> outbound # Simply route the call outbound using DNS search append_hf("P-hint: inbound->outbound \r\n"); route(1); } route[12] { # From an external domain -> inbound # Verify aliases, if found replace R-URI. lookup("aliases"); if (!lookup("location")) { sl_send_reply("404", "Not Found"); exit; }; route(1); } route[13] { #From an external domain outbound #we are not accepting these calls append_hf("P-hint: outbound->inbound \r\n"); sl_send_reply("403", "Forbidden"); exit; }
route[4] { rewritehostport("192.168.10.1:5070"); route(1);
}
### aqui se detecta cunado una llamada es no disponible , ocupada o falla failure_route[1] { if (t_was_cancelled()) { exit; };
if (t_check_status("486")) { revert_uri();
prefix("b"); xlog("L_ERR","Stepped into the 486 ruri=<$ru>"); rewritehostport("192.168.10.1:5070"); append_branch(); route(1); exit; }; if (t_check_status("408") || t_check_status("480")) { revert_uri(); prefix("u"); xlog("L_ERR","Stepped into the 480 ruri=<$ru>"); rewritehostport("192.168.10.1:5070"); append_branch(); route(1); exit; }; } onreply_route[1] { # #-- On-replay block routing -- # if (client_nat_test("1")) { append_hf("P-hint: Onreply-route - fixcontact \r\n"); fix_nated_contact(); };
if ((isbflagset(6) || isbflagset(7)) && (status=~"(180)|(183)|2[0-9][0-9]")) { if (search("^Content-Type:[ ]*application/sdp")) { append_hf("P-hint: onreply_route|usemediaproxy \r\n"); use_media_proxy(); }; };
exit; }