Avant de commencer
Lisez la
spécification JSR289, section 12,
qui fournit des informations détaillées sur les opérations B2BUA. La spécification SIP Servlet 1.1 définit une classe auxiliaire, javax.servlet.sip.B2buaHelper,
pour la création d'applications B2BUA. Pour plus d'informations, voir la documentation relatives aux
méthodes B2buaHelper.
Pourquoi et quand exécuter cette tâche
B2BUA est une application SIP (Session Initiation Protocol) qui est située au milieu
d'un appel SIP et transmet les demandes et réponses entre deux boîtes de dialogue SIP ou plus. Une application B2BUA typique gère les sessions SIP entre deux agents utilisateur. Cependant, l'application B2BUA peut également gérer des scénarios plus complexes où elle doit
gérer les réponses provenant de différentes branches de processus parallèle de traitement en aval. Cette configuration se produit quand la demande est fractionnée en différentes branches
et que le message est transmis depuis le client d'agent utilisateur au serveur d'agent utilisateur. La classe
B2buaHelper contient toutes les méthodes nécessaires pour créer
des applications B2BUA de ce type. Le comportement de la classe
B2buaHelper
et les règles utilisées pour créer des demandes sont définis dans la spécification
JSR289, section 12.2. Vous pouvez utiliser les fonctions de la classe
B2buaHelper
pour lier deux étapes, celle de l'appel entrant et celle de l'appel sortant,
de l'appel d'agent utilisateur dos à dos SIP.
- Extrayez l'instance B2buaHelper en appelant la méthode SipServletRequest.getB2buaHelper().
- Une fois que vous avez extrait cette instance, vous pouvez créer une demande SIP en appelant B2buaHelper.createRequest().
private void doInvite(SipServletRequest req) {
B2buaHelper b2buaHelper = req.getB2buaHelper();
SipServletRequest newRequest = b2buaHelper.createRequest(req, true, headerMap);
}
La demande newRequest créée est identique à la demande SipServletRequest
req fournie en tant que demande d'origine dans le premier paramètre de cette méthode. Le paramètre Boolean indique si la demande d'origine req
et la nouvelle demande newRequest sont liées. headerMap
fournit une mappe des en-têtes non-système à remplacer dans la demande newRequest.
- Assurez-vous que les deux étapes sont liées. Si vous avez appelé la méthode createRequest
avec l'attribut false, vous pouvez lier explicitement les sessions SIP par appel :
B2buaHelper.linkSipSessions(session1, session2)
- Une fois que les sessions SIP et les demandes SIP sont liées, vous pouvez extraire
la session liée par appel :
SipSession linkedSession = B2buaHelper.getLinkedSession(req.getSession());
Remarque : Dans le scénario de processus parallèle de traitement B2BUA, l'application crée plusieurs
demandes SIP ; c'est pourquoi toutes les sessions SIP ne sont pas liées. Vous devez les lier explicitement.
- Après que vous avez reçu une réponse du serveur d'agent utilisateur (UAS), créez une réponse à son étape.
Cherchez à déterminer si une session liée sur la réponse existe, et si tel est le cas, utilisez
la demande liée pour créer une réponse au client d'agent utilisateur (UAC).
SipServletRequest linked = b2bHelper.getLinkedSipServletRequest(resp.getRequest());
linked.createResponse(resp.getStatus(),resp.getReasonPhrase()).send();
S'il n'y a pas de session liée associée à la réponse, l'application doit appeler la demande
B2buaHelper.createResponseToOriginalRequest et créer une session dérivée,
qui est une copie de la session SipSession associée à la demande d'origine.
Remarque : La spécification JSR289, section 12.5, fournit un moyen de créer plusieurs réponses
à la demande d'origine. Si plusieurs sessions SipSession sont associées
au message INVITE d'origine et qu'il est nécessaire d'envoyer plusieurs
réponses au message INVITE, utilisez la méthode B2buaHelper.createResponseToOriginalRequest.
- Si vous utilisez la méthode createResponseToOriginalRequest, assurez-vous
que les deux étapes sont liées. Votre application est responsable de la liaison de la nouvelle
session dérivée à sa session paire pour pouvoir extraire la session liée pour l'envoi
de réponses subséquentes.