[OpenSER-Users-ES] Gestionando "correctamente" el loose route

Saúl Ibarra saghul at gmail.com
Mon May 26 16:01:23 CEST 2008


2008/5/26 Iñaki Baz Castillo <ibc at in.ilimit.es>:
> El Sunday 25 May 2008 20:26:41 Saúl Ibarra escribió:
>> Hoola!
>>
>> Viendo distintos documentos por ahí, veo que cada uno pone un poco a
>> su manera la detección del loose route.
>>
>> De todos los que he visto, el que más me ha gustado ha sido el del
>> libro "Building Telephony Systems with OpenSER", en el que se propone
>> lo siguiente:
>>
>> if (has_totag()) {
>>    if (loose_route()) {
>>        if (message == "INVITE")
>>                route(x);
>>        if (message == "REFER")
>>               route(y);
>>         ....
>>     }
>> else {
>>     sl_rend_reply(403, "Fuck you!")
>> }
>
> Ojo con eso que tal y como está permites mensajes initial-request (has_totag()
> = FALSE) pero que contengan "Route", o sea, que sería como un open relay.
>
> Yo hago esto:
>
>
> ----------------
> # ¿in-dialog?
> if (loose_route()) $var(loose_route) = 1; else $var(loose_route) = 0;
>
> ### In-dialog procesing:
>
> if (has_totag() && $var(loose_route)) {
>        if (message == "INVITE")
>                route(x);
>        if (message == "REFER")
>               route(y);
>        ...
> }
>
> ### Initial request processing:
>
> if (!has_totag() && $var(loose_route)) {
>        # Initial request -> preloaded ROUTE set?
>         if ($var(loose_route)) {
>                xlog("L_ERROR", "ERROR: Attempt to route with preloaded Route\n");
>                        sl_send_reply("403","Preload Route denied");
>                }
>        }
> }
> ---------------------
>

hasta aquí OK, pero esta segunda parte me pierde un poco: ni NO tiene
totag, el if haría if (1 && $var(loose_route)) entonces, la única
menra de entrar en ese if no sería que loose_route valiera 1? No
podríoa ser algo así?:

### Initial request processing:

if (!has_totag()) {
        # Initial request -> preloaded ROUTE set?
         if ($var(loose_route)) {
                xlog("L_ERROR", "ERROR: Attempt to route with
preloaded Route\n");
                        sl_send_reply("403","Preload Route denied");
                }
        }

       if (method=="INVITE")
             route(x);
       if (method == "REGISTER")
            route(z);
}

> Es importante guardar y usar la variable $var(loose_route) ya que no podemos
> llamar dos veces a la función "loose_route()" puesto que haría algo
> impredecible.
>
> De todas formas, creo que mi forma es un tanto rebuscada.
>

Lo cierto es que le encuentro sentido :)

>
>
>> La pregunta es: se supone que esta (primero mirar el totag y luego
>> loose_route) es la manera "más correcta" de comprobar que lo que viene
>> esta in-dialog?
>
> Que está in-dialog sólo viene determinado por la presencia del "tag" en
> el "To", nada más. Se supone que como OpenSer le ha añadido previamente a
> responses de ese diálogo el "Record-Route" entonces los siguientes mensajes
> en dialog tendrá un "Route", y de hecho es dificil que llegue un mensaje
> in-dialog sin "Route" (pero no imposible ni mucho menos). Pero la clave de
> que un mensaje sea in-dialog es únicamente la presencia de "tag" en el "To".
>

ACK.

>
>> Y ya que estoy, otra preguntilla :) Qué mensajes in-dialog han de ir
>> autenticados? (INVITE y REFER fijo, pero los demás?).
>
> Esta pregunta la hice yo en su día en esta misma lista, recuerdo que había
> buenas conclusiones.
> Por cierto, el re-INVITE **NO** se debe autenticar necesariamente (de hecho no
> hay razón alguna para hacerlo), y el REFER puede hacerse o no. Más seguro es
> que sí, pero ojo si el llamado es un alias y luego exiges "check_from()" en
> la autenticación a un REFER desde dicho alias.
>

Umm, entonces puede que si pido autenticación para los re-INVITE y
REFER algún UA me de por el culo?!

>
> Saludos.

Salu2 y graciaxx!!


-- 
Saúl -- "Nunca subestimes el ancho de banda de un camión lleno de disketes."
----------------------------------------------------------------
http://www.saghul.net/




More information about the Users-es mailing list