log_level = 2 xlog_level = -2 log_stderror = yes log_facility = LOG_LOCAL0 abort_on_assert = yes memdump = 2 udp_workers = 8 auto_aliases = no socket = udp:10.0.0.10:5060 alias = udp:sipdomain.invalid:5060 ####### Modules Section ######## mpath = "modules/" loadmodule "signaling.so" loadmodule "sipmsgops.so" loadmodule "sl.so" loadmodule "tm.so" modparam("tm", "fr_timeout", 5) modparam("tm", "fr_inv_timeout", 10) modparam("tm", "restart_fr_on_each_reply", 0) modparam("tm", "onreply_avp_mode", 1) loadmodule "rr.so" modparam("rr", "append_fromtag", 1) loadmodule "mi_fifo.so" modparam("mi_fifo", "fifo_mode", 0666) loadmodule "httpd.so" loadmodule "mi_http.so" loadmodule "proto_udp.so" loadmodule "maxfwd.so" loadmodule "acc.so" modparam("acc", "db_url", "mysql://opensips:opensipsrw@localhost/opensips") #/* what special events should be accounted ? */ #modparam("acc", "early_media", 0) #modparam("acc", "report_cancels", 0) #/* by default we do not adjust the direct of the sequential requests. # if you enable this parameter, be sure to enable "append_fromtag" # in "rr" module */ #modparam("acc", "detect_direction", 0) loadmodule "usrloc.so" modparam("usrloc", "timer_interval", 5) loadmodule "registrar.so" loadmodule "dialog.so" loadmodule "auth.so" loadmodule "auth_db.so" modparam("auth_db", "db_url", "mysql://opensips:opensipsrw@localhost/opensips") loadmodule "db_mysql.so" loadmodule "cfgutils.so" route { if (!mf_process_maxfwd_header(10)) { sl_send_reply(483, "Too Many Hops"); exit; } if (has_totag()) { # handle hop-by-hop ACK (no routing required) if ( is_method("ACK") && t_check_trans() ) { t_relay(); exit; } # sequential request within a dialog should # take the path determined by record-routing if ( !loose_route() ) { # we do record-routing for all our traffic, so we should not # receive any sequential requests without Route hdr. send_reply(404, "Not Found"); exit; } # route it out to whatever destination was set by loose_route() # in $du (destination URI). t_relay(); exit; } if (is_method("CANCEL")) { if (t_check_trans()) t_relay(); exit; } t_check_trans(); # preloaded route checking if (loose_route()) { xlog("L_ERR", "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); if (!is_method("ACK")) send_reply(403,"Preload Route denied"); exit; } if (!is_myself("$rd") && false) { append_hf("P-hint: outbound\r\n"); route(relay); } # requests for my domain if (is_method("PUBLISH|SUBSCRIBE")) { send_reply(503, "Service Unavailable"); exit; } if (is_method("REGISTER")) { # store the registration and generate a SIP reply if (!save("location")) xlog("failed to register AoR $tu\n"); exit; } if ($rU==NULL) { # request with no Username in RURI send_reply(484, "Address Incomplete"); exit; } $var(uas) = $RANDOM % 5; $var(uas) += 1; $rU = "uas-" + $var(uas); if (!www_authorize("10.0.0.10", "subscriber_10k")) www_challenge("10.0.0.10", , "MD5"); # do lookup with method filtering if (!lookup("location", "method-filtering")) { t_reply(404, "Not Found"); exit; } # account only INVITEs if (is_method("INVITE")) { record_route(); create_dialog(); do_accounting("db", "cdr"); } $rU = $oU; # when routing via usrloc, log the missed calls also #do_accounting("log", "missed"); route(relay); } route[relay] { # for INVITEs enable some additional helper routes if (is_method("INVITE")) { t_on_branch("per_branch_ops"); t_on_reply("handle_nat"); t_on_failure("missed_call"); } if (!t_relay()) { send_reply(500,"Internal Error"); } exit; } branch_route[per_branch_ops] { xlog("new branch at $ru\n"); } onreply_route[handle_nat] { xlog("incoming reply\n"); } failure_route[missed_call] { if (t_was_cancelled()) { exit; } # uncomment the following lines if you want to block client # redirect based on 3xx replies. ##if (t_check_status("3[0-9][0-9]")) { ##t_reply(404,"Not found"); ## exit; ##} }