Great! The only other advice I'd give you is to think about the gateway list, from matching and prefix. I ran into a few odd cases after deploying LCR where I had to define additional rules to handle URIs with slightly different syntax.
-Steve
Arun Kumar wrote:
Hi Steve,
thanks very much your code is working fine now ser is able to use my both gw and able to send calls on both gw if first fail then it will send to other.
thanks very much for helping me.
thanks arun
On 1/10/07, *Steve Blair* <blairs@isc.upenn.edu mailto:blairs@isc.upenn.edu> wrote:
Arun: This depends a little on your configuration. Generally speaking the !load_gws and !next_gw would be in route block 0. You will most likely want to do any per-call checks or rewrites before determining which gateway should receive the call. The failure_route can be inserted after your route blocks. -Steve Arun Kumar wrote: > Hi, > > thanks, One more thing can you please guide me where do I've to place > this code in my ser.cfg. > > thanks > > arun > > On 1/10/07, *Steve Blair * <blairs@isc.upenn.edu <mailto:blairs@isc.upenn.edu> > <mailto: blairs@isc.upenn.edu <mailto:blairs@isc.upenn.edu>>> wrote: > > > Arun: > > I would try something like the following: > > if (!load_gws()) { > sl_send_reply("500", "Server Internal Error - Cannot load > gateways"); > break; > } else { > xlog("L_INFO", "\n[SER]: - [$Tf] Method: <$rm> R-uri: <$ru> > From: <$fu> > To <$tu> : Successfully Loaded Gateway List\n"); > }; > > ...... > > if (!next_gw()) { > t_reply("503", "Service not available - No more gateways"); > break; > } else { > t_on_failure("2"); <--- This will be where you load the > next > gateway > t_relay(); > break; > }; > > failure_route[2] { > > if (!next_gw()) { > xlog("L_CRIT","No more gateways for <$tu>\n"); > t_reply("503", "Service not available - No more gateways"); > break; > } else { > t_on_failure("2"); > t_relay(); > break; > } > } > > -Steve > > Arun Kumar wrote: > > Hi > > > > thanks for your prompt reply but I've already checked and I'm > not able > > to make my lcr working by seeing these two pages I got this conf but > > > > This config is sending the call to my first gateway but when My > first > > gateway is down its not sending the calls to other gateways. Plese > > help me to make this working. Here is my config file. > > > > ------------------------ > > debug=3 > > fork=no > > log_stderror=yes > > > > listen= 192.168.2.210 <http://192.168.2.210> <http://192.168.2.210> > <http://192.168.2.210/> # INSERT YOUR IP > > ADDRESS HERE > > port=5060 > > children=4 > > > > dns=no > > rev_dns=no > > fifo="/tmp/ser_fifo" > > fifo_db_url="mysql://ser:pass@localhost/ser" > > > > 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/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/domain.so" > > loadmodule "/usr/local/lib/ser/modules/nathelper.so" > > loadmodule "/usr/local/lib/ser/modules/avpops.so" > > loadmodule "/usr/local/lib/ser/modules/textops.so" > > loadmodule "/usr/local/lib/ser/modules/mediaproxy.so" > > loadmodule "/usr/local/lib/ser/modules/permissions.so" > > loadmodule "/usr/local/lib/ser/modules/acc.so" > > loadmodule "/usr/local/lib/ser/modules/auth_radius.so" > > loadmodule "/usr/local/lib/ser/modules/lcr.so" > > > > > > modparam("auth_db|permissions|uri_db|usrloc|domain", "db_url", " > > mysql://ser:pass@localhost/ser") > > modparam("auth_db", "calculate_ha1", 1) > > modparam("auth_db", "password_column", "password") > > 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("usrloc", "db_mode", 2) > > > > modparam("registrar", "nat_flag", 6) > > > > modparam("rr", "enable_full_lr", 1) > > > > modparam("tm", "fr_inv_timer", 120) > > modparam("tm", "fr_inv_timer_avp", "inv_timeout") > > > > modparam("permissions", "db_mode", 1) > > modparam("permissions", "trusted_table", "trusted") > > > > modparam("lcr","db_url", "mysql://ser:pass@localhost/ser") > > modparam("lcr","gw_table","gw") > > modparam("lcr","gw_name_column","gw_name") > > modparam("lcr","ip_addr_column","ip_addr") > > modparam("lcr","port_column","port") > > modparam("lcr","grp_id_column","grp_id") > > modparam("lcr","lcr_table","lcr") > > modparam("lcr","prefix_column","prefix") > > modparam("lcr","from_uri_column","from_uri") > > modparam("lcr","priority_column","priority") > > modparam("lcr","contact_avp","1401") > > modparam("lcr","fr_inv_timer_avp","fr_inv_timer_avp") > > modparam("lcr","fr_inv_timer",90) > > modparam("lcr","fr_inv_timer_next",60) > > # ------ Account and Radius modules-------------- > > modparam("acc", "db_url", " mysql://ser:pass@localhost/ser") > > > > modparam("acc","log_level",1) > > modparam("acc","log_flag",1) > > modparam("acc", "db_flag", 1) > > > > modparam("acc","radius_flag",1) > > modparam("acc","service_type",15) > > > #modparam("acc","radius_config","/usr/local/etc/radiusclient-ng/radiusclient.conf") > > > > > > route { > > > > # > ----------------------------------------------------------------- > > # Sanity Check Section > > # > ----------------------------------------------------------------- > > 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 Section > > # > ----------------------------------------------------------------- > > if (method=="INVITE" && client_nat_test("3")) { # setflag(1); > > # INSERT YOUR IP ADDRESS HERE > > record_route_preset(" 192.168.2.210:5060 <http://192.168.2.210:5060> > <http://192.168.2.210:5060> > > <http://192.168.2.210:5060/>;nat=yes"); > > } else if (method!="REGISTER") { > > record_route(); > > }; > > # > ----------------------------------------------------------------- > > # Call Tear Down Section > > # > ----------------------------------------------------------------- > > if (method=="BYE" || method=="CANCEL") { setflag(1); > > end_media_session(); > > }; > > > > # > ----------------------------------------------------------------- > > # Loose Route Section > > # > ----------------------------------------------------------------- > > if (loose_route()) { > > > > if ((method=="INVITE" || method=="REFER") && !has_totag()) { > > sl_send_reply("403", "Forbidden Cant cross 1st bridge"); > > break; > > }; > > > > if (method=="INVITE") { > > > > if (!allow_trusted()) { > > > > if (!proxy_authorize("","subscriber")) { > > proxy_challenge("","0"); > > break; > > } else if (!check_from()) { > > sl_send_reply("403", "Use From=ID"); > > break; > > }; > > > > consume_credentials(); > > }; > > > > if (client_nat_test("3")||search("^Route:.*;nat=yes")){ > > setflag(6); > > use_media_proxy(); > > }; > > }; > > > > route(1); > > break; > > }; > > # > ----------------------------------------------------------------- > > # Call Type Processing Section > > # > ----------------------------------------------------------------- > > if (!is_uri_host_local()) { > > if (is_from_local() || allow_trusted()) { > > sl_send_reply("404", "I am trusted host, "); > > route(4); > > route(1); > > } else { > > sl_send_reply("403", "Forbidden, I am here"); > > }; > > break; > > }; > > > > if (method=="ACK") { setflag(1); > > route(1); > > break; > > } if (method=="CANCEL") { setflag(1); > > route(1); > > break; > > } else if (method=="INVITE") { setflag(1); > > # sl_send_reply("410", "I am sending your call, "); > > route(3); > > break; > > } else if (method=="REGISTER") { > > route(2); > > break; > > }; > > > > lookup("aliases"); > > if (!is_uri_host_local()) { > > route(4); > > route(1); > > break; > > }; > > > > if (!lookup("location")) { > > sl_send_reply("404", "User Not Found"); > > break; > > }; > > > > route(1); > > } > > > > route[1] { > > > > # > ----------------------------------------------------------------- > > # Default Message Handler > > # > ----------------------------------------------------------------- > > > > t_on_reply("1"); > > > > if (!t_relay()) { > > > > if (method=="INVITE" || method=="ACK") { setflag(1); > > end_media_session(); > > }; > > > > sl_reply_error(); > > }; > > } > > > > route[2] { > > > > # > ----------------------------------------------------------------- > > # REGISTER Message Handler > > # > ----------------------------------------------------------------- > > > > sl_send_reply("100", "Trying"); > > > > if (!search("^Contact:[ ]*\*") && client_nat_test("7")) { > > setflag(6); > > fix_nated_register(); > > force_rport(); > > }; > > > > if (!www_authorize("","subscriber")) { > > www_challenge("","0"); > > break; > > }; > > if (!check_to()) { > > sl_send_reply("401", "Unauthorized"); > > break; > > }; > > > > consume_credentials(); > > > > if (!save("location")) { > > sl_reply_error(); > > }; > > } > > > > route[3] { > > > > # > ----------------------------------------------------------------- > > # INVITE Message Handler > > # > ----------------------------------------------------------------- > > > > if (client_nat_test("3")) { > > setflag(7); > > force_rport(); > > fix_nated_contact(); > > }; > > > > if (!allow_trusted()) { > > > > if (!proxy_authorize("","subscriber")) { > > proxy_challenge("","0"); > > break; > > } else if (!check_from()) { > > sl_send_reply("403", "Use From=ID"); > > break; > > }; > > > > consume_credentials(); > > }; > > > > route(4); > > > > if(!load_gws()){ > > sl_send_reply("500", "Internal server error, unable to load > gateways"); > > break; > > } > > if(!next_gw()){ > > sl_send_reply("503", "Service not available, no gateways found"); > > break; > > }; > > > > if (!is_uri_host_local()) { > > route(4); > > route(1); > > break; > > }; > > > > > > # route(1); > > } > > > > route[4] { > > > > # > ----------------------------------------------------------------- > > # NAT Traversal Section > > # > ----------------------------------------------------------------- > > > > if (isflagset(6) || isflagset(7)) { > > if (!isflagset(8)) { > > setflag(8); > > use_media_proxy(); > > }; > > }; > > } > > > > 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(); > > }; > > } > > > > > > thanks very much > > > > arun > > > > On 1/10/07, * Greger V. Teigre* <greger@teigre.com <mailto:greger@teigre.com> > <mailto: greger@teigre.com <mailto:greger@teigre.com>> > > <mailto: greger@teigre.com <mailto:greger@teigre.com> <mailto:greger@teigre.com <mailto:greger@teigre.com>>>> wrote: > > > > A quick search on iptel.org <http://iptel.org> <http://iptel.org> > <http://iptel.org> would have given > > you these: > > http://www.iptel.org/lcr_module_drop_in_for_0_9_x > > http://www.iptel.org/lcr_with_mysql_accounting <http://www.iptel.org/lcr_with_mysql_accounting> > <http://www.iptel.org/lcr_with_mysql_accounting> > > > > > > Arun Kumar wrote: > >> Hi > >> > >> please help with LCR can some one show his lcr config file > >> please. I'm not able to make it working. > >> > >> please help > >> > >> thanks > >> arun > >> > ------------------------------------------------------------------------ > >> > >> _______________________________________________ > >> Serusers mailing list > >> Serusers@lists.iptel.org <mailto:Serusers@lists.iptel.org> <mailto:Serusers@lists.iptel.org <mailto:Serusers@lists.iptel.org>> > <mailto:Serusers@lists.iptel.org <mailto:Serusers@lists.iptel.org> <mailto:Serusers@lists.iptel.org <mailto:Serusers@lists.iptel.org>>> > >> http://lists.iptel.org/mailman/listinfo/serusers > >> > > > > > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > Serusers mailing list > > Serusers@lists.iptel.org <mailto:Serusers@lists.iptel.org> <mailto: Serusers@lists.iptel.org <mailto:Serusers@lists.iptel.org>> > > http://lists.iptel.org/mailman/listinfo/serusers > > > >