debug=5 fork=yes log_stderror=no #listen=127.0.0.1 # INSERT YOUR IP ADDRESS HERE #port=5060 children=4 dns=no rev_dns=no fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:heslo@localhost/ser" # ------------------ module loading ---------------------------------- loadmodule "/usr/lib/ser/modules/mysql.so" loadmodule "/usr/lib/ser/modules/sl.so" loadmodule "/usr/lib/ser/modules/tm.so" loadmodule "/usr/lib/ser/modules/rr.so" loadmodule "/usr/lib/ser/modules/maxfwd.so" loadmodule "/usr/lib/ser/modules/usrloc.so" loadmodule "/usr/lib/ser/modules/registrar.so" loadmodule "/usr/lib/ser/modules/auth.so" loadmodule "/usr/lib/ser/modules/auth_db.so" loadmodule "/usr/lib/ser/modules/uri.so" loadmodule "/usr/lib/ser/modules/uri_db.so" loadmodule "/usr/lib/ser/modules/domain.so"loadmodule "/usr/lib/ser/modules/mediaproxy.so" loadmodule "/usr/lib/ser/modules/nathelper.so" loadmodule "/usr/lib/ser/modules/acc.so" loadmodule "/usr/lib/ser/modules/textops.so" loadmodule "/usr/lib/ser/modules/avpops.so" loadmodule "/usr/lib/ser/modules/permissions.so" # ----------------- setting module-specific parameters --------------- modparam("auth_db|permissions|uri_db|usrloc","db_url", "mysql://ser:heslo@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password") modparam("nathelper", "rtpproxy_disable", 1) modparam("nathelper", "natping_interval", 0) modparam("mediaproxy","natping_interval", 30) modparam("mediaproxy","mediaproxy_socket", "/var/run/mediaproxy.sock") modparam("mediaproxy","sip_asymmetrics","/usr/local/etc/ser/sip-clients") modparam("mediaproxy","rtp_asymmetrics","/usr/local/etc/ser/rtp-clients") modparam("usrloc", "db_mode", 1) # @mann 31-oct changed to 1 from 2 modparam("registrar", "nat_flag", 6) modparam("rr", "enable_full_lr", 1) modparam("tm", "fr_inv_timer", 27) modparam("tm", "fr_inv_timer_avp", "inv_timeout") modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted") modparam("permissions", "source_col", "src_ip") modparam("permissions", "proto_col", "proto") modparam("permissions", "from_col", "from_pattern") modparam("permissions", "default_deny_file","/usr/lib/ser/modules/permissions.deny") modparam("permissions", "default_allow_file","/usr/lib/ser/modules/permissions.allow") modparam("avpops", "avp_url", "mysql://ser:heslo@localhost/ser") modparam("avpops", "avp_table", "usr_preferences") # ------------------------- request routing logic ------------------- # main routing logic route { # ----------------------------------------------------------------- # Sanity Check Section # ----------------------------------------------------------------- if (!mf_process_maxfwd_header("10")) { sl_send_reply("483", "Too Many Hops"); break; }; if (msg:len > max_len) { sl_send_reply("513", "Message Overflow"); break; }; # ----------------------------------------------------------------- # 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 setflag(1); if (method=="INVITE" && client_nat_test("3")) { record_route_preset("10.25.119.155:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); }; # ----------------------------------------------------------------- # Call Tear Down Section # ----------------------------------------------------------------- if (method=="BYE" || method=="CANCEL") { end_media_session(); }; # ----------------------------------------------------------------- # Loose Route Section # ----------------------------------------------------------------- if (loose_route()) { if (!has_totag()) { sl_send_reply("403", "Forbidden"); break; }; if (method=="INVITE") { if ((method=="INVITE" || method=="REFER") && !has_totag()) { /*if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); break; } */ #else if (!check_from()) if (!check_from()) { sl_send_reply("403", "Use From=ID"); break; }; consume_credentials(); }; if (client_nat_test("3")||search("^Route:.*;nat=yes")) { setflag(6); use_media_proxy(); }; }; route(1); break; }; # ---------------------------------------------------------- # Call Type Processing Section # ---------------------------------------------------------- if (!uri==myself) { # mark routing logic in request append_hf("P-hint: outbound\r\n"); route(1); break; }; # if the request is for other domain use UsrLoc # (in case, it does not work, use the following command # with proper names and addresses in it) if (uri==myself) { if (method=="REGISTER") { # Uncomment this if you want to use digest authentication if (!www_authorize("", "subscriber")) # MANN--4-oct { www_challenge("", "0"); break; }; save("location"); break; }; if (method=="INVITE") { # sl_send_reply("404", "INVITE @MANN "); route(3); break; } lookup("aliases"); ################# MISSED CALL REPORTING######################## if(!lookup("location")) { if((method=="INVITE" || method=="ACK") && t_newtran()) { t_reply("404", "Not Found"); acc_db_request("404 not found"," missed_calls"); #acc_db_request("404 missed_call","acc"); #acc_request("404 Not Found"); break; } sl_send_reply("404", "Not Found"); break; } else { setflag(3); #acc_db_request("missed_calls","acc"); #acc_db_request("missed call", "missed_calls"); t_relay(); break; } ################# MISSED CALL REPORTING END ######################## ################ Sending INVITE FOR CHECKING CALL-FWD ############ if(method=="REFER") #MANN -- For Call FWD TESTING { route(6); t_relay(); break; }; ################# Sending INVITE FOR CHECKING CALL-FWD END ############ }; append_hf("P-hint: usrloc applied\r\n"); route(1); } # ------------------- ROUTE[1] ---------------------------- route[1] { # ---------------------------------------------------------- # Default Message Handler # ---------------------------------------------------------- t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; } # ----------------- ROUTE[2] ------------------------------- route[2] { # ---------------------------------------------------------- # REGISTER Message Handler # ---------------------------------------------------------- sl_send_reply("100", "Trying"); if (!search("^Contact:[ ]*\*") && client_nat_test("7")) { setflag(6); fix_nated_register(); force_rport(); }; if (!www_authorize("","subscriber")) { www_challenge("","0"); break; }; if (!check_to()) { sl_send_reply("401", "Unauthorized"); break; }; consume_credentials(); if (!save("location")) { sl_reply_error(); }; } # ----------------- ROUTE[3] ------------------------------- route[3] { # ---------------------------------------------------------- # INVITE Message Handler # ---------------------------------------------------------- if (!allow_trusted()) { if (!proxy_authorize("","subscriber")) { proxy_challenge("","0"); break; } else if (!check_from()) { sl_send_reply("403", "Use From=ID"); break; }; consume_credentials(); }; if (uri=~"^sip:1[0-9]{10}@") { strip(1); }; lookup("aliases"); if (!is_uri_host_local()) { route(4); route(1); break; }; if (uri=~"^sip:011[0-9]*@") { route(4); # route(5); break; }; if (avp_db_load("$ruri/username", "s:callfwd")) { setflag(22); avp_pushto("$ruri", "s:callfwd"); log("CALL FWD LOG @@@MANN\n"); avp_print(); route(6); break; }; if (!lookup("location")) { # sl_send_reply("600", "LOOKUP LOCATIONS @MANN"); if (uri=~"^sip:[0-9]{10}@") { route(4); # route(5); break; }; sl_send_reply("404", "User Not Found"); break; }; if (avp_db_load("$ruri/username", "s:fwdbusy")) { if (!avp_check("s:fwdbusy", "eq/$ruri/i")) { setflag(26); }; }; if (avp_db_load("$ruri/username", "s:fwdnoanswer")) { if (!avp_check("s:fwdnoanswer", "eq/$ruri/i")) { setflag(27); }; }; t_on_failure("1"); route(4); route(1); } # ----------------- ROUTE[4] ------------------------------- route[4] { # ---------------------------------------------------------- # NAT Traversal Section # ---------------------------------------------------------- if (isflagset(6) || isflagset(7)) { if (!isflagset(8)) { setflag(8); use_media_proxy(); }; }; } # ----------------- ROUTE[5] ------------------------------- route[5] { # ---------------------------------------------------------- # PSTN Handler # ---------------------------------------------------------- rewritehost("10.25.119.155"); # INSERT YOUR PSTN GATEWAY IP ADDRESS avp_write("i:45", "inv_timeout"); t_on_failure("1"); route(1); } # ----------------- ROUTE[6] ------------------------------- route[6] { # ---------------------------------------------------------- # Call Forwarding Handler # # This must be done as a route block because sl_send_reply() cannot be # called from the failure_route block # ---------------------------------------------------------- if (uri=~"^sip:1[0-9]{10}@") { strip(1); }; lookup("aliases"); if (!is_uri_host_local()) { if (!isflagset(22)) { append_branch(); }; route(4); route(1); break; }; if (uri=~"^sip:011[0-9]*@") { route(4); # route(5); break; }; if (!lookup("location")) { if (uri=~"^sip:[0-9]{10}@") { route(4); route(1); break; }; sl_send_reply("404", "User Not Found"); }; route(4); route(1); } # ----------------- ONREPLY_ROUTE[1] ------------------------------- onreply_route[1] { if ((isflagset(6) || isflagset(7)) &&(status=~"(180)|(183)|2[0-9][0-9]")) { if (!search("^Content-Length:[ ]*0")) { use_media_proxy(); }; }; if (client_nat_test("1")) { fix_nated_contact(); }; } # ----------------- FAILURE_ROUTE[1] ------------------------------- failure_route[1] { if (t_check_status("487")) { break; }; if (isflagset(26) && t_check_status("486")) { if (avp_pushto("$ruri", "s:fwdbusy")) { avp_delete("s:fwdbusy"); resetflag(26); route(6); break; }; }; if (isflagset(27) && t_check_status("408")) { if (avp_pushto("$ruri", "s:fwdnoanswer")) { avp_delete("s:fwdnoanswer"); resetflag(27); route(6); break; }; }; end_media_session(); }