#sem.cfg for philonline #created by rpagquil #aug. 16, 2005 debug=8 fork=yes log_stderror=yes listen=202.84.24.107 port=5060 children=4 dns=yes rev_dns=yes fifo="/tmp/ser_fifo" fifo_db_url="mysql://ser:heslo@localhost/ser" alias=sip.philonline.com #load module part loadmodule "/usr/local/lib/ser/modules/mysql.so" loadmodule "/usr/local/lib/ser/modules/domain.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/auth.so" loadmodule "/usr/local/lib/ser/modules/auth_db.so" loadmodule "/usr/local/lib/ser/modules/uri.so" loadmodule "/usr/local/lib/ser/modules/uri_db.so" loadmodule "/usr/local/lib/ser/modules/mediaproxy.so" loadmodule "/usr/local/lib/ser/modules/nathelper.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/acc.so" loadmodule "/usr/local/lib/ser/modules/permissions.so" loadmodule "/usr/local/lib/ser/modules/avpops.so" loadmodule "/usr/local/lib/ser/modules/group.so" #module parameter setup modparam("rr", "enable_full_lr", 1) modparam("auth_db|uri_db|usrloc|domain|permissions|group", "db_url", "mysql://ser:heslo@localhost/ser") modparam("auth_db", "calculate_ha1", 1) modparam("auth_db", "password_column", "password") modparam("usrloc", "db_mode", 1) modparam("usrloc", "use_domain", 0) 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("registrar", "nat_flag", 6) modparam("registrar", "use_domain", 0) modparam("acc", "log_level", 2) modparam("acc", "log_fmt", "cdfimorstup") modparam("acc", "report_ack", 1) #modparam("acc", "failed_transactions", 1) modparam("acc", "log_flag", 1) #modparam("acc", "report_cancels", 1) modparam("acc", "db_flag", 1) modparam("acc", "db_missed_flag", 3) modparam("acc", "db_url", "mysql://ser:heslo@localhost/ser") modparam("uri_db", "uri_table", "uri") modparam("uri_db", "uri_user_column", "username") modparam("uri_db", "uri_domain_column", "domain") modparam("uri_db", "use_domain", 1) modparam("uri_db", "use_uri_table", 1) modparam("uri_db", "subscriber_domain_column", "domain") modparam("uri_db", "subscriber_user_column", "username") modparam("uri_db", "subscriber_table", "subscriber") modparam("uri_db", "uri_uriuser_column", "uri_user") modparam("domain", "db_mode", 1) modparam("domain", "domain_table", "domain") modparam("domain", "domain_col", "domain") modparam("permissions", "default_allow_file", "/usr/local/etc/ser/allow.permissions") modparam("permissions", "default_deny_file", "/usr/local/etc/ser/deny.permissions") modparam("permissions", "db_mode", 1) modparam("permissions", "trusted_table", "trusted") modparam("avpops", "avp_url", "mysql://ser:heslo@localhost/ser") modparam("avpops", "avp_table", "usr_preferences" ) #modparam("avpops", "uuid_column", "id" ) #modparam("avpops", "avp_aliases", "email=i:67" ) #modparam("avpops", "db_scheme","email_scheme:table=subscriber;value_col=email_address;value_type=string") ##modparam("avpops", "db_scheme","language_scheme:table=subscriber;value_col=language;value_type=string") #modparam("tm", "tw_append","voicemail_headers:hdr[User-Agent];P-Email-Address=avp[$email]") modparam("tm","fr_inv_timer", 27) modparam("tm", "fr_inv_timer_avp", "inv_timeout") modparam("group", "table", "grp") modparam("group", "user_column", "username") modparam("group", "domain_column", "domain") modparam("group", "group_column", "grp") modparam("group", "use_domain", 1) #our routing logic route { 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#### if (method=="INVITE" && client_nat_test("3")) { record_route_preset("202.84.24.107:5060;nat=yes"); } else if (method!="REGISTER") { record_route(); }; ###call tear down section### if (method=="BYE" || method=="CANCEL") { end_media_session(); }; ###accounting### if ((!has_totag() && (method=="INVITE" || method=="ACK")) || (method=="BYE")) { setflag(1); }; ###loose route### if (loose_route()) { if (has_totag() && (method=="INVITE" || method=="ACK")) { if (client_nat_test("3") || search("^Route:.*;nat=yes")) { setflag(6); use_media_proxy(); }; }; route(1); break; }; ###call type processing### if (!is_uri_host_local()) { if (is_from_local() || allow_trusted()) { route(4); route(1); } else { sl_send_reply("403","Forbidden"); }; break; }; if (method=="CANCEL") { route(1); break; } else if (method=="INVITE") { route(3); break; } else if (method=="REGISTER") { route(2); break; }; lookup("aliases"); if (uri!=myself) { route(4); route(1); break; }; if (!lookup("location")) { sl_send_reply("404", "User not found"); break; }; route(1); } ##Default message handler## route[1] { t_on_reply("1"); if (!t_relay()) { if (method=="INVITE" || method=="ACK") { end_media_session(); }; sl_reply_error(); }; } ##Register message handler## route[2] { sl_send_reply("100", "Trying"); if (!search("^Contact:\ +\*") && client_nat_test("7")) { setflag(6); fix_nated_register(); force_rport(); }; if (!www_authorize("sip.philonline.com","subscriber")) { www_challenge("sip.philonline.com","0"); break; }; if (!check_to()) { sl_send_reply("401", "You are not authorized"); break; }; consume_credentials(); if (!save("location")) { sl_reply_error(); }; } ##INVITE message Handler## route[3] { # if (!allow_trusted()) { # if (!proxy_authorize("","subscriber")) { # proxy_challenge("", "0"); # break; # } else if (!check_from()) { # sl_send_reply("403", "User From=ID"); # break; # }; # consume_credentials(); # }; if (client_nat_test("3")) { setflag(7); force_rport(); fix_nated_contact(); }; #if (uri=~"^sip:1[0-9]@") { # strip(1); #}; lookup("aliases"); if (uri!=myself) { route(4); route(1); break; }; if (uri=~"^sip:011[0-9]*@") { strip(3); route(4); route(5); break; }; if (avp_db_load("$ruri/username","s:callfwd")) { setflag(22); avp_pushto("$ruri", "s:callfwd"); route(6); break; } else if (avp_db_load("$ruri/username","s:vmail")) { setflag(23); avp_pushto("$ruri", "s:vmail"); route(6); break; }; if (!lookup("location")) { 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); }; }; if (avp_db_load("$ruri/username", "s:vmail") && is_user_in("To", "vmail")) { if (!avp_check("s:vmail", "eq/$ruri/i")) { setflag(28); }; }; t_on_failure("1"); route(4); route(1); } ###NAT traversal section### route[4] { if (isflagset(6) || isflagset(7)) { if (!isflagset(8)) { setflag(8); use_media_proxy(); }; }; } ###PSTN Handler### route[5] { rewritehost("202.147.52.21"); avp_write("i:45", "inv_timeout"); t_on_failure("1"); route(4); route(1); } ###Call forwarding handler### route[6] { if (uri=~"^sip:1[0-9]{10}@") { strip(1); }; if (uri=~"^sip:[a-z][0-9]@202.84.24.47.*$" || uri=~"^sip:[a-z]@202.84.24.47.*$") { route(4); route(7); break; }; lookup("aliases"); if (uri!=myself) { if (!isflagset(22)) { append_branch(); }; route(4); route(1); break; }; if (uri=~"^sip:011[0-9]*@") { strip(3); 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); } ###Asterisk Handler### route[7] { sl_send_reply("100", "Trying"); rewritehostport("202.84.24.47:5060"); t_relay(); break; } 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] { if (t_check_status("487")) { break; }; if (isflagset(28)) { if (t_check_status("486") || !lookup("location")) { if (avp_pushto("$ruri", "s:vmail")) { avp_delete("s:vmail"); resetflag(28); route(6); 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(); }