....snnipet... ## Ruteo a LCR para determinar destino. # if (avp_load_radius("caller")) { if (uri=~"^sip:$") { sl_send_reply("403","Forbidden => CALL BLOCK (SIPQUEST)"); xlog("L_INFO", "[$ci] MAIN : LLamada bloqueada desde BD ruta 3"); exit; }; $avp(i:1)=0; route(3); } else { sl_send_reply("403","Forbidden => CAN'T TRANSLATE"); xlog("L_INFO", "[$ci] MAIN : Falla avp_load_radius"); exit; }; #route(3); } # # # -- 3 -- Seccion de Rutas # # route[1] { # ### Entrego el request al target. # t_on_failure("1"); if (!t_relay()) { sl_reply_error(); }; xlog("L_INFO","[$ci] RUTA1 : $rm t_relay a $ru"); exit; } route[2] { # ### Este servidor no maneja REGISTROS. # sl_send_reply("503","Wrong Method REGISTER, contact your VoIP provider"); exit; } route[3] { # ### LCR # $var(nr)=$avp(s:caller_nr); $var(rd)=$avp(s:caller_rd); if( $avp(i:1) < $var(nr) ) { $var(i)=$avp(i:1); $avp(s:ruta)=$(var(rd){param.valueat,$var(i)}); xlog("L_INFO", "[$ci] RUTA3::ruta : avp_ruta = $avp(s:ruta)"); if( !avp_pushto("$ru/username","$avp(s:ruta)/g") ) { sl_send_reply("403","Forbidden - Problemas BD ruta 3"); xlog("L_INFO", "[$ci] RUTA3::ruta : Falla AVP_PUSHTO"); exit; }; avp_delete("$avp(i:500)/g"); $avp(i:500) = $avp(s:ruta); avp_delete("$avp(s:ruta)/g"); if (!load_gws()) { sl_send_reply("503", "Unable to load gateways"); exit; } if (!next_gw()) { sl_send_reply("503", "Unable to find a gateway"); exit; } xlog("L_INFO", "[$ci] RUTA3::ruta : cambiando $ou por $ru"); $avp(i:1)= $avp(i:1) + 1; route(1); } else { sl_send_reply("503", "NO hay mas rutas BD"); xlog("L_INFO", "[$ci] RUTA3::ruta : No hay mas rutas desde la BD para $rm:$ou\n"); exit; } } failure_route[1] { xlog("L_INFO", "[$ci] FAILURE_ROUTE : $rm:$ru failure_route\n"); if (t_was_cancelled()) { xlog("L_INFO", "[$ci] FAILURE_ROUTE::cancelled : $rm:$ru t_was_cancelled en failure_route\n"); exit; } if (!next_gw()) { xlog("L_INFO", "[$ci] FAILURE_ROUTE::lcr : No hay mas gateways para $rm:$ou\n"); update_stat("fail_over_route", "+1"); route(3); } else { xlog("L_INFO", "[$ci] FAILURE_ROUTE::lcr : $rm cambiando $ou por $ru en failure_route"); } t_on_failure("1"); t_relay(); }