OpenSIPs 3.6 y los Branch unificados en SIP

En OpenSIPS 3.6 (todavía en versión BETA) se introdujo un enfoque mejorado para el manejo de ramas SIP (branches), especialmente útil en escenarios de forking (paralelo o secuencial). Este artículo explica cómo funcionan los Branch de mensaje y los Branch de transacción, y cómo el relay SIP (función t_relay) convierte unas en otras, facilitando un control más detallado en cada etapa del proceso.

Tipos de Branch en OpenSIPS

1. Branch de mensaje: etapa de preparación. Se define el destino antes de iniciar cualquier señalización SIP.
2. Branch de transacción: etapa de señalización. Tras enviar las ramas por t_relay, se gestionan respuestas, éxito o no éxito de la llamada.

Hasta la versión 3.5, existían tres limitaciones importantes en el script de OpenSIPs:

- No había correlación directa entre el Branch de mensaje y el Branch de transacción.
- No se podían añadir datos personalizados (atributos o flags) que perduraran después del t_relay.
- Desde el script, no era posible acceder a datos de otros Branch en rutas como, por ejemplo, onreply.

OpenSIPS 3.6 introduce variables unificadas para ambas etapas:

- Branch de mensaje: $msg.branch.uri, $msg.branch.attr(...), etc.
- Branch de transacción: $tm.branch.uri, $tm.branch.attr(...), etc.

Esto permite una correlación perfecta entre ambas etapas, facilitando scripts más claros y eficaces, incluso en forking paralelo donde antes esto no era posible. Ahora es posible adjuntar datos personalizados al crear cada rama:

Ejemplos:

$msg.branch.attr(pref_codec) = "PCMU";
append_msg_branch("sip:dest2@sip.com");
$msg.branch.attr(pref_codec) = "G722";
t_relay();

branch_route[info] {
  xlog("branch $T_branch_idx tiene pref_codec $tm.branch.attr(pref_codec)\n");
}
```

Así, atributos como pref_codec persisten a lo largo de la transación y se pueden utilizar posteriormente. La versión 3.6 permite indexar y acceder a atributos de cualquier Branch:

- Índice absoluto: $(tm.branch.attr(foo)[2])
- Índice relativo al último forking paralelo: $(tm.branch.attr(foo)[1/active])
- Índice global: …[2/all]

Además, la función t_get_branch_idx_by_attr() permite buscar ramas por atributos:

```
if (t_get_branch_idx_by_attr("name","pstn",,$var(idx))) {
  xlog("índice de rama pstn: $var(idx)\n");
}
```

Estas nuevas funcionalidades permite una getsión más detallada, precisa, persistente cuando los destinatarios de una llamadas son más de uno y se quieren diferenciar los atributos o branderas que se utilizarán en cada Branch; esto con la ventaja que los valores configurados no se perderán después de utilizar la función t_relay del modulo TM

Etiquetas: 

Suscribirse a Comentarios de "OpenSIPs 3.6 y los Branch unificados en SIP" Suscribirse a VozToVoice - Todos los comentarios