Gracias Iñaki por la respuesta y las sugerencias debajo te comento
como lo solucione.
> El Viernes, 14 de Marzo de 2008, Gustavo Mistrinelli escribió:
>
> > Pero, lo que quiero implementar es una funcionalidad extra para que el
> > usuario pueda agregar un telefono (puede ser otra extension, el movil,
> > el telefono de la casa etc.) y que cuando lo llamen suene también en
> > ese nro.
> >
> > Para esto lo que hago es utilizar la tabla usr_preferences y agregar
> > un registro que le defini type=fork.
> > Luego leo la preferencia, seteo un flag y hago un append_branch en el
> > on_branch si está seteado el flag cambio el $ruri de la llamada con el
> > valor del fork que puso el usuario y reseteo los valores.
>
> Olvídate del append_branch, es un coñazo usarlo bien para hacer parallel
> forking.
Lo hice funcionar con el append_branch (dicho de paso concuerdo en que
es medio complicado de usar)
...
avp_db_load("$ruri/username", "*");
xlog("L_INFO", "Reading User Preferences of RURI=$ruri ");
if(is_avp_set("$avp(s:fork)/s") && !isflagset(28))
{
xlog("L_INFO", "Forking to '$avp(s:fork)' found -M=$rm
RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
$ru = $avp(s:fork); # reemplazo el Request URI por el del fork
append_branch(); # genero un nuevo branch con el URI del fork
$ru = $ou; # vuelvo a poner el R URI como
estaba para que siga su curso como si nada.
};
..
>
> Hay una forma muy muy simple: añade el móvil u otra extensión directamente en
> la tabla "location" para el username y domain correspondiente.
> NOTA: Si usas "db_mode" 1 ó 2 entonces mejor añades el usuario
> vía "openserctl..." (que ataca directamente a memoria, donde busca OpenSer
> los contactos de un AoR).
>
> Ejemplo de llamada en paralelo a un móvil para "pepe(a)dominio.com":
>
> Tabla "location":
> - username: pepe
> - domain: dominio.com
> - contact: sip:666555444@pstn_gateway:5060
> - received: NULL
> - expires: (en el 2050 XD)
> - cflags: ninguno
> - methods: [1]
>
> [1]: Si usas "method_filter" en el módulo "usrloc" (¿o era el "registrar"?)
> asegúrate de añadir el método INVITE en "methods" (y de hecho no pongas el
> MESSAGE ya que el gateway no losoporta). Los códigos están aquí:
>
> http://openser.svn.sourceforge.net/viewvc/openser/trunk/parser/msg_parser.h…
>
Voy a probar lo que me dices, de momento con la solución que describi
arriba funciona a la perfección.
>
> Saludos.
>
Saludos y muchas gracias por la ayuda!
>
> --
> Iñaki Baz Castillo
--
Gustavo Mistrinelli
Hola Gente, les comento lo que estoy intentando hacer, sin éxito por
ahora, a ver si me pueden dar una mano para solucionarlo o encararlo
de otra manera.
Hasta ahora he logrado que openser haga el parallel forking con los n
contacts que tenga registrado un usuario sin problemas.
Pero, lo que quiero implementar es una funcionalidad extra para que el
usuario pueda agregar un telefono (puede ser otra extension, el movil,
el telefono de la casa etc.) y que cuando lo llamen suene también en
ese nro.
Para esto lo que hago es utilizar la tabla usr_preferences y agregar
un registro que le defini type=fork.
Luego leo la preferencia, seteo un flag y hago un append_branch en el
on_branch si está seteado el flag cambio el $ruri de la llamada con el
valor del fork que puso el usuario y reseteo los valores.
Quisiera si pueden revisar un poco la lógica y me digan si estoy yendo
por el camino correcto o se hace de otra manera.
Les paso algunas partes del script que participan en este proceso.
route[1] { # Route relay Handler
if (!t_relay()) {
sl_reply_error();
};
return;
}
route[3] # invite route
{
...
...
avp_db_load("$ruri/username", "*");
xlog("L_INFO", "Reading User Preferences of RURI=$ruri ");
if(is_avp_set("$avp(s:fork)/s") && !isflagset(28))
{
setflag(28);
xlog("L_INFO", "Forking to '$avp(s:fork)' found -
M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
t_on_branch("1");
append_branch();
};
...
route(1);
}
branch_route[1]{
if (isflagset(28)) {
resetflag(28);
xlog("L_INFO", "GooSIP: Doing Forkting to
'$avp(s:fork)' found - M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
avp_pushto("$ru", "$avp(s:fork)/g");
avp_delete("$avp(s:fork)/g");
route(1);
return;
}
}
Desde ya.. gracias a todos.
--
Gustavo A. Mistrinelli
Hoola!
En algún hilo se ha comentado el tema de qué mensajes deberían ir
autenticados o no, pero como no era el tema central, he decidido abrir
este otro hilo para comentar mi pregunta/cosa:
Según he leido por aqui (creo que lo comentó Iñaki), los mensajes que
tienen que autenticarse con el proxy_authorize y tal son:
-INVITE
-REGISTER
-MESSAGE
-SUBSCRIBE
-PUBLISH
-OPTIONS
Vale, si esta es la lista, entonces yo ahora mismo tengo un
problemilla de seguridad, así que quería verificar una cosa:
Los INVITE se suelen tratar en u route aparte, así como los REGISTER.
Aunque todavía no me he metido mucho con ello, PUBLISH y SUBSCRIBE
también irían aparte, porque están relacionados con la presencia.
Entonces me quedan MESSAGE y OPTIONS. Actualmente he estado probando
los mensajes sin autenticación y por supuesto iban OK. Ahora he
añadido este bloque para manejarlos:
# -----------------------------------------------------------------
# MESSAGE handler
# -----------------------------------------------------------------
route[8]
{
xlog("L_INFO","$Cbx-- Mandando un MESSAGE --$Cxx\n");
## Es necesario autenticarse
if (!proxy_authorize("","subscriber")) {
xlog("L_INFO","$CbxSe necesita autenticacion para el MESSAGE$Cxx\n");
proxy_challenge("","0");
exit;
}
## Tienen que coincidir el nombre de usuario con el de la cabecera FROM
else if (!check_from()) {
xlog("L_INFO","$Crx*** check_from() = NO!! ***$Cxx\n");
sl_send_reply("403", "Use From=ID");
exit;
};
xlog("L_INFO","$Cbx*** MESSAGE correcto ***$Cxx\n");
consume_credentials();
# Puede que venga a nosotros pero tengamos definido un alias a fuera.
lookup("aliases") nos da la nueva URI que puede sea !=myself.
lookup("aliases");
if (!is_uri_host_local()) {
xlog("L_INFO","$CrxNot my URI after the alias lookup$Cxx\n");
## A las salientes
route(4);
exit;
};
## Miramos si existe el destino en nuestra tabla "location".
if (!lookup("location")) {
xlog("L_INFO","$Crx404 User Not Found$Cxx\n");
sl_send_reply("404", "Not Found");
exit;
};
## Si hemos llegado hasta aquí enrutamos el mensaje al destino por la
ruta por defecto.
route(1);
exit;
}
La pregunta es: podría utilizar este mismo bloque para los OPTIONS?
Entonces, llegados a este punto (sorry por la chapa) nos quedan por
tratar CANCEL, BYE, INFO, REFER, UPDATE, y PRACK?
Bien, entonces, asumiendo que tenemos esto en nuestro route principal:
if (!is_uri_host_local()) {
if (is_from_local()) {
route(4);
}
else {
sl_send_reply("403", "Forbidden");
};
exit;
}
Si un cuanlquiera nos manda algo pasaremos de ello. Entonces, para los
CANCEL y los BYE podemos hacer t_relay tranquilamente.
Los INFO solo ocurririan en loose_route no?Al igual que los UPDATE?
Ya solo nos quedan REFER, UPDATE y ese PRACK que no se yo... :P
Segun leo en el RFC3515, "REFER request MAY be placed outside the
scope of a dialog" entonces, deberia tratarlo fuera del loose_route?
Iria autenticado?
PD: Sorry por la "pesadilla mail", si aun os quedan fuerzas tras haber
llegado hasta aqui: que hacemos con el PRACK? (aunque no lo he visto
nunca...)
--
Saúl -- "Some people say why, other just say, why not."
----------------------------------------------------------------
http://www.saghul.net/
Buenas Tardes a tod@s
Estoy volviendo al cacharreo y futura auditoría de sistemas en VoIP y tengo
una serie de dudas que según vayan pasando los días espero que se reduzcan.
1º ¿Hay alguna manera de determinar que no haya 2 softphones o 2 teléfonos
que se hayan registrado con el mismo usuario?
2º ¿Cómo puedo evitar hacerme una autollamada?
3º Hay alguna manera de verificar que no me envian una cabecera modificada
cuando hago el register (SQL Injection)
un saludo y muchas gracias
--
=====================================================
Legolas_Bilbao[ID2006][GKR]
Dios creo un equipo Perfecto a los demas los lleno de extranjeros
http://www.forosindicedonkey.comhttp://usuarios.lycos.es/ligaforo/
=====================================================
Buenas Tardes:
Todavía ando con la configuración de Openser, tras trastear un poco ya
tengo la 1.3 y ahora ando mirando lo siguiente
1º como configurar Openser en el init.d , me aparece este modo, ¿existe otro?
http://www.openser.org/dokuwiki/doku.php/install:configure-initd-script
cp <openser src>/etc/openser.init /etc/init.d/openser, pero en mi
fichero descomprimido no tengo nada de openser.init :S.
2º Al arrancar el openser desde linea de comandos me sale un chorro de
caracteres que supongo que vienen por el debbuging , supongo que se
modificara en el openser.cfg yo lo tengo puesto asi
log_stderror=yes
log_facility=LOG_LOCAL0
log_name="LOG_OPENSER"
¿hay algo mal?
muchas gracias por todo
--
=====================================================
Legolas_Bilbao[ID2006][GKR]
Dios creo un equipo Perfecto a los demas los lleno de extranjeros
http://www.forosindicedonkey.comhttp://usuarios.lycos.es/ligaforo/
=====================================================
Bueno tras conseguir crearme mis usuarios y poner un xlog en la
entrada al route y en el register.
Arranco el twinkle y veo que manda el REGISTER , hasta ahi todo
correcto, ahora quiero probar que no haya mas que un usuario por AOR,
con lo cual pruebo a registrarme cone l mismo usuario que twinkle pero
usando ekiga, pero no se refleja en el log el mensaje REGISTER, este
softphone no manda un mensaje REGISTER?.
Lo que si he comprobado es lo siguiente que el AOR, funciona bien pero
no he colocado correctamente el tema de 2 usuarios activos, por que
EKIGA me ha saltado el siguiente mensaje
Hago el invite y en el status del programa , me sale lo siguiente :
Fallo la comprobación de seguridad pero lo que envia el EKIGA es un
INVITE.
Algún otro softphones para hacer pruebas,ya que el ekiga es un poco
cancer, a parte del x-lite
un saludo
--
=====================================================
Legolas_Bilbao[ID2006][GKR]
Dios creo un equipo Perfecto a los demas los lleno de extranjeros
http://www.forosindicedonkey.comhttp://usuarios.lycos.es/ligaforo/
=====================================================
Hola, una pregunta un poco "tonta":
Cuando se habla de "servidor de provisionamiento" en VoIP ¿nos referimos sólo
al provisionamiento de configuración para los dispositivos SIP o también
englobamos el interfaz de configuración de usuarios, cuentas, grupos, lógica
PBX...?
Gracias.
--
Iñaki Baz Castillo
ibc(a)in.ilimit.es
Hola de nuievo Samuel;
Hemos ido aumentado progresivamente openser hasta habilitar 50 procesos
children mientras que el max-connections del MySQL es de 100. Con esta
configuración, monitorizando el openser no encontramos ningún error reply ni
ningun slow query en la BBDD.
Intentaremos informarnos sobre la fiabilidad de SIPp.
Gracias
Hola a todos;
Estamos intentando migrar la red de telefonia analógica actual a un
sistema de ToIP basado en openser. Tras montar el servidor y funcionar
todo correctamente nuestro objetivo ahora es saber que carga puede
soportar el servidor para poder dimensionar el servicio.
Para realizar las pruebas de carga, hemos escogido la herramienta
SIPp, soft GNU que permite montar escenarios para estresar servidores
SIP. Tras montar el escenario y realizar varias pruebas aún no hemos
conseguido saturar el escenario, ya que antes que esto suceda tanto en
el UAC como en el UAS, una vez alcanzada las 300 llamadas/s se sufren
un gran número de retransmisiones a los pocos segundos.
Hemos cambiado los UAC y UAS a máquinas más potentes, pero el
resultado es el mismo. Esto nos hace descartar que el problema sea
derivado de falta de CPU y RAm ya que tanto el UAC, como el UAS como
el proipo servidor no se llegan a saturar.
¿Alguien ha realizado pruebas de carga con SIPp obteniendo un
resultado parecido? Si es así, ¿ a qué son debidas las retransmisiones
y cómo se pueden evitar para poder conocer el limite de nuestro
Openser Server? Si a alguien se le ocurre algún motivo que den lugar a
estas retransmisiones, les agradeceria su coloboración.
Gracias de antemano
--
Jose Molina Vizcaíno