2008/2/1 Iñaki Baz Castillo <ibc(a)aliax.net>et>:
2008/2/1, David Villasmil
<david.villasmil.work(a)gmail.com>om>:
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