Une réponse SIP à une demande INVITE peut être finale ou provisoire.
La fiabilité
des réponses finales est garantie alors que celles des réponses provisoires ne l'est pas. Lorsque
vous avez besoin d'envoyer une réponse provisoire en toute fiabilité, vous pouvez utiliser la
méthode PRACK (Provisional response acknowledgement).
Avant de commencer
Pour que vous puissiez développer des applications qui prennent en charge la méthode PRACK, les critères ci-dessous doivent être remplis :
- Le client qui envoie la demande INVITE doit insérer une balise 100rel dans l'en-tête Pris en charge ou Requis pour indiquer que le client prend en charge la méthode PRACK.
- Le servlet SIP doit répondre en appelant la méthode sendReliably() et non la méthode send() pour envoyer la réponse.
Pourquoi et quand exécuter cette tâche
La méthode PRACK est décrite dans les normes suivantes :
- RFC 3262 ("Fiabilité des réponses provisoires dans SIP"), qui étend RFC 3261 ("SIP :
Session Initiation Protocol"), en ajoutant la méthode PRACK et la balise d'option 100rel.
- Section 6.7.1 ("Reliable Provisional Responses") de l'JSR 116 ("API SIP Servlet version 1.0").
Procédure
- Pour qu'une application fasse office de proxy :
- Assurez-vous que l'application génère et envoie une réponse provisoire fiable à une demande INVITE, qui ne possède pas de balise dans le champ de destinataire.
- Pour qu'une application serve de client d'agent utilisateur :
- Assurez-vous que l'application ajoute la balise 100rel aux demandes INVITE sortantes.
La balise d'option doit apparaître dans l'en-tête Pris en charge ou Requis.
- Dans la méthode doProvisionalResponse(...) de votre application,
préparez l'application afin qu'elle crée et envoie des demandes PRACK pour les réponses provisoires fiables entrantes. L'application doit créer la demande PRACK dans la boîte de dialogue de réponse par le biais d'une méthode SipSession.createRequest(...). Elle doit définir l'en-tête RACK en fonction de la norme RFC 3262 Section 7.2 ("RAck").
- L'application qui fait office de client d'agent utilisateur ne reçoit pas les méthodes doPrack( ). Le client d'agent utilisateur envoie des réponses INVITE et reçoit des réponses fiables. Lorsque le client d'agent utilisateur reçoit la réponse fiable, il envoie une demande PRACK à l'UAS et reçoit le message 200 OK dans PRACK. Il doit donc ensuite implémenter la méthode doResponse( ) pour la recevoir.
- Pour qu'une application se comporte comme un serveur d'agent utilisateur :
- Si une demande INVITE entrante nécessite la balise 100rel, si vous tentez d'envoyer une réponse 101-199 non fiable à l'aide de la méthode send(), une exception est générée.
- Assurez-vous que l'application déclare que SipErrorListener reçoive les événements de la méthode noPrackReceived() lorsqu'une réponse provisoire fiable n'est pas reconnue en 64*T1 secondes, où T1 est un temporisateur SIP. Lors du traitement des événements de la méthode noPrackReceived(), l'application doit générer et envoyer une réponse à l'erreur 5xx pour la demande INVITE associée selon la norme JSR 116 Section 6.7.1.
- Assurez-vous que l'application utilise une réponse provisoire fiable non reconnue. Si vous tentez d'envoyer une autre réponse avant que les premiers résultats soient acquittés, une exception est générée.
- Assurez-vous que l'application applique la sémantique d'offre/de réponse de la norme RFC 3262 concernant les demandes PRACK contenant des descriptions de version.
En particulier, un servlet ne doit pas envoyer une réponse finale 2xx si des réponses provisoires non acquittées contenaient une description de session.