2008/2/1, David Villasmil <david.villasmil.work@gmail.com>:
>
> route{
> if (method=="INVITE") {
> # CUSTOMER-CUSTOMER CALL
>
> if($si=="ip1"||$si=="ip2"){
> xlog("L_ERR", "\n************** CUSTOMER-CUSTOMER CALL
> (ASTERISK->OPENSER) ************\n");
> if (uri=~"^sip:8888"){
> strip(4);
> }
> if (!lookup("location")) {
> sl_send_reply("404", "Not Found");
> exit;
> };
> }
> }
>
> if (!lookup("location")) {
> sl_send_reply("404", "Not Found");
> exit;
> };
Si el INVITE viene de esas IP's estás aplicando **2 veces** el
lookup(location). La segunda obviamente fallará, pues ya habías
modificado el URI en la primera.
> ************** CUSTOMER-CUSTOMER CALL (ASTERISK->OPENSER) ************
> 11(20554) rewrite_uri: Rewriting Request-URI with '
sip:s@192.168.1.253'
> porqué el username termina siendo "s"????? claro, así nunca lo encontrará!
Asterisk por defecto se registra como "s@IP", puedes comprobarlo
monitorizando el REGISTER que envía Asterisk y mirando la cabecera
"Contact" (que es la localización que registra). No hay ningún
problema por ello, ninguno.
No obstante ,puedes forzar a que registre otro username así:
register => usuario:passwd@dominio/nuevo_username
y registrará ese username en vez de "s".
Pero este NO es tu poblema, el fallo es que aplicas dos veces lookup(location).
Iñaki,
Efectivamente, eran dos cosas juntas. Estuve en el IRC de openser, resulta que el asterisk, como tu bien dices, se registra como s@.... no hay problema con eso, PERO, como hacía el lookup DOS VECES fallaba al intentar mandar la llamada al asterisk... Qué tonto soy...
De los errores se aprende.. jeje
ahora tengo la ruta así:
route{
if (method=="INVITE") {
# CUSTOMER-CUSTOMER CALL
if($si=="ip1"){
xlog("L_ERR", "\n************** CUSTOMER
if (uri=~"^sip:8888"){
strip(4);
}
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
exit;
};
if (!t_relay()) {
sl_reply_error();
};
exit;
}
append_hf("P-hint: usrloc applied\r\n");
};
route(1);
}
route[1] {
if (subst_uri('/(sip:.*);nat=yes/\1/')){
setbflag(6);
};
if (isflagset(5)||isbflagset(6)) {
route(3);
}
if (!t_relay()) {
sl_reply_error();
};
exit;
}
pero claro, eso significa que la llamada nunca pasa por el route(1), cierto? eso quiere decir que no detecta y arregla el nat? debería ser más bien así?:
route{
if (method=="INVITE") {
# CUSTOMER-CUSTOMER CALL
if($si=="ip1"){
xlog("L_ERR", "\n************** CUSTOMER");
if (uri=~"^sip:8888"){
strip(4);
}
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
exit;
};
route(1);
}
append_hf("P-hint: usrloc applied\r\n");
};
}
route[1] {
if (subst_uri('/(sip:.*);nat=yes/\1/')){
setbflag(6);
};
if (isflagset(5)||isbflagset(6)) {
route(3);
}
if (!t_relay()) {
sl_reply_error();
};
exit;
}
Un saludo muy grande.... y ya a estas alturas deberíamos conocernos los más asíduos a la lista... que ya "hablamos" casi todos los dias! jeje!
David