Antes de empezar
Consulte la
especificación
JSR289, sección 12, que proporciona información detallada
sobre las operaciones B2BUA. La especificación de servlet SIP 1.1 define una clase auxiliar,
javax.servlet.sip.B2buaHelper, para crear aplicaciones B2BUA. Si
desea más información, consulte la documentación sobre
Métodos
B2buaHelper.
Acerca de esta tarea
B2BUA es una aplicación SIP (Session Initiation Protocol)
que se encuentra en medio de una llamada SIP y envía solicitudes y
respuestas entre dos o más diálogos SIP. Una aplicación B2BUA típica
gestiona sesiones SIP entre dos agentes de usuario. Sin embargo,
la aplicación B2BUA también puede manejar escenarios más complejos
donde debe gestionar respuestas de distintas ramas de bifurcación en
sentido descendente. La bifurcación en sentido descendente
se produce cuando la solicitud se divide en distintas ramas y
el mensaje se envía desde el cliente de agente de usuario al servidor
de agente de usuario. La clase
B2buaHelper contiene
todos los métodos necesarios para crear dichas aplicaciones B2BUA. El
comportamiento de la clase
B2buaHelper y las reglas
que se utilizan para crear solicitudes nuevas están definidas en la
especificación JSR289, sección 12.2. Puede utilizar las funciones
de la clase
B2buaHelper para enlazar dos tramos,
el tramo de la llamada entrante y el tramo de la llamada
saliente, de la llamada del agente de usuario back-to-back SIP.
- Recupere la instancia B2buaHelper llamando al
método SipServletRequest.getB2buaHelper().
- Tras recuperar esta instancia, puede crear una nueva solicitud
SIP llamando a B2buaHelper.createRequest().
private void doInvite(SipServletRequest req) {
B2buaHelper b2buaHelper = req.getB2buaHelper();
SipServletRequest newRequest = b2buaHelper.createRequest(req, true, headerMap);
}
El newRequest que se crea es idéntico al SipServletRequest
req que se proporciona como solicitud original en el
primer parámetro de este método. El parámetro
Boolean indica si la solicitud original req y newRequest están enlazados. headerMap
proporciona una correlación de cabeceras que no son del sistema para
alterar temporalmente en newRequest.
- Asegúrese de que los dos tramos están enlazados. Si ha
llamado al método createRequest con el
atributo false, puede enlazar las sesiones SIP
explícitamente llamando a:
B2buaHelper.linkSipSessions(session1, session2)
- Una vez que se hayan enlazado las sesiones SIP y las solicitudes
SIP, puede recuperar la sesión enlazada llamando a:
SipSession linkedSession =
B2buaHelper.getLinkedSession(req.getSession());
Nota: En el escenario de bifurcación de B2BUA, la aplicación crea más
de una solicitud SIP, así que no están enlazadas todas las sesiones
SIP. Debe enlazarlas explícitamente.
- Tras recibir una respuesta del servidor de agente de usuario
(UAS), cree una respuesta a su tramo.
Compruebe para determinar si existe una sesión enlazada en la
respuesta y, en dicho caso, utilice la solicitud enlazada para
crear una respuesta al cliente de agente de usuario (UAC).
SipServletRequest linked =
b2bHelper.getLinkedSipServletRequest(resp.getRequest());
linked.createResponse(resp.getStatus(),resp.getReasonPhrase()).send();
Si no hay ninguna sesión enlazada asociada a la respuesta, la
aplicación tendrá que llamar a
B2buaHelper.createResponseToOriginalRequest y crear
una nueva sesión derivada, que es una copia de la
SipSession que está asociada a la solicitud
original.
Nota: La especificación JSR289, sección 12.5, proporciona una forma
de crear más de una respuesta correcta a la solicitud original. Si
hay más de una SipSession asociada al mensaje
INVITE original y se debe enviar más de una
respuesta correcta al mensaje INVITE, utilice el método
B2buaHelper.createResponseToOriginalRequest.
- Si utiliza el método
createResponseToOriginalRequest, asegúrese de que
dos tramos están enlazados. La aplicación es responsable de enlazar
la nueva sesión derivada a su par de sesión, de forma que pueda
recuperar la sesión enlazada para enviar respuestas posteriores
en la misma.