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:
- ¿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. :(
- ¿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@domain.org redirige sus incomings a User_B@domain.org (regla de mismo dominio respetada). - User_B@domain.org no permite entrantes a usuarios del dominio "extern.com". - other@extern.com llama a User_A@domain.org, se procesa el CPL de User_A y la llamada hace una espiral con URI = User_B@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. ;)