# ----------- global configuration parameters ------------------------ /* debug=5 fork=no log_stderror=yes */ debug=1 fork=yes log_stderror=no listen=10.192.250.132 check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=5 fifo="/tmp/ser_fifo" alias="10.192.250.132" fifo_mode=438 # 666 # ------------------ module loading ---------------------------------- loadmodule "/usr/local/lib/ser/modules/mysql.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/exec.so" loadmodule "/usr/local/lib/ser/modules/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_radius.so" loadmodule "/usr/local/lib/ser/modules/group.so" loadmodule "/usr/local/lib/ser/modules/acc.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/domain.so" loadmodule "/usr/local/lib/ser/modules/xlog.so" loadmodule "/usr/local/lib/ser/modules/mediaproxy.so" loadmodule "/usr/local/lib/ser/modules/uri.so" # ----------------- setting module-specific parameters --------------- modparam("tm", "fr_inv_timer", 40) modparam("tm", "fr_timer", 30) modparam("auth_radius", "service_type", 15) modparam("auth_radius", "radius_config", "/usr/local/etc/radiusclient/radiusclient.conf") modparam("acc", "radius_flag", 1) modparam("acc", "report_ack", 0) modparam("acc", "radius_missed_flag", 2) modparam("usrloc", "db_mode", 1) modparam("usrloc", "timer_interval", 15) modparam("rr", "enable_full_lr", 1) modparam("registrar", "nat_flag", 6) modparam("mediaproxy", "natping_interval", 30) # Ping interval 30 s # ------------------------- request routing logic ------------------- route{ if (method=="REGISTER" || !search("^Record-Route:")) { if (client_nat_test("3")) { force_rport(); fix_contact(); setflag(5); }; }; if (method == "BYE" || method == "CANCEL") { end_media_session(); setflag(1); # accounting setflag(2); # missed call }; # 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"); break; }; if ( msg:len > max_len ) { sl_send_reply("513", "Message too big"); break; }; record_route(); if (loose_route()) { if (method=="BYE") { setflag(1); setflag(2); end_media_session(); }; if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; break; }; if (uri==myself) { if (method=="REGISTER") { if (!radius_www_authorize("")) { www_challenge("", "0"); break; }; if (!check_from()) { sl_send_reply("403","Forbidden"); break; }; if (isflagset(5)) { setflag(6); }; if (!save("location")) { sl_reply_error(); }; break; }; if (method=="INVITE") { if (!radius_proxy_authorize("")) { proxy_challenge("", "0"); sl_send_reply("403", "That's not your home"); break; }; if (uri=~"sip:[0-9]{4,6}@") { if (is_user_in("To", "voicemail")) { setflag(8); }; t_on_failure("1"); }; ###lookup("aliases"); consume_credentials(); # just an example for dumps if (uri=~"sip:33241009@") { strip(4); subst('/sip:3324([0-9]+@.*)$/sip:\1/g'); }; if (!lookup("location")) { if (uri=~"sip:[0-9]{4,6}@") { if (!radius_proxy_authorize("")) { proxy_challenge("", "0"); sl_send_reply("403", "That's not your home"); break; }; # voicemail OK if ( isflagset(8) ) { prefix("u"); setflag(1); # accounting } else { sl_send_reply("404", "Not Found"); break; }; t_on_reply("1"); if (method=="INVITE") { use_media_proxy(); setflag(7); }; rewritehostport("vm-box:5060"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); } break; } else { route(1); break; }; }; t_on_reply("1"); if (method=="INVITE") { use_media_proxy(); setflag(7); }; }; setflag(1); # accounting setflag(2); # missed call }; if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; } route[1] { if (method=="INVITE") { if (!radius_proxy_authorize("")) { proxy_challenge("", "0"); sl_send_reply("403", "That's not your home"); break; }; if (uri=~"sip:0[0-9]{6,20}@") { if (exec_dset("/usr/local/etc/ser/dialgent;echo>/dev/null")) { setflag(1); # accounting if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; }; break; } else { sl_send_reply("404", "Not Found"); break; }; } } onreply_route[1] { if (isflagset(6)) { fix_contact(); } if ( (status=~"200" || status=~"183") ) { use_media_proxy(); }; } failure_route[1] { if ( isflagset(8) ) { if(t_check_status("486")){ prefix("b"); } else { prefix("u"); }; rewritehostport("vm-box:5060"); append_branch(); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; }; break; }; if (method=="INVITE" || method=="ACK") { end_media_session(); }; }