Une réponse SIP à une demande INVITE peut être finale ou provisoire. La fiabilité des réponses finales est garantie alors que celle des réponses provisoires ne l'est pas. Pour les cas de figure où vous devez envoyer une réponse provisoire en toute fiabilité,
vous pouvez utiliser la méthode PRACK (Provisional response acknowledgment).
Avant de commencer
Pour développer des applications prenant en charge PRACK, les critères suivants doivent être respectés :
- Pour indiquer que le client prend en charge PRACK, le client qui envoie la demande INVITE
doit placer une balise 100rel dans l'en-tête Supported ou Require.
- Le servlet SIP doit répondre en appelant la méthode sendReliably() à la place de la méthode send().
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.
- La section 5.7.1 ("Reliable Provisional Responses") de JSR 289 ("SIP
Servlet Specification version 1.1").
Procédure
- Si vous développez une application agissant en tant que proxy,
faites générer et envoyer à votre application une réponse provisoire fiable pour toute demande INVITE
qui ne comporte pas de balise dans la zone To.
- Si vous développez une application qui agit en tant que client d'agent utilisateur
(UAC), exécutez les opérations suivantes :
- 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.
- Pour créer une demande PRACK et envoyer la demande au serveur d'agent utilisateur (UAS),
appelez la méthode createPrack() sur la réponse entrante dans la méthode doProvisionalResponse(...)
de votre application.
Le conteneur gère l'en-tête RAck comme défini dans JSR 289 Section 5.7.1.
- L'application qui agit en tant que UAC reçoit une réponse finale 2xx-6xx
sur le PRACK, que l'UAC peut gérer avec une méthode doResponse().
- Si vous développez une application qui agit en tant que serveur d'agent utilisateur
(UAS), exécutez les opérations suivantes :