Hi I am migrating OpenSER v1.0.9 to v1.1.0 using the config file I send below that works perfect in 1.0.9 and I modified to run in 1.1.x , I´ve just needed to change naming schema in parameter given to exported functions of avpops module to run without errors in this new version but when running can´t see basic logs and can´t register any client even if I install DB schema and create subscriber using its openserctl , ngrep just show me a 'forbidden' message but dont know why, please someone send me some advice. thanks rafael
# ----------------- global configuration parameters --------------------
debug=4 fork=yes log_stderror=yes
listen=192.168.2.136 # OPENSER IP ADDRESS HERE port=5060
# Hostname matching an alias will satisfy the condition uri==myself". # alias=mydomain.com.pe:5060 # alias=mydomain.com.pe alias=192.168.2.136:5060 alias=192.168.2.136
check_via=yes # (cmd. line: -v) children=4 dns=no rev_dns=no fifo="/tmp/openser_fifo" # fifo="FIFO" fifo_mode=0666 # Fifo permissions can be changes from here. fifo_db_url="mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser"
# -----------------------------------------------------------------------
loadmodule "/usr/local/lib/openser/modules/mysql.so" loadmodule "/usr/local/lib/openser/modules/sl.so" loadmodule "/usr/local/lib/openser/modules/tm.so" loadmodule "/usr/local/lib/openser/modules/rr.so" loadmodule "/usr/local/lib/openser/modules/maxfwd.so" loadmodule "/usr/local/lib/openser/modules/usrloc.so" loadmodule "/usr/local/lib/openser/modules/registrar.so" loadmodule "/usr/local/lib/openser/modules/group.so" loadmodule "/usr/local/lib/openser/modules/auth.so" loadmodule "/usr/local/lib/openser/modules/auth_db.so" loadmodule "/usr/local/lib/openser/modules/uri.so" loadmodule "/usr/local/lib/openser/modules/uri_db.so" ## loadmodule "/usr/local/lib/openser/modules/mediaproxy.so" loadmodule "/usr/local/lib/openser/modules/nathelper.so" loadmodule "/usr/local/lib/openser/modules/textops.so" loadmodule "/usr/local/lib/openser/modules/avpops.so" loadmodule "/usr/local/lib/openser/modules/domain.so" loadmodule "/usr/local/lib/openser/modules/permissions.so" loadmodule "/usr/local/lib/openser/modules/acc.so" loadmodule "/usr/local/lib/openser/modules/uac_redirect.so" loadmodule "/usr/local/lib/openser/modules/diversion.so" # -----------------------------------------------------------------------
modparam("auth_db|permissions|group|uri_db|usrloc", "db_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 30) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")
modparam("usrloc", "db_mode", 2)
modparam("registrar", "nat_flag", 6)
modparam("rr", "enable_full_lr", 1)
modparam("tm", "fr_inv_timer", 27)
modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted")
modparam("avpops", "avp_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("avpops", "avp_table", "usr_preferences")
# ------------- Mysql Accounting parameters
modparam("acc", "log_flag", 1) modparam("acc", "log_level", 2) modparam("acc", "db_flag", 1) modparam("acc", "db_missed_flag", 3) modparam("acc", "log_missed_flag", 3) modparam("acc", "db_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("acc", "report_ack", 0) # 1 reporta dos starts en acc (para INVITE y ACK)
modparam("acc", "log_fmt", "miocfsputdr") modparam("acc", "detect_direction", 1) # only in 1.1.x or cvs modparam("acc", "multi_leg_enabled", 1) modparam("acc", "src_leg_avp_id", 110) modparam("acc", "dst_leg_avp_id", 111)
# ------------- Domain parameters
modparam("usrloc", "use_domain", 1) modparam("auth_db", "use_domain", 1) modparam("registrar", "use_domain", 1) modparam("domain", "db_mode", 1) modparam("domain", "domain_table", "domain") modparam("domain", "domain_col", "domain")
# -------------------------------------------------------------------------
route {
# log(1, "-------------------------------------------------------\n"); # log(1, "entering main loop\n");
## populate the avps (for Multi call leg accounting): if (!method=="REGISTER" && !method=="NOTIFY") { avp_write("$from/username", "$avp(i:110)"); avp_write("$ruri/username", "$avp(i:111)"); };
# set flag for Missed calls for Accounting: if (!method=="OPTIONS") setflag(3);
if (method=="INVITE") { log(1, " INVITE MESSAGE RECEIVED - START ACC\n"); };
if (method=="BYE") { log (1, " BYE MESSAGE RECEIVED - STOP ACCOUNTING\n"); };
if (method=="CANCEL") { log (1, " CANCEL MESSAGE RECEIVED - STOP ACCOUNTING\n"); };
if (method=="OPTIONS") { log(1, " OPTIONS MESSAGE RECEIVED\n"); return; #Do Nothing for 'Options' };
# ----------------------------------------------------------------- # Sanity Check Section # ----------------------------------------------------------------- if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); return; };
if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); return; };
# ----------------------------------------------------------------- # Handle NOTIFY requests from Sipura's to keep-alive NAT # ----------------------------------------------------------------- if ((is_method("NOTIFY")) && (! uri=~"sip:.*[@]+.*")) { sl_send_reply("200", "OK keep-alive"); log(1, " OK keep-alive\n"); return; };
# ----------------------------------------------------------------- # Only allow known sip messages # ----------------------------------------------------------------- if (!is_method("INVITE|REGISTER|BYE|NOTIFY|ACK|CANCEL|REFER|SUBSCRIBE")) { sl_send_reply("501", "Not implemented here"); log(1, " 501 - Not implemented here\n"); return; };
# ----------------------------------------------------------------- # SUBSCRIBE cleanup # ----------------------------------------------------------------- if (is_method("SUBSCRIBE")) { replace(" talk", "talk"); };
# ----------------------------------------------------------------- # Record Route Section # ----------------------------------------------------------------- if (method=="INVITE" && nat_uac_test("19")) {
# OPENSER IP ADDRESS OR DOMAIN HERE: record_route_preset("192.168.2.136:5060;nat=yes"); setflag(1); ## Set Flag 1 for Acc: test from this location!! } else if (method!="REGISTER") { record_route(); };
# ----------------------------------------------------------------- # Call Tear Down Section # ----------------------------------------------------------------- if (method=="BYE" || method=="REFER" || method=="CANCEL") { unforce_rtp_proxy(); setflag(1); ### Set Flag 1 for Acounting };
# ----------------------------------------------------------------- # Loose Route Section # -----------------------------------------------------------------
if (loose_route()) {
if (has_totag() && (method=="INVITE" || method=="ACK")) {
if (nat_uac_test("19")) { setflag(7); force_rport(); fix_nated_contact(); }; force_rtp_proxy("l"); };
route(1); return; };
# ----------------------------------------------------------------- # Call Type Processing Section # -----------------------------------------------------------------
if (!is_uri_host_local()) { if (is_from_local() || allow_trusted()) { route(4); route(1); } else { sl_send_reply("403", "Forbidden"); }; return; };
if (method=="CANCEL") { route(1); return; } else if (method=="INVITE") { setflag(1); # Set Flag for Acounting route(3); return; } else if (method=="REGISTER") { route(2); return; };
lookup("aliases"); if (uri!=myself) { route(4); route(1); return; };
if (!lookup("location") && !method=="ACK") {
if (does_uri_exist()) { log(1, " uri_exist but its Temporarily Unavailable 1 \n"); route(7); # To Voicemail return; } else { log(1, " unable to locate user - User Not Exist 1 \n"); sl_send_reply("404", "User Not Exist"); acc_db_request("404 User Not Exist", "missed_calls"); return; }; };
route(1); }
route[1] {
# ----------------------------------------------------------------- # Default Message Handler # -----------------------------------------------------------------
t_on_reply("1");
if (!t_relay()) {
if (method=="INVITE" || method=="ACK") { unforce_rtp_proxy(); }; sl_reply_error(); }; }
route[2] {
# ----------------------------------------------------------------- # REGISTER Message Handler # -----------------------------------------------------------------
sl_send_reply("100", "Trying");
if (is_user_in("from", "desactivado")) { sl_send_reply("402", "desactivada temporalmente"); log(1," Cta. desactivada temporalmente \n"); return; };
if (!search("^Contact:[ ]**") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); };
if (!www_authorize("","subscriber")) { log(1," Fails to Register \n"); www_challenge("","0"); return; };
if (!check_to()) { log(1," Unauthorized registration attempt \n"); sl_send_reply("401", "Unauthorized"); return; };
consume_credentials();
log(1," Registered! \n");
if (!save("location")) { sl_reply_error(); }; }
route[3] {
# ----------------------------------------------------------------- # INVITE Message Handler # ----------------------------------------------------------------- log(1," route[3]---> INVITE Message Handler \n");
if ( allow_trusted() ) log(1, " Call from pstn or *pbx, no authentication is required. \n");
if (!allow_trusted()) {
if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); return; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); log(1, " Sorry, only registered users are allowed \n"); return; }; consume_credentials(); }; append_rpid_hf();
# some digits rules here....
lookup("aliases");
if (!is_uri_host_local()) { route(4); route(1); return; };
if (nat_uac_test("19")) { setflag(7); force_rport(); };
# ----------------------------------------------------------------- # to PSTN Routes!!! # -----------------------------------------------------------------
route(6); # To PSTN & LDI Routes block!!!
# -----------------------------------------------------------------
if ( is_uri_host_local() ) {
# (Is he in the voicemail group?) -- determine it now and store it in # flag 4, before we rewrite the flag using UsrLoc: if (is_user_in("Request-URI", "voicemail")) { log(1, " requested user is in voicemail group \n"); setflag(4); };
# if user is on-line and is in Voicemail group, enable redirection # Pendiente: # ver como meter voicemail al avp junto a las otras funciones... if (method == "INVITE" && isflagset(4)) { log(1, " invite for voicemail user->initiate failureroute[1]\n"); t_on_failure("1"); };
# flag 22 determines if we need to call the append_branch() for Blind CallFwd. if (avp_db_load("$ruri/username", "$avp(s:callfwd)")) { setflag(22); avp_pushto("$ruri", "$avp(s:callfwd)"); route(6); return; };
# native SIP destinations are handled using our USRLOC DB: if (!lookup("location") ) {
if (does_uri_exist()) { log(1," uri_exist but its Temporarily Unavailable 2 \n"); route(7); # To Voicemail return; } else { log(1," Unable to locate xcompany user - User Not Exist 2X \n"); prefix("iu"); ## in asterisk: iu: exten => _iu1780XXXX,1,Playback(invalid,noanswer) acc_db_request("404 User Invalid", "missed_calls"); rewritehostport("192.168.2.131:5070"); t_relay(); return; }; };
# t_on_failure() informs SER that we want to perform special handling when a failure condition occurs. # Failure conditions in this context refer to 4xx and 5xx response codes. # By setting t_on_failure(1) before calling t_relay(), oSER will pass control to the failure_route[1]
t_on_failure("1");
route(4); route(1);
}; }
route[4] {
# ----------------------------------------------------------------- # NAT Traversal Section # -----------------------------------------------------------------
### First check and resetflags if UAS are behind the same NAT system: ###
if (isflagset(6) && isflagset(7)){ log(2, " Both Clients are behind NAT"); # Store the destination domain into an AVP avp_printf("$avp(i:450)", "$dd"); if (avp_check("$avp(i:450)", "eq/$src_ip/g")){ log(3, " Detected Two Clients Behind the Same NAT - Disabling Mediaproxy"); # Do not use media-proxy as the clients seem to be behind the same NAT resetflag(6); resetflag(7); }; };
if (isflagset(6) || isflagset(7)) { if (!isflagset(8)) { setflag(8); force_rport(); fix_nated_contact(); force_rtp_proxy(); }; }; }
route[5] {
# ----------------------------------------------------------------- # ILD - PSTN Handler # -----------------------------------------------------------------
# Forward international calls to Asterisk (a SIP LDI Providers):
if(uri=~"^sip:011"){ log(1, " 011N match - Larga Distancia Internacional a USA \n"); if (!is_user_in("from", "ldiusa")) { log(1," No permission for international calls to USA \n"); sl_send_reply("403", "No permission for international calls to USA"); acc_db_request("403 Forbidden", "missed_calls"); return; }; strip(2); };
if(uri=~"^sip:011"){ log(1," 011N match - Larga Distancia Internacional \n"); if (!is_user_in("from", "ldix")) { log(1, " No permission for international calls \n"); sl_send_reply("403", "No permission for international calls"); acc_db_request("403 Forbidden", "missed_calls"); return; }; };
rewritehostport("192.168.2.137:5070"); # Asterisk or PSTN GATEWAY IP ADDRESS
t_on_failure("1"); route(4); route(1); }
route[6] {
# ----------------- Free Calls -------------------
# To Info numbers 102, 104, 123 y 080011236
if(uri=~"^sip:102@" || uri=~"^sip:104@" || uri=~"^sip:123@" || uri=~"^sip:0800123456@"){ log(1," To CallCenter xcompany!! \n"); rewriteuri("sip:123456@mydomain.com.pe"); rewritehostport("callcenter.mydomain.com.pe:5060"); route(4); route(1); return; };
if (is_user_in("from", "restringido")) { sl_send_reply("402", "Restriccion temporal"); log(1," 402 - Restriccion temporal \n"); acc_db_request("402 Restricted", "missed_calls"); return; };
lookup("aliases");
if (!is_uri_host_local()) { if (!isflagset(22)) { append_branch(); }; route(4); route(1); return; };
# -------------------------- Seccion de Rutas a LDI ----------------------------------------
# Forward international calls to Asterisk (To SIP LDI Providers):
if (uri=~"^sip:011[0-9]*@" && !uri=~"^sip:01152*@") { route(5); return; };
if( uri=~"^sip:[2-8][0-9]{6}@" || uri=~"^sip:1[2-8][0-9]{6}@" || uri=~"^sip:01[2-8][0-9]{6}@" ) {
log(1, " A Fijos Mexico PSTN \n");
if (uri=~"^sip:01[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") { strip(1); };
if (uri=~"^sip:[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") { prefix("1"); };
if (!is_user_in("from", "fijomexico")) { sl_send_reply("403", "No permission for local fixed calls"); log(1, " 403 - No permission for local fixed calls \n"); acc_db_request("403 Forbidden", "missed_calls"); return; }; rewritehostport("192.168.2.137:5070"); prefix("52"); route(4); route(1); return; };
# no existe? (debe ir al final siempre) if ( uri=~"^sip:[0-9]" && !does_uri_exist() ) { log(1, " Unable to locate route for this dnid - User Not Exist 3X \n"); prefix("mc"); acc_db_request("404 Number Invalid or Incomplete", "missed_calls"); rewritehostport("192.168.2.131:5070"); t_relay(); return; };
}
route[7] {
# ---------------------- Handling of Unavailable user ---------------------- # non-Voip -- just send "off-line" if (!(method=="INVITE" || method=="ACK" || method=="CANCEL" || method=="BYE" || method=="OPTIONS")) { sl_send_reply("404", "Not Found"); acc_db_request("404 Not Found", "missed_calls"); log(1, " 404 Not Found & non-Voip -- just send off-line \n"); return; };
# Not voicemail subscriber: if (!isflagset(4) && !method=="OPTIONS" && !method=="ACK" && !method=="BYE" && !method=="CANCEL") { #sl_send_reply("404", "Not Found and no VMail turned on"); acc_db_request("480 Temporarily Unavailable", "missed_calls"); # A locucion (Usuario temporalmente fuera de servicio 'ss-noservice'); log(1, " 404 Not Found and no voicemail \n"); prefix("fu"); ## su: exten => _su1780XXXX,1,Playback(ss-noservice,noanswer) rewritehostport("192.168.2.131:5070"); t_relay(); return; };
# forward to voicemail adding prefix to simplify asterisk "extension.conf" :: if (isflagset(4) && !method=="OPTIONS" && !method=="ACK" && !method=="BYE" && !method=="CANCEL") { prefix("vm"); acc_db_request("480 Temporarily Unavailable -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); t_relay(); return; }; }
# --------------------------------------------------------------------------
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) && (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")) { return; };
if (t_check_status("486")){ prefix("vmb"); acc_db_request("486 Busy -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); append_branch(); t_relay(); return; };
if (t_check_status("408")){ prefix("vmu"); acc_db_request("408 Timeout -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); append_branch(); t_relay(); return; };
unforce_rtp_proxy(); }
failure_route[2] {
# handle 302 redirects if (t_check_status("3[0-9][0-9]")) { get_redirects("*"); t_relay(); }; }
### The End ###
Hello,
have you checked:
http://openser.org/dokuwiki/doku.php?id=migrating_openser_v1.0.x_to_v1.1.x
Also, did you get some errors in syslog when the clients attempt to register? Please check in database that the password you set for the user is the same as you expect (in table subscriber).
Cheers, Daniel
On 08/16/06 05:25, Rafo RGV wrote:
Hi I am migrating OpenSER v1.0.9 to v1.1.0 using the config file I send below that works perfect in 1.0.9 and I modified to run in 1.1.x , I´ve just needed to change naming schema in parameter given to exported functions of avpops module to run without errors in this new version but when running can´t see basic logs and can´t register any client even if I install DB schema and create subscriber using its openserctl , ngrep just show me a 'forbidden' message but dont know why, please someone send me some advice. thanks rafael
# ----------------- global configuration parameters --------------------
debug=4 fork=yes log_stderror=yes
listen=192.168.2.136 # OPENSER IP ADDRESS HERE port=5060
# Hostname matching an alias will satisfy the condition uri==myself". # alias=mydomain.com.pe:5060 # alias=mydomain.com.pe alias=192.168.2.136:5060 alias=192.168.2.136
check_via=yes # (cmd. line: -v) children=4 dns=no rev_dns=no fifo="/tmp/openser_fifo" # fifo="FIFO" fifo_mode=0666 # Fifo permissions can be changes from here. fifo_db_url="mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser"
# -----------------------------------------------------------------------
loadmodule "/usr/local/lib/openser/modules/mysql.so" loadmodule "/usr/local/lib/openser/modules/sl.so" loadmodule "/usr/local/lib/openser/modules/tm.so" loadmodule "/usr/local/lib/openser/modules/rr.so" loadmodule "/usr/local/lib/openser/modules/maxfwd.so" loadmodule "/usr/local/lib/openser/modules/usrloc.so" loadmodule "/usr/local/lib/openser/modules/registrar.so" loadmodule "/usr/local/lib/openser/modules/group.so" loadmodule "/usr/local/lib/openser/modules/auth.so" loadmodule "/usr/local/lib/openser/modules/auth_db.so" loadmodule "/usr/local/lib/openser/modules/uri.so" loadmodule "/usr/local/lib/openser/modules/uri_db.so" ## loadmodule "/usr/local/lib/openser/modules/mediaproxy.so" loadmodule "/usr/local/lib/openser/modules/nathelper.so" loadmodule "/usr/local/lib/openser/modules/textops.so" loadmodule "/usr/local/lib/openser/modules/avpops.so" loadmodule "/usr/local/lib/openser/modules/domain.so" loadmodule "/usr/local/lib/openser/modules/permissions.so" loadmodule "/usr/local/lib/openser/modules/acc.so" loadmodule "/usr/local/lib/openser/modules/uac_redirect.so" loadmodule "/usr/local/lib/openser/modules/diversion.so" # -----------------------------------------------------------------------
modparam("auth_db|permissions|group|uri_db|usrloc", "db_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 30) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")
modparam("usrloc", "db_mode", 2)
modparam("registrar", "nat_flag", 6)
modparam("rr", "enable_full_lr", 1)
modparam("tm", "fr_inv_timer", 27)
modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted")
modparam("avpops", "avp_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("avpops", "avp_table", "usr_preferences")
# ------------- Mysql Accounting parameters
modparam("acc", "log_flag", 1) modparam("acc", "log_level", 2) modparam("acc", "db_flag", 1) modparam("acc", "db_missed_flag", 3) modparam("acc", "log_missed_flag", 3) modparam("acc", "db_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("acc", "report_ack", 0) # 1 reporta dos starts en acc (para INVITE y ACK)
modparam("acc", "log_fmt", "miocfsputdr") modparam("acc", "detect_direction", 1) # only in 1.1.x or cvs modparam("acc", "multi_leg_enabled", 1) modparam("acc", "src_leg_avp_id", 110) modparam("acc", "dst_leg_avp_id", 111)
# ------------- Domain parameters
modparam("usrloc", "use_domain", 1) modparam("auth_db", "use_domain", 1) modparam("registrar", "use_domain", 1) modparam("domain", "db_mode", 1) modparam("domain", "domain_table", "domain") modparam("domain", "domain_col", "domain")
#
route {
# log(1,
"-------------------------------------------------------\n"); # log(1, "entering main loop\n");
## populate the avps (for Multi call leg accounting): if (!method=="REGISTER" && !method=="NOTIFY") { avp_write("$from/username", "$avp(i:110)"); avp_write("$ruri/username", "$avp(i:111)"); }; # set flag for Missed calls for Accounting: if (!method=="OPTIONS") setflag(3); if (method=="INVITE") { log(1, " INVITE MESSAGE RECEIVED - START ACC\n"); }; if (method=="BYE") { log (1, " BYE MESSAGE RECEIVED - STOP ACCOUNTING\n"); }; if (method=="CANCEL") { log (1, " CANCEL MESSAGE RECEIVED - STOP ACCOUNTING\n"); }; if (method=="OPTIONS") { log(1, " OPTIONS MESSAGE RECEIVED\n"); return; #Do Nothing for 'Options' }; #
# Sanity Check Section #
if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); return; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); return; }; #
# Handle NOTIFY requests from Sipura's to keep-alive NAT #
if ((is_method("NOTIFY")) && (! uri=~"sip:.*[@]+.*")) { sl_send_reply("200", "OK keep-alive"); log(1, " OK keep-alive\n"); return; }; #
# Only allow known sip messages #
if
(!is_method("INVITE|REGISTER|BYE|NOTIFY|ACK|CANCEL|REFER|SUBSCRIBE")) { sl_send_reply("501", "Not implemented here"); log(1, " 501 - Not implemented here\n"); return; };
#
# SUBSCRIBE cleanup #
if (is_method("SUBSCRIBE")) { replace(" talk", "talk"); }; #
# Record Route Section #
if (method=="INVITE" && nat_uac_test("19")) { # OPENSER IP ADDRESS OR DOMAIN HERE: record_route_preset("192.168.2.136:5060;nat=yes"); setflag(1); ## Set Flag 1 for Acc: test from this
location!! } else if (method!="REGISTER") { record_route(); };
#
# Call Tear Down Section #
if (method=="BYE" || method=="REFER" || method=="CANCEL") { unforce_rtp_proxy(); setflag(1); ### Set Flag 1 for Acounting }; #
# Loose Route Section #
if (loose_route()) { if (has_totag() && (method=="INVITE" || method=="ACK")) { if (nat_uac_test("19")) { setflag(7); force_rport(); fix_nated_contact(); }; force_rtp_proxy("l"); }; route(1); return; }; #
# Call Type Processing Section #
if (!is_uri_host_local()) { if (is_from_local() || allow_trusted()) { route(4); route(1); } else { sl_send_reply("403", "Forbidden"); }; return; }; if (method=="CANCEL") { route(1); return; } else if (method=="INVITE") { setflag(1); # Set Flag for Acounting route(3); return; } else if (method=="REGISTER") { route(2); return; }; lookup("aliases"); if (uri!=myself) { route(4); route(1); return; }; if (!lookup("location") && !method=="ACK") { if (does_uri_exist()) { log(1, " uri_exist but its Temporarily
Unavailable 1 \n"); route(7); # To Voicemail return; } else { log(1, " unable to locate user - User Not Exist 1 \n"); sl_send_reply("404", "User Not Exist"); acc_db_request("404 User Not Exist", "missed_calls"); return; }; };
route(1);
}
route[1] {
#
# Default Message Handler #
t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { unforce_rtp_proxy(); }; sl_reply_error(); };
}
route[2] {
#
# REGISTER Message Handler #
sl_send_reply("100", "Trying"); if (is_user_in("from", "desactivado")) { sl_send_reply("402", "desactivada temporalmente"); log(1," Cta. desactivada temporalmente \n"); return; }; if (!search("^Contact:[ ]*\*") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); }; if (!www_authorize("","subscriber")) { log(1," Fails to Register \n"); www_challenge("","0"); return; }; if (!check_to()) { log(1," Unauthorized registration attempt \n"); sl_send_reply("401", "Unauthorized"); return; }; consume_credentials(); log(1," Registered! \n"); if (!save("location")) { sl_reply_error(); };
}
route[3] {
#
# INVITE Message Handler #
log(1," route[3]---> INVITE Message Handler \n"); if ( allow_trusted() ) log(1, " Call from pstn or *pbx, no
authentication is required. \n");
if (!allow_trusted()) { if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); return; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); log(1, " Sorry, only registered users
are allowed \n"); return; }; consume_credentials(); }; append_rpid_hf();
# some digits rules here.... lookup("aliases"); if (!is_uri_host_local()) { route(4); route(1); return; }; if (nat_uac_test("19")) { setflag(7); force_rport(); }; #
# to PSTN Routes!!! #
route(6); # To PSTN & LDI Routes block!!! #
if ( is_uri_host_local() ) { # (Is he in the voicemail group?) -- determine it now
and store it in # flag 4, before we rewrite the flag using UsrLoc: if (is_user_in("Request-URI", "voicemail")) { log(1, " requested user is in voicemail group \n"); setflag(4); };
# if user is on-line and is in Voicemail group, enable
redirection # Pendiente: # ver como meter voicemail al avp junto a las otras funciones... if (method == "INVITE" && isflagset(4)) { log(1, " invite for voicemail user->initiate failureroute[1]\n"); t_on_failure("1"); };
# flag 22 determines if we need to call the
append_branch() for Blind CallFwd. if (avp_db_load("$ruri/username", "$avp(s:callfwd)")) { setflag(22); avp_pushto("$ruri", "$avp(s:callfwd)"); route(6); return; };
# native SIP destinations are handled using our USRLOC DB: if (!lookup("location") ) { if (does_uri_exist()) { log(1," uri_exist but its
Temporarily Unavailable 2 \n"); route(7); # To Voicemail return; } else { log(1," Unable to locate xcompany user - User Not Exist 2X \n"); prefix("iu"); ## in asterisk: iu: exten => _iu1780XXXX,1,Playback(invalid,noanswer) acc_db_request("404 User Invalid", "missed_calls"); rewritehostport("192.168.2.131:5070"); t_relay(); return; }; };
# t_on_failure() informs SER that we want to perform
special handling when a failure condition occurs. # Failure conditions in this context refer to 4xx and 5xx response codes. # By setting t_on_failure(1) before calling t_relay(), oSER will pass control to the failure_route[1]
t_on_failure("1"); route(4); route(1); };
}
route[4] {
#
# NAT Traversal Section #
### First check and resetflags if UAS are behind the same NAT
system: ###
if (isflagset(6) && isflagset(7)){ log(2, " Both Clients are behind NAT"); # Store the destination domain into an AVP avp_printf("$avp(i:450)", "$dd"); if (avp_check("$avp(i:450)", "eq/$src_ip/g")){ log(3, " Detected Two Clients Behind the
Same NAT - Disabling Mediaproxy"); # Do not use media-proxy as the clients seem to be behind the same NAT resetflag(6); resetflag(7); }; };
if (isflagset(6) || isflagset(7)) { if (!isflagset(8)) { setflag(8); force_rport(); fix_nated_contact(); force_rtp_proxy(); }; };
}
route[5] {
#
# ILD - PSTN Handler #
# Forward international calls to Asterisk (a SIP LDI Providers): if(uri=~"^sip:011"){ log(1, " 011N match - Larga Distancia Internacional a
USA \n"); if (!is_user_in("from", "ldiusa")) { log(1," No permission for international calls to USA \n"); sl_send_reply("403", "No permission for international calls to USA"); acc_db_request("403 Forbidden", "missed_calls"); return; }; strip(2); };
if(uri=~"^sip:011"){ log(1," 011N match - Larga Distancia
Internacional \n"); if (!is_user_in("from", "ldix")) { log(1, " No permission for international calls \n"); sl_send_reply("403", "No permission for international calls"); acc_db_request("403 Forbidden", "missed_calls"); return; }; };
rewritehostport("192.168.2.137:5070"); # Asterisk or PSTN
GATEWAY IP ADDRESS
t_on_failure("1"); route(4); route(1);
}
route[6] {
# ----------------- Free Calls ------------------- # To Info numbers 102, 104, 123 y 080011236 if(uri=~"^sip:102@" || uri=~"^sip:104@" ||
uri=~"^sip:123@" || uri=~"^sip:0800123456@"){ log(1," To CallCenter xcompany!! \n"); rewriteuri("sip:123456@mydomain.com.pe");
rewritehostport("callcenter.mydomain.com.pe:5060"); route(4); route(1); return; };
if (is_user_in("from", "restringido")) { sl_send_reply("402", "Restriccion temporal"); log(1," 402 - Restriccion temporal \n"); acc_db_request("402 Restricted", "missed_calls"); return; }; lookup("aliases"); if (!is_uri_host_local()) { if (!isflagset(22)) { append_branch(); }; route(4); route(1); return; };
# -------------------------- Seccion de Rutas a LDI
# Forward international calls to Asterisk (To SIP LDI Providers): if (uri=~"^sip:011[0-9]*@" && !uri=~"^sip:01152*@") { route(5); return; }; if( uri=~"^sip:[2-8][0-9]{6}@" || uri=~"^sip:1[2-8][0-9]{6}@"
|| uri=~"^sip:01[2-8][0-9]{6}@" ) {
log(1, " A Fijos Mexico PSTN \n"); if (uri=~"^sip:01[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") { strip(1); }; if (uri=~"^sip:[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") { prefix("1"); }; if (!is_user_in("from", "fijomexico")) { sl_send_reply("403", "No permission for local
fixed calls"); log(1, " 403 - No permission for local fixed calls \n"); acc_db_request("403 Forbidden", "missed_calls"); return; }; rewritehostport("192.168.2.137:5070"); prefix("52"); route(4); route(1); return; };
# no existe? (debe ir al final siempre) if ( uri=~"^sip:[0-9]" && !does_uri_exist() ) { log(1, " Unable to locate route for this dnid -
User Not Exist 3X \n"); prefix("mc"); acc_db_request("404 Number Invalid or Incomplete", "missed_calls"); rewritehostport("192.168.2.131:5070"); t_relay(); return; };
}
route[7] {
# ---------------------- Handling of Unavailable user
# non-Voip -- just send "off-line" if (!(method=="INVITE" || method=="ACK" || method=="CANCEL" ||
method=="BYE" || method=="OPTIONS")) { sl_send_reply("404", "Not Found"); acc_db_request("404 Not Found", "missed_calls"); log(1, " 404 Not Found & non-Voip -- just send off-line \n"); return; };
# Not voicemail subscriber: if (!isflagset(4) && !method=="OPTIONS" && !method=="ACK" &&
!method=="BYE" && !method=="CANCEL") { #sl_send_reply("404", "Not Found and no VMail turned on"); acc_db_request("480 Temporarily Unavailable", "missed_calls"); # A locucion (Usuario temporalmente fuera de servicio 'ss-noservice'); log(1, " 404 Not Found and no voicemail \n"); prefix("fu"); ## su: exten => _su1780XXXX,1,Playback(ss-noservice,noanswer) rewritehostport("192.168.2.131:5070"); t_relay(); return; };
# forward to voicemail adding prefix to simplify asterisk
"extension.conf" :: if (isflagset(4) && !method=="OPTIONS" && !method=="ACK" && !method=="BYE" && !method=="CANCEL") { prefix("vm"); acc_db_request("480 Temporarily Unavailable -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); t_relay(); return; }; }
#
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) &&
(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")) { return; }; if (t_check_status("486")){ prefix("vmb"); acc_db_request("486 Busy -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); append_branch(); t_relay(); return; }; if (t_check_status("408")){ prefix("vmu"); acc_db_request("408 Timeout -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); append_branch(); t_relay(); return; }; unforce_rtp_proxy();
}
failure_route[2] {
# handle 302 redirects if (t_check_status("3[0-9][0-9]")) { get_redirects("*"); t_relay(); };
}
### The End ###
Users mailing list Users@openser.org http://openser.org/cgi-bin/mailman/listinfo/users
hi daniel yes I checked dokuwiki, also modified openserctlrc to set SIP_DOMAIN, DBENGINE, DBHOST, etc... my Database is in external host so I have created subscribers from openser host and also from database host but cant register anyway.
I did not see any errors in syslog but i have some doubts about logging, can you tell me if basic logging system has changed? I dont known why cant see any logs as in 1.0.9 when I define for example: log("REGISTER message received\n"); or log("Fails to Register \n");
thanks rafael
On 8/16/06, Daniel-Constantin Mierla daniel@voice-system.ro wrote:
Hello,
have you checked:
http://openser.org/dokuwiki/doku.php?id=migrating_openser_v1.0.x_to_v1.1.x
Also, did you get some errors in syslog when the clients attempt to register? Please check in database that the password you set for the user is the same as you expect (in table subscriber).
Cheers, Daniel
On 08/16/06 05:25, Rafo RGV wrote:
Hi I am migrating OpenSER v1.0.9 to v1.1.0 using the config file I send below that works perfect in 1.0.9 and I modified to run in 1.1.x , I´ve just needed to change naming schema in parameter given to exported functions of avpops module to run without errors in this new version but when running can´t see basic logs and can´t register any client even if I install DB schema and create subscriber using its openserctl , ngrep just show me a 'forbidden' message but dont know why, please someone send me some advice. thanks rafael
# ----------------- global configuration parameters --------------------
debug=4 fork=yes log_stderror=yes
listen=192.168.2.136 # OPENSER IP ADDRESS HERE port=5060
# Hostname matching an alias will satisfy the condition uri==myself". # alias=mydomain.com.pe:5060 # alias=mydomain.com.pe alias=192.168.2.136:5060 alias=192.168.2.136
check_via=yes # (cmd. line: -v) children=4 dns=no rev_dns=no fifo="/tmp/openser_fifo" # fifo="FIFO" fifo_mode=0666 # Fifo permissions can be changes from here. fifo_db_url="mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser"
# -----------------------------------------------------------------------
loadmodule "/usr/local/lib/openser/modules/mysql.so" loadmodule "/usr/local/lib/openser/modules/sl.so" loadmodule "/usr/local/lib/openser/modules/tm.so" loadmodule "/usr/local/lib/openser/modules/rr.so" loadmodule "/usr/local/lib/openser/modules/maxfwd.so" loadmodule "/usr/local/lib/openser/modules/usrloc.so" loadmodule "/usr/local/lib/openser/modules/registrar.so" loadmodule "/usr/local/lib/openser/modules/group.so" loadmodule "/usr/local/lib/openser/modules/auth.so" loadmodule "/usr/local/lib/openser/modules/auth_db.so" loadmodule "/usr/local/lib/openser/modules/uri.so" loadmodule "/usr/local/lib/openser/modules/uri_db.so" ## loadmodule "/usr/local/lib/openser/modules/mediaproxy.so" loadmodule "/usr/local/lib/openser/modules/nathelper.so" loadmodule "/usr/local/lib/openser/modules/textops.so" loadmodule "/usr/local/lib/openser/modules/avpops.so" loadmodule "/usr/local/lib/openser/modules/domain.so" loadmodule "/usr/local/lib/openser/modules/permissions.so" loadmodule "/usr/local/lib/openser/modules/acc.so" loadmodule "/usr/local/lib/openser/modules/uac_redirect.so" loadmodule "/usr/local/lib/openser/modules/diversion.so" # -----------------------------------------------------------------------
modparam("auth_db|permissions|group|uri_db|usrloc", "db_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password")
modparam("nathelper", "natping_interval", 30) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/var/run/rtpproxy.sock")
modparam("usrloc", "db_mode", 2)
modparam("registrar", "nat_flag", 6)
modparam("rr", "enable_full_lr", 1)
modparam("tm", "fr_inv_timer", 27)
modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted")
modparam("avpops", "avp_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("avpops", "avp_table", "usr_preferences")
# ------------- Mysql Accounting parameters
modparam("acc", "log_flag", 1) modparam("acc", "log_level", 2) modparam("acc", "db_flag", 1) modparam("acc", "db_missed_flag", 3) modparam("acc", "log_missed_flag", 3) modparam("acc", "db_url", "mysql://dbuser:dbpass@dbt2.mydomain.com.pe/openser") modparam("acc", "report_ack", 0) # 1 reporta dos starts en acc (para INVITE y ACK)
modparam("acc", "log_fmt", "miocfsputdr") modparam("acc", "detect_direction", 1) # only in 1.1.x or cvs modparam("acc", "multi_leg_enabled", 1) modparam("acc", "src_leg_avp_id", 110) modparam("acc", "dst_leg_avp_id", 111)
# ------------- Domain parameters
modparam("usrloc", "use_domain", 1) modparam("auth_db", "use_domain", 1) modparam("registrar", "use_domain", 1) modparam("domain", "db_mode", 1) modparam("domain", "domain_table", "domain") modparam("domain", "domain_col", "domain")
#
route {
# log(1,
"-------------------------------------------------------\n"); # log(1, "entering main loop\n");
## populate the avps (for Multi call leg accounting): if (!method=="REGISTER" && !method=="NOTIFY") { avp_write("$from/username", "$avp(i:110)"); avp_write("$ruri/username", "$avp(i:111)"); }; # set flag for Missed calls for Accounting: if (!method=="OPTIONS") setflag(3); if (method=="INVITE") { log(1, " INVITE MESSAGE RECEIVED - START ACC\n"); }; if (method=="BYE") { log (1, " BYE MESSAGE RECEIVED - STOP ACCOUNTING\n"); }; if (method=="CANCEL") { log (1, " CANCEL MESSAGE RECEIVED - STOP ACCOUNTING\n"); }; if (method=="OPTIONS") { log(1, " OPTIONS MESSAGE RECEIVED\n"); return; #Do Nothing for 'Options' }; #
# Sanity Check Section #
if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); return; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); return; }; #
# Handle NOTIFY requests from Sipura's to keep-alive NAT #
if ((is_method("NOTIFY")) && (! uri=~"sip:.*[@]+.*")) { sl_send_reply("200", "OK keep-alive"); log(1, " OK keep-alive\n"); return; }; #
# Only allow known sip messages #
if
(!is_method("INVITE|REGISTER|BYE|NOTIFY|ACK|CANCEL|REFER|SUBSCRIBE")) { sl_send_reply("501", "Not implemented here"); log(1, " 501 - Not implemented here\n"); return; };
#
# SUBSCRIBE cleanup #
if (is_method("SUBSCRIBE")) { replace(" talk", "talk"); }; #
# Record Route Section #
if (method=="INVITE" && nat_uac_test("19")) { # OPENSER IP ADDRESS OR DOMAIN HERE: record_route_preset("192.168.2.136:5060;nat=yes"); setflag(1); ## Set Flag 1 for Acc: test from this
location!! } else if (method!="REGISTER") { record_route(); };
#
# Call Tear Down Section #
if (method=="BYE" || method=="REFER" || method=="CANCEL") { unforce_rtp_proxy(); setflag(1); ### Set Flag 1 for Acounting }; #
# Loose Route Section #
if (loose_route()) { if (has_totag() && (method=="INVITE" || method=="ACK")) { if (nat_uac_test("19")) { setflag(7); force_rport(); fix_nated_contact(); }; force_rtp_proxy("l"); }; route(1); return; }; #
# Call Type Processing Section #
if (!is_uri_host_local()) { if (is_from_local() || allow_trusted()) { route(4); route(1); } else { sl_send_reply("403", "Forbidden"); }; return; }; if (method=="CANCEL") { route(1); return; } else if (method=="INVITE") { setflag(1); # Set Flag for Acounting route(3); return; } else if (method=="REGISTER") { route(2); return; }; lookup("aliases"); if (uri!=myself) { route(4); route(1); return; }; if (!lookup("location") && !method=="ACK") { if (does_uri_exist()) { log(1, " uri_exist but its Temporarily
Unavailable 1 \n"); route(7); # To Voicemail return; } else { log(1, " unable to locate user - User Not Exist 1 \n"); sl_send_reply("404", "User Not Exist"); acc_db_request("404 User Not Exist", "missed_calls"); return; }; };
route(1);
}
route[1] {
#
# Default Message Handler #
t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { unforce_rtp_proxy(); }; sl_reply_error(); };
}
route[2] {
#
# REGISTER Message Handler #
sl_send_reply("100", "Trying"); if (is_user_in("from", "desactivado")) { sl_send_reply("402", "desactivada temporalmente"); log(1," Cta. desactivada temporalmente \n"); return; }; if (!search("^Contact:[ ]*\*") && nat_uac_test("19")) { setflag(6); fix_nated_register(); force_rport(); }; if (!www_authorize("","subscriber")) { log(1," Fails to Register \n"); www_challenge("","0"); return; }; if (!check_to()) { log(1," Unauthorized registration attempt \n"); sl_send_reply("401", "Unauthorized"); return; }; consume_credentials(); log(1," Registered! \n"); if (!save("location")) { sl_reply_error(); };
}
route[3] {
#
# INVITE Message Handler #
log(1," route[3]---> INVITE Message Handler \n"); if ( allow_trusted() ) log(1, " Call from pstn or *pbx, no
authentication is required. \n");
if (!allow_trusted()) { if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); return; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); log(1, " Sorry, only registered users
are allowed \n"); return; }; consume_credentials(); }; append_rpid_hf();
# some digits rules here.... lookup("aliases"); if (!is_uri_host_local()) { route(4); route(1); return; }; if (nat_uac_test("19")) { setflag(7); force_rport(); }; #
# to PSTN Routes!!! #
route(6); # To PSTN & LDI Routes block!!! #
if ( is_uri_host_local() ) { # (Is he in the voicemail group?) -- determine it now
and store it in # flag 4, before we rewrite the flag using UsrLoc: if (is_user_in("Request-URI", "voicemail")) { log(1, " requested user is in voicemail group \n"); setflag(4); };
# if user is on-line and is in Voicemail group, enable
redirection # Pendiente: # ver como meter voicemail al avp junto a las otras funciones... if (method == "INVITE" && isflagset(4)) { log(1, " invite for voicemail user->initiate failureroute[1]\n"); t_on_failure("1"); };
# flag 22 determines if we need to call the
append_branch() for Blind CallFwd. if (avp_db_load("$ruri/username", "$avp(s:callfwd)")) { setflag(22); avp_pushto("$ruri", "$avp(s:callfwd)"); route(6); return; };
# native SIP destinations are handled using our USRLOC DB: if (!lookup("location") ) { if (does_uri_exist()) { log(1," uri_exist but its
Temporarily Unavailable 2 \n"); route(7); # To Voicemail return; } else { log(1," Unable to locate xcompany user - User Not Exist 2X \n"); prefix("iu"); ## in asterisk: iu: exten => _iu1780XXXX,1,Playback(invalid,noanswer) acc_db_request("404 User Invalid", "missed_calls"); rewritehostport("192.168.2.131:5070"); t_relay(); return; }; };
# t_on_failure() informs SER that we want to perform
special handling when a failure condition occurs. # Failure conditions in this context refer to 4xx and 5xx response codes. # By setting t_on_failure(1) before calling t_relay(), oSER will pass control to the failure_route[1]
t_on_failure("1"); route(4); route(1); };
}
route[4] {
#
# NAT Traversal Section #
### First check and resetflags if UAS are behind the same NAT
system: ###
if (isflagset(6) && isflagset(7)){ log(2, " Both Clients are behind NAT"); # Store the destination domain into an AVP avp_printf("$avp(i:450)", "$dd"); if (avp_check("$avp(i:450)", "eq/$src_ip/g")){ log(3, " Detected Two Clients Behind the
Same NAT - Disabling Mediaproxy"); # Do not use media-proxy as the clients seem to be behind the same NAT resetflag(6); resetflag(7); }; };
if (isflagset(6) || isflagset(7)) { if (!isflagset(8)) { setflag(8); force_rport(); fix_nated_contact(); force_rtp_proxy(); }; };
}
route[5] {
#
# ILD - PSTN Handler #
# Forward international calls to Asterisk (a SIP LDI Providers): if(uri=~"^sip:011"){ log(1, " 011N match - Larga Distancia Internacional a
USA \n"); if (!is_user_in("from", "ldiusa")) { log(1," No permission for international calls to USA \n"); sl_send_reply("403", "No permission for international calls to USA"); acc_db_request("403 Forbidden", "missed_calls"); return; }; strip(2); };
if(uri=~"^sip:011"){ log(1," 011N match - Larga Distancia
Internacional \n"); if (!is_user_in("from", "ldix")) { log(1, " No permission for international calls \n"); sl_send_reply("403", "No permission for international calls"); acc_db_request("403 Forbidden", "missed_calls"); return; }; };
rewritehostport("192.168.2.137:5070"); # Asterisk or PSTN
GATEWAY IP ADDRESS
t_on_failure("1"); route(4); route(1);
}
route[6] {
# ----------------- Free Calls ------------------- # To Info numbers 102, 104, 123 y 080011236 if(uri=~"^sip:102@" || uri=~"^sip:104@" ||
uri=~"^sip:123@" || uri=~"^sip:0800123456@"){ log(1," To CallCenter xcompany!! \n"); rewriteuri("sip:123456@mydomain.com.pe");
rewritehostport("callcenter.mydomain.com.pe:5060"); route(4); route(1); return; };
if (is_user_in("from", "restringido")) { sl_send_reply("402", "Restriccion temporal"); log(1," 402 - Restriccion temporal \n"); acc_db_request("402 Restricted", "missed_calls"); return; }; lookup("aliases"); if (!is_uri_host_local()) { if (!isflagset(22)) { append_branch(); }; route(4); route(1); return; };
# -------------------------- Seccion de Rutas a LDI
# Forward international calls to Asterisk (To SIP LDI Providers): if (uri=~"^sip:011[0-9]*@" && !uri=~"^sip:01152*@") { route(5); return; }; if( uri=~"^sip:[2-8][0-9]{6}@" || uri=~"^sip:1[2-8][0-9]{6}@"
|| uri=~"^sip:01[2-8][0-9]{6}@" ) {
log(1, " A Fijos Mexico PSTN \n"); if (uri=~"^sip:01[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") { strip(1); }; if (uri=~"^sip:[2-8][0-9][0-9][0-9][0-9][0-9][0-9]@") { prefix("1"); }; if (!is_user_in("from", "fijomexico")) { sl_send_reply("403", "No permission for local
fixed calls"); log(1, " 403 - No permission for local fixed calls \n"); acc_db_request("403 Forbidden", "missed_calls"); return; }; rewritehostport("192.168.2.137:5070"); prefix("52"); route(4); route(1); return; };
# no existe? (debe ir al final siempre) if ( uri=~"^sip:[0-9]" && !does_uri_exist() ) { log(1, " Unable to locate route for this dnid -
User Not Exist 3X \n"); prefix("mc"); acc_db_request("404 Number Invalid or Incomplete", "missed_calls"); rewritehostport("192.168.2.131:5070"); t_relay(); return; };
}
route[7] {
# ---------------------- Handling of Unavailable user
# non-Voip -- just send "off-line" if (!(method=="INVITE" || method=="ACK" || method=="CANCEL" ||
method=="BYE" || method=="OPTIONS")) { sl_send_reply("404", "Not Found"); acc_db_request("404 Not Found", "missed_calls"); log(1, " 404 Not Found & non-Voip -- just send off-line \n"); return; };
# Not voicemail subscriber: if (!isflagset(4) && !method=="OPTIONS" && !method=="ACK" &&
!method=="BYE" && !method=="CANCEL") { #sl_send_reply("404", "Not Found and no VMail turned on"); acc_db_request("480 Temporarily Unavailable", "missed_calls"); # A locucion (Usuario temporalmente fuera de servicio 'ss-noservice'); log(1, " 404 Not Found and no voicemail \n"); prefix("fu"); ## su: exten => _su1780XXXX,1,Playback(ss-noservice,noanswer) rewritehostport("192.168.2.131:5070"); t_relay(); return; };
# forward to voicemail adding prefix to simplify asterisk
"extension.conf" :: if (isflagset(4) && !method=="OPTIONS" && !method=="ACK" && !method=="BYE" && !method=="CANCEL") { prefix("vm"); acc_db_request("480 Temporarily Unavailable -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); t_relay(); return; }; }
#
onreply_route[1] {
if ((isflagset(6) || isflagset(7)) &&
(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")) { return; }; if (t_check_status("486")){ prefix("vmb"); acc_db_request("486 Busy -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); append_branch(); t_relay(); return; }; if (t_check_status("408")){ prefix("vmu"); acc_db_request("408 Timeout -> Vm", "missed_calls"); rewritehostport ("192.168.2.131:5070"); append_branch(); t_relay(); return; }; unforce_rtp_proxy();
}
failure_route[2] {
# handle 302 redirects if (t_check_status("3[0-9][0-9]")) { get_redirects("*"); t_relay(); };
}
### The End ###
Users mailing list Users@openser.org http://openser.org/cgi-bin/mailman/listinfo/users