OpenSIPs 3.1 y mejorías en el codigo del modulo pua_dialoginfo

El modulo PUA_DIALOGINFO, recoge información del estado de un dialogo (llamada), a través del modulo DIALOG y publica, a través del modulo PUA utilizando el método SIP PUBLISH, los cambios de estado de los participantes en el dialogo. Esto se traduce, utilizando el modulo PRESENCE_XML, en la generación de mensajes SIP de tipo NOTIFY que serán enviados a los dispositivos que se han subscrito para conocer el estado de los usuarios involucrados en la llamada. Hasta la versión 3.0 de OpenSIPs, esta implementación tenían unas limitaciones:

  • El ID del dialogo y el CallID de la llamada eran los mismos pues no había posibilidad de diferenciar eventos generados de distintos dispositivos en el caso de llamadas a más de un destinatario (forking serial)

  • la implementación estaba pensada solamente para publicar el estado de un llamado y en ningún momento ha sido posible ampliar esto a una llamada con distintos destinatarios llamados a la vez (forking paralelo)

Con la llegada de la versión 3.1 de OpenSIPs, el código del modulo PUA_DIALOGINFO ha sido totalmente reescrito y ahora es posible acceder no solamente a la información relacionada con el dialogo sino también a la información relacionada con las transacciones relacionadas con el dialogo. Esto permite que será generado un evento por cada branch de la llamada (destinatario). Echamos una mirada a los escenarios más comunes:

Forking Serial

Alice llama a Bob que no contesta dentro del tiempo predefinido. La transacción con Bob termina. Luego, de manera predefinida, el sistema llama a Charlie; esto generará una nueva transacción que a nivel de presencia, generará un nuevo evento. Ante esto no era posible.

Forking Paralelo

Alice llama Bob e Charlie a la vez. A nivel de capa de transacción se generarán dos eventos de presencia, uno por cada destinatario de la llamada. Si Bob rechaza la llamada, se generará un evento de presencia indicando que el teléfono de Bob ya no sigue timbrando; si Charlie contesta la llamada, se generará un evento de presencia indicando que Alice y Charlie se encuentran ocupados.

Todo esto es posible gracias a la nueva función del modulo PUA_DIALOGINFO:

dialoginfo_set_branch_callee

que puede ser utilizada solamente en una ruta de tipo branch y en escenarios de Forking serial o Forking paralelo.

Interesante