# # $Id: openser.cfg,v 1.5 2005/10/28 19:45:33 bogdan_iancu Exp $ # # ----------- global configuration parameters ------------------------ debug=3 # debug level (cmd line: -dddddddddd) fork=yes log_stderror=yes # (cmd line: -E) /* Uncomment these lines to enter debugging mode fork=no log_stderror=yes */ check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=4 fifo="/tmp/openser_fifo" # ------------------ module loading ---------------------------------- loadmodule "/opt/openser/lib/openser/modules/sl.so" loadmodule "/opt/openser/lib/openser/modules/tm.so" loadmodule "/opt/openser/lib/openser/modules/rr.so" loadmodule "/opt/openser/lib/openser/modules/maxfwd.so" loadmodule "/opt/openser/lib/openser/modules/usrloc.so" loadmodule "/opt/openser/lib/openser/modules/registrar.so" loadmodule "/opt/openser/lib/openser/modules/textops.so" loadmodule "/opt/openser/lib/openser/modules/auth.so" loadmodule "/opt/openser/lib/openser/modules/auth_radius.so" loadmodule "/opt/openser/lib/openser/modules/xlog.so" loadmodule "/opt/openser/lib/openser/modules/nathelper.so" loadmodule "/opt/openser/lib/openser/modules/uri.so" # ----------------- setting module-specific parameters --------------- # -- usrloc params -- modparam("usrloc", "db_mode", 0) #modparam("rr", "enable_full_lr", 1) modparam("xlog", "buf_size", 8192) modparam("auth_radius", "radius_config", "/opt/openser/etc/openser/radiusclient.conf") modparam("auth", "rpid_prefix", ";screen=yes;privacy=off") modparam("auth", "rpid_avp", "rpid") modparam("registrar", "nat_flag", 6) modparam("nathelper", "natping_interval", 30) modparam("nathelper", "ping_nated_only", 1) modparam("nathelper", "rtpproxy_sock", "unix:/opt/rtpproxy/sock/rtpproxy.sock") # ------------------------- request routing logic ------------------- # main routing logic route{ xlog("L_NOTICE", "REQUEST: $rm, $ru, $si\n"); if (method != "REGISTER") { record_route(); } if (method == "BYE" || method == "CANCEL") { unforce_rtp_proxy(); } if (src_ip == "170.127.120.189") { xlog("L_NOTICE", "*** FOUND THAT PHONE\n"); setflag(6); force_rport(); } if (loose_route()) { xlog("L_NOTICE", "*** loose routing enforced\n"); if (has_totag() && (method == "INVITE" || method == "ACK")) { if (nat_uac_test("3")) { xlog("L_NOTICE", "*** found NAT (1) !\n"); setflag(6); force_rport(); fix_nated_contact(); } force_rtp_proxy("l"); } route(1); return; } if (uri != myself) { xlog("L_NOTICE", "*** uri != myself\n"); sl_send_reply("483", "will not handle this"); return; } if (method == "CANCEL") { xlog("L_NOTICE", "*** cancel\n"); route(1); return; } else if (method == "INVITE") { xlog("L_NOTICE", "*** invite\n"); route(3); return; } else if (method == "REGISTER") { xlog("L_NOTICE", "*** register\n"); route(2); return; } xlog("L_NOTICE", "*** at the end: $rm\n"); route(1); return; } route[1] { t_on_reply("1"); if (!t_relay()) { if (method == "INVITE" && isflagset(6)) { unforce_rtp_proxy(); }; sl_reply_error(); } } route[2] { if (!search("^Contact: [ ]*\*") && nat_uac_test("3")) { xlog("L_NOTICE", "*** found NAT (2) !\n"); if (nat_uac_test("1")) { xlog("L_NOTICE", " --> 1\n"); } if (nat_uac_test("2")) { xlog("L_NOTICE", " --> 2\n"); } setflag(6); fix_nated_register(); force_rport(); } if (! radius_www_authorize("uu.net")) { www_challenge("uu.net", "0"); return; } consume_credentials(); if (!save("location")) { sl_reply_error(); } return; } route[3] { if (src_ip == "62.191.185.147") { xlog("L_NOTICE", "*** from upstream proxy\n"); if (uri =~ "^sip:99") { xlog("L_NOTICE", "*** outbreak prefix from outside, reject\n"); sl_send_reply("484", "no pstn outbreak for you"); return; } } else { if (! radius_www_authorize("uu.net")) { www_challenge("uu.net", "0"); return; }; consume_credentials(); if (nat_uac_test("3")) { xlog("L_NOTICE", "*** found NAT (3) !\n"); setflag(6); } append_rpid_hf(); if (uri=~"^sip:99") { xlog("L_NOTICE", "*** pstn outbreak call, uri: $ru\n"); strip(2); xlog("L_NOTICE", "*** stripped uri: $ru\n"); if (uri=~"^sip:[1-9]") { xlog("L_NOTICE", "*** local call\n"); prefix("+49231"); } else if (uri=~"^sip:0[1-9]") { xlog("L_NOTICE", "*** national call\n"); strip(1); prefix("+49"); } else if (uri=~"^sip:00[1-9]") { xlog("L_NOTICE", "*** international call\n"); strip(2); prefix("+"); } else { xlog("L_NOTICE", "*** something wrong\n"); sl_send_reply("488", "wrong telephone number"); return; } rewritehostport("62.191.185.147:5060"); route(4); route(1); return; } } xlog("L_NOTICE", "*** looking up ...\n"); if (!lookup("location")) { xlog("L_NOTICE", " --> not found\n"); sl_send_reply("404", "Not Found"); return; } xlog("L_NOTICE", " --> found\n"); route(4); route(1); return; } route[4] { if (isflagset(6)) { xlog("L_NOTICE", "*** handle NAT (1)\n"); force_rport(); fix_nated_contact(); force_rtp_proxy(); } return; } onreply_route[1] { xlog("L_NOTICE", "*** onreply_route\n"); if (isflagset(6) && status =~ "(180)|(183)|2[0-9][0-9]") { if (! search("^Content-Length:[ ]*0")) { xlog("L_NOTICE", "*** handle NAT (2)\n"); force_rtp_proxy(); } } if (nat_uac_test("1")) { fix_nated_contact(); xlog("L_NOTICE", "*** handle NAT (3)\n"); } return; }