[Users-es] Problemas con configuración de sipwise

Raúl Alexis Betancor Santana rabs at dimension-virtual.com
Thu Aug 16 11:21:05 CEST 2007


He estado experimentando con una configuración de las que genera sipwise y no 
llego a entender porque falla.

La config:

Teléfono IP  <-> OpenSer <-> Asterisk (echo Test)

El teléfono se registra sin problemas en el OpenSer y lanza una llamada, que 
OpenSer distribuye al Asterisk mediante el módulo dispatch, en el Asterisk 
solo hay un dialplan con un EchoTest.

Todo el dialogo SIP es correcto hasta que el Asterisk hace el Answer() y en 
ese momento, cuando el SIP-ACK llega al OpenSer desde el asterisk, el openser 
lo toma como una nueva sesion SIP y lo descarta, cortandose la comunicación.

No añado el archivo del openser.cfg porque es un tostón de 1026 lineas de 
script, pero vamos, es de los autogenerados de sipwise, osea que no hay mucha 
miga, lo único que he cambiado, es que no uso rtpproxy ni mediaproxy .. sino 
el módulo dispatch, para enviar a Asterisk.

Pego solo el main route y la ruta implicada:

########################################################################
# Request route 'main'
########################################################################
route[0]
{
        xlog("L_INFO", "New request - M=$rm RURI=$ru F=$fu T=$tu IP=$si 
ID=$ci\n");
        force_rport();
        if(msg:len > max_len)
        {

                xlog("L_INFO", "Message too big - M=$rm RURI=$ru F=$fu T=$tu 
IP=$si ID=$ci\n");
                sl_send_reply("513", "Message Too Big");
                exit;
        }
        if (!mf_process_maxfwd_header("10"))
        {

                xlog("L_INFO", "Too many hops - M=$rm RURI=$ru F=$fu T=$tu 
IP=$si ID=$ci\n");
                sl_send_reply("483", "Too Many Hops");
                exit;
        }
        if(!is_method("REGISTER"))
        {
                if(nat_uac_test("19"))
                {
                        record_route(";nat=yes");
                }
                else
                {
                        record_route();
                }
        }
        if(is_method("CANCEL") || is_method("BYE"))
        {
                end_media_session();
        }
        if(loose_route())
        {
                if(!has_totag())
                {

                        xlog("L_INFO", "Initial loose-routing rejected - M=$rm 
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
                        sl_send_reply("403", "Initial Loose-Routing 
Rejected");
                        exit;
                }
                if(nat_uac_test("19") || search("^Route:.*;nat=yes"))
                {
                        fix_nated_contact();
                        setbflag(6);
                }
                if(is_method("BYE"))
                {
                        setflag(24); # account failed transactions
                        setflag(25); # account successful transactions
                }
                # mark as loose-routed for acc
                setflag(26);

                route(12);
        }
        if(is_method("REGISTER"))
        {
                route(11);
        }
        setflag(24); # account failed transactions
        setflag(25); # account successful transactions
        if(is_method("INVITE"))
        {
                route(13);
        }
        if(is_method("CANCEL") || is_method("ACK"))
        {
                route(19);
        }

        route(20);
}

[...]

########################################################################
# Request route 'base-route-local'
########################################################################
route[19]
{
        t_on_reply("1");
        if(t_check_trans())
        {

                xlog("L_INFO", "Request leaving server - M=$rm RURI=$ru F=$fu 
T=$tu IP=$si ID=$ci\n");
                if(!t_relay())
                {
                        sl_reply_error();
                }
        }
        else
        {

                xlog("L_INFO", "Dropping mis-routed request - M=$rm RURI=$ru 
F=$fu T=$tu IP=$si ID=$ci\n");
        }
        exit;

}
----------------

El problema es que cuando llega un ACK desde el Asterisk indicando que el 
Invite que OpenSer reenvio al Asterisk ha pasado a Answer, la función 
t_check_trans() parece no enterarse, y se trata el ACK como si fuese una 
sesion nueva, tira por otra parte del script de openser y falla.

¿Alguna cosa evidente que me estoy saltando?

-- 
Raúl Alexis Betancor Santana
Dimensión Virtual S.L.




More information about the Users-es mailing list