Hi Alec, On a first view I spoted two major mistakes in tour script. First, the $retcode returns the code of the last called function, which in the tutorial was the load_balancer(), but in your case is the if() statement.....
Secondly, in failure route, there is no t_relay() after selecting the new destination Regards, Bogdan Alec Fett wrote: > I'm having some trouble implementing Bogdan's load_balancer tutorial. > > The desired behavior is to call the else block (containing xlog("ALL > GATEWAYS DOWN!\n") ) if all gatways are down. > However, something in my script is causing opensips to enter a > continuous loop. > > Initially I had "route(1)" in failure_route, which I thought was the > cause. However, this is still an issue when only calling load_balance. > > Aug 13 15:43:08 denver12 /usr/local/sbin/opensips[18397]: Saw an > authorized request FROM IP 10.1.10.76 TO sip:u...@10.1.10.76:5060 > .............................many more of > these................................... > Aug 13 15:43:08 denver12 /usr/local/sbin/opensips[18397]: Saw an > authorized request FROM IP 10.1.10.76 TO sip:u...@10.1.10.76:5060 > Aug 13 15:43:08 denver12 /usr/local/sbin/opensips[18397]: Looping > detected Sent 483: Looping > > (where 10.1.10.76 is openSIPS's ip) > > Any suggestions? > Thanks in Advance. > > -Alec > > > ---------------------------------------------------------------------------------------- > > route{ > route(1); > } > route[1]{ > ####IP AUTH############## > if( src_ip==10.1.10.0/24 ){ > route(2); > } > else{ > sl_send_reply("403","Forbidden"); > xlog("L_INFO", "Unauthorized IP address $si TO $ou Sent 403\n"); > exit; > } > } > > route[2]{ > xlog("Saw an authorized request FROM IP $si TO $ou"); > > if (!mf_process_maxfwd_header("3")) { > sl_send_reply("483","looping"); > xlog("Looping detected Sent 483: Looping\n"); > exit; > } > > > if (!has_totag()) { > # initial request > record_route(); > } else { > # sequential request -> obey Route indication > loose_route(); > t_relay(); > exit; > } > > # handle cancel and re-transmissions > if ( !t_check_trans() ) { > if (is_method("CANCEL")) > exit; > } > > > # from now on we have only the initial requests > if (!is_method("INVITE")) { > send_reply("405","Method Not Allowed"); > exit; > } > > # detect resources and do balancing > # looks like an IPR call > if(load_balance("1","ipr")){ > t_on_failure("1"); > } > else{ > xlog("ALL GATEWAYS DOWN!\n"); > exec_msg("/usr/bin/php /usr/scripts/sip-failed.php > all_destinations_down_1 '$si' '$rU' '$fu'"); > sl_send_reply("500","Service full"); > exit; > } > > # LB function returns negative if no suitable destination (for > requested resources) is found, > # or if all destinations are full > if ($retcode<0) { > xlog("Gateway down!\n"); > exec_msg("/usr/bin/php /usr/scripts/sip-failed.php > service_full '$si' '$rU' '$fu'"); > sl_send_reply("500","Service full"); > exit; > } > > xlog("Selected destination is: $du\n"); > > # send it out > if (!t_relay()) { > exec_msg("/usr/bin/php /usr/scripts/sip-failed.php > t_relay_failure '$si' '$rU' '$fu'"); > sl_reply_error(); > } > } > > failure_route[1]{ > xlog("Gateway down!\n"); > exec_msg("/usr/scripts/sip-failed.php gateway_down '$si' '$rU' '$fu'"); > lb_disable(); > load_balance("1","ipr"); > } > > _______________________________________________ > Users mailing list > Users@lists.opensips.org > http://lists.opensips.org/cgi-bin/mailman/listinfo/users > > _______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users