debug=5 # debug level (cmd line: -dddddddddd) fork=yes log_stderror=yes # (cmd line: -E) check_via=no # (cmd. line: -v) dns=no # (cmd. line: -r) rev_dns=no # (cmd. line: -R) port=5060 children=20 fifo="/tmp/ser_fifo" listen=5.6.7.8 alias = "mydomain.com" # --------------------------------------------------------------------------- loadmodule "/usr/local/lib/ser/modules/mysql.so" # needed for domain.so loadmodule "/usr/local/lib/ser/modules/registrar.so" loadmodule "/usr/local/lib/ser/modules/dbtext.so" # necesario para domain.so loadmodule "/usr/local/lib/ser/modules/usrloc.so" loadmodule "/usr/local/lib/ser/modules/domain.so" # necesario para mediaproxy.so (is_from_local) loadmodule "/usr/local/lib/ser/modules/mediaproxy.so" loadmodule "/usr/local/lib/ser/modules/rr.so" loadmodule "/usr/local/lib/ser/modules/sl.so" # stateless loadmodule "/usr/local/lib/ser/modules/tm.so" # statefull loadmodule "/usr/local/lib/ser/modules/acc.so" loadmodule "/usr/local/lib/ser/modules/maxfwd.so" loadmodule "/usr/local/lib/ser/modules/textops.so" loadmodule "/usr/local/lib/ser/modules/auth.so" # needed for xml_socket loadmodule "/usr/local/lib/ser/modules/xml_socket.so" # our module # --------------------------------------------------------------------------- modparam("usrloc", "db_mode", 0) modparam("domain", "db_mode", 0) #modparam("domain", "db_url", "mysql://serro:47serro11@216.55.240.66/ser") modparam("domain", "db_url", "mysql://serro:47serro11@localhost/ser") #Default value is "mysql://serro:47serro11@localhost/ser" modparam("mediaproxy", "natping_interval", 60) # unix socket to send commands to proxy dispatcher modparam("mediaproxy", "mediaproxy_socket", "/var/run/proxydispatcher.sock") modparam("registrar","nat_flag",2) modparam("rr", "enable_full_lr", 1) #modparam("rr", "enable_double_rr", 0) modparam("tm", "fr_timer", 50) modparam("tm", "fr_inv_timer", 50) # --------------------------------------------------------------------------- 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 too big"); break; }; # NAT control if (client_nat_test("3")) { setflag(2); force_rport(); fix_contact(); }; if (method=="REGISTER") { route(1); break; }; if (method == "INVITE"){ route(2); break; }; if (method == "BYE"){ route(3); break; }; route(4); } #-------------------------------------------------------------------------------------- # Aqui se procesan los REGISTERs - REGISTERs here #-------------------------------------------------------------------------------------- route[1]{ if (xml_www_authorize_register("")) { # challenge - response auth www_challenge("", "0"); break; }; consume_credentials(); sl_send_reply("200", "Ok"); } #-------------------------------------------------------------------------------------- # Aqui se procesan los INVITEs - INVITEs here #-------------------------------------------------------------------------------------- route[2]{ t_on_reply("1"); sl_send_reply("100"," Trying"); if (t_lookup_request()){ log(1, "route[2]: Transaction already in progress\n"); break; }; if (!xml_www_authorize_invite("")) { # chanllenge - response auth - load msg->new_uri www_challenge("", "0"); break; }; consume_credentials(); record_route(); # use_media_proxy(); log(1, "routing the invite...\n"); if (!t_relay()){ sl_reply_error(); # end_media_session(); break; }; } #-------------------------------------------------------------------------------------- # Aqui se procesan los BYEs - BYEs here #-------------------------------------------------------------------------------------- route[3]{ t_on_reply("1"); # p/ q en los reply tb cambiemos contact if (t_lookup_request()){ sl_send_reply("100", "Trying"); log(1, "route[3]: Transaction already in progress\n"); break; }; #end_media_session(); xml_acc(); # accounting if (!t_relay()) { sl_reply_error(); break; }; } #-------------------------------------------------------------------------------------- # Aqui se procesan los metodos que no son INVITEs ni BYEs, i.e., ACKs & CANCELs #-------------------------------------------------------------------------------------- route[4]{ xml_acc(); if (!t_relay()) { sl_reply_error(); break; }; } # Cuando hay NAT, en la respuesta 200 (OK) del telefono destino se debe cambiar el campo # contact este uri (el del campo contact) sera usado en las siguientes transacciones #-------------------------------------------------------------------------------------- # Aqui se procesan los replies: 1xx, 200, 4xx, etc - #-------------------------------------------------------------------------------------- onreply_route[1] { xml_acc(); if (status=~"(183)|(2[0-9][0-9])") { if (client_nat_test("1")) { fix_contact(); }; }; }