El Lunes, 12 de Noviembre de 2007, Jesus Rodriguez escribió:
Hola,
Hola, el sábado noche aún con el resacón del
viernes-SIMO le eché
un vistazo
al RFC de CPL (los ejemplos básicamente XD):
http://www.faqs.org/rfcs/rfc3880.html
Tengo algunas cuestiones sobre ello:
1) ¿Hay algún cliente SIP que soporte CPL? sería muy chulo que en la
configuración de un tfno te diese la opción de subir las
preferencias (desvío
condicional, etc) al servidor en forma de CPL en vez de sólo
comportarse así
en el caso de éste teléfono (esta branch).
Que yo sepa no. Sólo se puede subir directamente al servidor.
O sea, que no hay ningún cliente SIP que envíe un XML-CPL en el REGISTER. :(
2) ¿Qué tal
sería usar CPL "al margen del usuario"? me refiero a
alguna
especia de aplicación que meta "a piñón" el XML del CPL para cada
usuario e
implemente redirecciones, desvíos, bloqueos...
Eso si que funciona en Openser. Puedes hacer unas cuantas cosas.
Pero ¿entonces no pierde algo de gracia? o sea, se supone que el proxy recibe
el CPL en un REGISTER y lo examina (pudiéndolo rechazar si es incorrecto o
mal formado). En cambio si lo subes directamente a BD a las bravas ese test
previo se pierde e incluso podría fallar OpenSer al interpretar el CML, ¿no?
Lo pregunto
porque tengo entendido que si el CPL XML llega en un
REGISTER
(como cabe esperar) el módulo CPL de OpenSer lo pasa a binario y lo
guarda
así en la tabla, lo que luego es más eficiente en su lectura.
En cambio si una aplicación externa (web por ejemplo) mete el XML
en la tabla
no se pasa a binario.
Sí que lo mete en binario si usas el comando:
openserctl fifo LOAD_CPL
Esa es buena ;)
Además, no me
queda claro cómo interactúa el CPL con el resto del
script, ¿qué
hay de los flags, los branch_route y todo eso? por ejemplo:
Mediante CPL pongo un desvío a otra URI. Cuando se produzca este
caso, ¿sale
la llamada por el branch_route? ¿o una vez que entra en el CPL
queda al
margen de script? también he oído sobre problemas para tratar el
NAT y así.
Sí. Cuando una llamada entra en el CPL queda al margen del script y
pierdes el control. Lo que puedes hacer es una espiral de forma que
el CPL envia la llamada de nuevo al proxy y usas algún parámetro para
marcar que esa llamada no tiene que ejecutar el CPL.
Hasta donde yo sé, la única forma de pasar un parámetro en una espiral es a
través de una cabecera o tag.
Pero lo que no entiendo es cómo forzar una espiral. O sea, ¿cómo puedo
controlar a dónde se envía el mensaje SIP? ¿cómo puedo controlar
el "location" que pone un usuario en su CPL?
¿O acaso estamos hablando de dar inteligencia de control en la aplicación que
genera el CPL-XML y restringir con ella las posibilidades? Por ejemplo, se me
ocurre que un usuario sólo puede redirigirse a otros usuarios de su propio
dominio (controlamos esto en la aplicación web que genera el CPL) de tal
forma que necesariamente se producirá una espiral y el mensaje llegará de
nuevo al proxy, pero antes de haber leído el CPL se introdujo una
cabecera "X-CPL-processed" y ahora no se procesa.
Pero tampoco me sirve, porque:
- User_A(a)domain.org redirige sus incomings a User_B(a)domain.org (regla de mismo
dominio respetada).
- User_B(a)domain.org no permite entrantes a usuarios del dominio "extern.com".
- other(a)extern.com llama a User_A(a)domain.org, se procesa el CPL de User_A y la
llamada hace una espiral con URI = User_B(a)domain.org (y se añade una
cabecera "X-CPL-Processed").
- Ahora no se interpreta el CPL de User_B pues lleva cabecera.
- La llamada llega a User_B que se quejará y con razón ("esto no funciona,
oiga").
Es decir, no imagino forma de hacer que el mensaje se procese finalmente
**sólo** por OpenSer (script) sin vulnerar y sacrificar posibles reglas.
¿Alguna pista más? :)
En fin,
¿alguna aclaración o pista para empezar con esto? Mil gracias.
PD: ¿Se usa el CPL en la vida real?
Yo se al menos de un caso dónde sí se usa ;-)
Vaya, y yo que después de leerme justo ahora el RFC 3880 estaba a punto de
descartar el CPL dada su complejidad (¡¡¡pero alguien ha mirado el tema de
las fechas y horarios!!!)... y resulta que sí se usa... no sé si alegrarme
XDDD
Y claro, ahora toca currarse la aplicación que interprete un CPL-XML y todo...
buffff... qué de cosas.
Mil gracias por todo. ;)
--
Iñaki Baz Castillo