RFC3311 UPDATE dans SIP Rosenberg

Groupe de travail Réseau

J. Rosenberg, dynamicsoft

Request for Comments : 3311

septembre 2002

Catégorie : En cours de normalisation

Traduction Claude Brière de L’Isle



Méthode UPDATE du protocole d’initialisation de session (SIP)



Statut de ce mémoire

Le présent document spécifie un protocole Internet en cours de normalisation pour la communauté de l’Internet, et appelle à des discussions et des suggestions pour son amélioration. Prière de se reporter à l’édition actuelle du STD 1 "Normes des protocoles officiels de l’Internet" pour connaître l’état de normalisation et le statut de ce protocole. La distribution du présent mémoire n’est soumise à aucune restriction.


Notice de copyright

Copyright (C) The Internet Society (2002). Tous droits réservés


Résumé

La présente spécification définit la nouvelle méthode UPDATE pour le protocole d’initialisation de session (SIP). UPDATE permet à un client de mettre à jour les paramètres d’une session (tels que l’ensemble des flux des supports et leurs codecs) mais n’a pas d’impact sur l’état d’un dialogue. Dans ce sens, elle est comme un re-INVITE, mais à la différence de re-INVITE, elle peut être envoyée avant que le INVITE initial ait été achevé. Cela la rend très utile pour mettre à jour les paramètres de session au sein des dialogues précoces.


Table des Matières

1. Introduction 1

2. Terminologie 2

3. Vue d’ensemble du fonctionnement 2

4. Détermination de la prise en charge de cette extension 2

5. Traitement de UPDATE 2

5.1 Envoi d’un UPDATE 2

5.2 Réception d’un UPDATE 3

5.3 Traitement de la réponse à UPDATE 4

6. Comportement du mandataire 4

7. Définition de la méthode UPDATE 4

8. Exemple de flux d’appel 5

9. Considérations pour la sécurité 6

10. Considérations relatives à l’IANA 6

11. Notice concernant les droits de propriété intellectuelle 6

12. Références normatives 7

13. Remerciements 7

14. Adresse de l’auteur 7

15. Déclaration complète de droits de reproduction 7


1. Introduction


Le protocole d’initialisation de session (SIP, Session Initiation Protocol) [RFC3261] définit la méthode INVITE pour l’initialisation et la modification des sessions. Cependant, cette méthode affecte en réalité deux importants états. Elle impacte la session (les flux de support qu’établit SIP) et aussi le dialogue (l’état que définit SIP lui-même). Bien que cela soit raisonnable dans de nombreux cas, il y a des scénarios importants dans lesquels ce couplage cause des complications.


La principale difficulté se présente lorsque des aspects de la session doivent être modifiés avant qu’il ait été répondu à l’INVITE initial. Un exemple de cette situation est le "support précoce", une condition dans laquelle la session est établie, pour les besoins du transport des progrès de l’appel, mais avant que l’INVITE lui-même soit accepté. Il est important que l’appelant ou l’appelé soient capables de modifier les caractéristiques de cette session (en mettant le support précoce en garde, par exemple) avant de répondre à l’appel. Cependant, une re-INVITE ne peut pas être utilisée à cette fin, parce que la re-INVITE a un impact sur l’état du dialogue, en plus de celui de la session.


Il en résulte qu’il faut trouver une solution pour permettre à l’appelant ou à l’appelé de fournir des informations de session à jour avant que soit générée une réponse finale à la demande INVITE initiale. La méthode UPDATE, définie ici, satisfait à ce besoin. Elle peut être envoyée par un agent d’utilisateur (UA, user agent) au sein d’un dialogue (précoce ou confirmé) pour mettre à jour les paramètres de session sans impact sur l’état du dialogue lui-même.


2. Terminologie


Dans le présent document, les mots clés "DOIT", "NE DOIT PAS", "EXIGE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDÉ", "PEUT", et "FACULTATIF" sont à interpréter comme décrit dans le BCP 14, [RFC 2119] et indiquent les niveaux d’exigence pour les mises en œuvre conformes.


3. Vue d’ensemble du fonctionnement


Le fonctionnement de cette extension est très simple. L’appelant commence par une transaction INVITE, qui se fait normalement. Une fois qu’un dialogue est établi, soit précoce, soit confirmé, l’appelant peut générer une méthode UPDATE qui contient une offre du protocole de description de session (SDP, session description protocol) [RFC3264] afin de mettre la session à jour. La réponse à la méthode UPDATE contient la réponse. De même, une fois qu’un dialogue est établi, l’appelant peut envoyer un UPDATE avec une offre, et l’appelant place sa réponse dans les 2xx au UPDATE. Le champ d’en-tête Allow est utilisé pour indiquer la prise en charge de la méthode UPDATE. Il y a des contraintes supplémentaires sur la façon dont UPDATE peut être utilisé, fondées sur les restrictions du modèle offre/réponse.


4. Détermination de la prise en charge de cette extension


L’initialisation d’une session fonctionne comme spécifié dans la [RFC3261]. Cependant, un UAC conforme à la présente spécification DEVRAIT aussi inclure un champ d’en-tête Allow dans la demande INVITE, comportant la méthode UPDATE, pour indiquer sa capacité à recevoir une demande UPDATE.


Lorsque un UAS conforme à la présente spécification reçoit une demande INVITE pour un nouveau dialogue, et génère une réponse provisoire fiable qui contient SDP, cette réponse DEVRAIT contenir un champ d’en-tête Allow qui cite la méthode UPDATE. Cela informe l’appelant de la capacité de l’appelé à recevoir une demande UPDATE à tout moment. Une réponse provisoire non fiable PEUT contenir un champ d’en-tête Allow citant la méthode UPDATE, et une réponse 2xx DEVRAIT contenir un champ d’en-tête Allow qui cite la méthode UPDATE.


Les réponses sont traitées normalement selon la [RFC3261], et dans le cas de réponses provisoires fiables, conformément à la [RFC3262]. Il est important de noter qu’une réponse provisoire fiable va toujours créer un dialogue précoce chez l’UAC. La création de ce dialogue est nécessaire afin de recevoir les demandes UPDATE de l’appelé.


Si la réponse contient un champ d’en-tête Allow avec la valeur "UPDATE", l’UAC va savoir que l’appelé prend en charge UPDATE, et qu’il est permis à l’UAC de suivre les procédures du paragraphe 5.1.


5. Traitement de UPDATE

5.1 Envoi d’un UPDATE


La demande UPDATE est construite comme le serait toute autre demande au sein d’un dialogue existant, comme décrit au paragraphe 12.2.1 de la [RFC3261]. Elle PEUT être envoyée pour un dialogue aussi bien précoce que confirmé, et PEUT être envoyée par l’appelant ou l’appelé. Bien que UPDATE puisse être utilisé sur des dialogues confirmés, il est RECOMMANDÉ qu’une re-INVITE soit plutôt utilisée. Cela parce qu’on doit répondre immédiatement à une UPDATE, excluant la possibilité d’une approbation de l’utilisateur. Une telle approbation va fréquemment être nécessaire, et est possible avec une re-INVITE.


L’UAC PEUT ajouter des en-têtes facultatifs pour la demande UPDATE, comme défini aux Tableaux 1 et 2.


UPDATE est une demande de rafraîchissement de la cible. Comme spécifié dans la [RFC3261], cela signifie qu’elle peut mettre à jour la cible distante d’un dialogue. Si un UA utilise une demande ou réponse UPDATE pour modifier la cible distante alors qu’une transaction INVITE est en cours, et si c’est un UAS pour cette transaction INVITE, il DOIT placer la même valeur dans le champ d’en-tête Contact de la réponse 2xx à l’INVITE que celle qu’il a placée dans la demande ou réponse UPDATE.


Les règles pour l’inclusion des offres et des réponses dans les messages SIP telles que définies au paragraphe 13.2.1 de la [RFC3261] s’appliquent toujours. Ces règles existent pour garantir une vue cohérente de l’état de session. Cela signifie que pour l’appelant :


o Si le UPDATE est envoyé avant l’achèvement de la transaction INVITE initiale, et si l’INVITE initiale contenait une offre, le UPDATE peut contenir une offre si l’appelant a généré une réponse dans une réponse provisoire fiable, et si l’appelant a reçu une réponse à toute autre offre qu’il a envoyée dans un PRACK ou UPDATE, et a généré des réponses pour toute offre qu’il a reçue dans un UPDATE provenant de l’appelé.

o Si le UPDATE est envoyé avant l’achèvement de la transaction INVITE initiale, et si l’INVITE initiale ne contenait pas une offre, le UPDATE peut contenir une offre si l’appelé a généré une offre dans une réponse provisoire fiable, et si l’UAC a généré une réponse dans le PRACK correspondant. Bien sûr, il ne peut pas envoyer un UPDATE si il n’a pas reçu de réponse aux autres offres qu’il a envoyé dans un PRACK ou UPDATE, ou n’a généré de réponse pour aucune des autres offres qu’il a reçues dans un UPDATE provenant de l’appelé.

o Si le UPDATE est envoyé après l’achèvement de la transaction INVITE initiale, il ne peut pas contenir une offre si l’appelant a généré ou reçu des offres dans un re-INVITE ou UPDATE auquel il n’a pas été répondu.


et pour l’appelé :


o Si le UPDATE est envoyé avant l’achèvement de la transaction INVITE, et si l’INVITE initiale contenait une offre, le UPDATE ne peut pas être envoyé avec une offre sauf si l’appelé a généré une réponse dans une réponse provisoire fiable, a reçu un PRACK pour cette réponse provisoire fiable, n’a pas reçu de demande (PRACK ou UPDATE) avec des offres auxquelles il n’a pas répondu, et n’a envoyé aucune demande UPDATE contenant des offres qui n’ont pas eu de réponse.

o Si le UPDATE est envoyé avant l’achèvement de la transaction INVITE, et si l’INVITE initiale ne contenait pas d’offre, le UPDATE ne peut pas être envoyé avec une offre sauf si l’appelé a envoyé une offre dans une réponse provisoire fiable, a reçu une réponse dans un PRACK, et n’a reçu aucune demande UPDATE avec des offres auxquelles il n’a pas été répondu, et n’a envoyé aucune demande UPDATE contenant des offres qui n’ont pas eu de réponse.

o Si le UPDATE est envoyé après l’achèvement de la transaction INVITE initiale, il ne peut pas être envoyé avec une offre si l’appelé a généré ou reçu des offres dans un re-INVITE ou UPDATE qui n’ont pas eu de réponse.


5.2 Réception d’un UPDATE


Le UPDATE est traité comme toute autre demande de rafraîchissement de cible à mi-dialogue, comme décrit au paragraphe 12.2.2 de la [RFC3261]. Si la demande est généralement acceptable, le traitement continue comme décrit ci-dessous. Ce traitement est presque identique à celui du paragraphe 14.2 de la [RFC3261], mais généralisé pour le cas de UPDATE.


Un UAS qui reçoit un UPDATE avant qu’il ait généré une réponse finale à un UPDATE précédent dans le même dialogue DOIT retourner une réponse 500 au nouvel UPDATE, et DOIT inclure un champ d’en-tête Retry-After avec une valeur choisie au hasard entre 0 et 10 secondes.


Si un UPDATE est reçu contenant une offre, et si l’UAS a généré une offre (dans un UPDATE, PRACK ou INVITE) à laquelle il n’a pas encore reçu de réponse, l’UAS DOIT rejeter le UPDATE avec une réponse 491. De même, si un UPDATE est reçu contenant une offre, et si l’UAS a reçu une offre (dans un UPDATE, PRACK, ou INVITE) à laquelle il n’a pas encore généré une réponse, l’UAS DOIT rejeter le UPDATE avec une réponse 500, et DOIT inclure un champ d’en-tête Retry-After avec une valeur choisie au hasard entre 0 et 10 secondes.


Si un UA reçoit un UPDATE pour un dialogue existant, il DOIT vérifier tout identifiant de version dans la description de session ou, si il n’y a pas d’identifiant de version, le contenu de la description de session pour voir si il a changé. Si la description de session a changé, l’UAS DOIT ajuster les paramètres de session en conséquence et générer une réponse dans les 2xx. Cependant, à la différence de re-INVITE, le UPDATE DOIT recevoir rapidement une réponse, et donc l’utilisateur ne peut généralement pas être invité à approuver les changements de session. Si l’UAS ne peut pas changer les paramètres de session sans inviter l’utilisateur, il DEVRAIT rejeter la demande avec une réponse 504. Si la nouvelle description de session n’est pas acceptable, l’UAS peut la rejeter en retournant une réponse 488 (Non acceptable ici) pour le UPDATE. Cette réponse DEVRAIT inclure un champ d’en-tête Warning.


5.3 Traitement de la réponse à UPDATE


Le traitement de la réponse UPDATE à l’UAC suit les règles du paragraphe 12.2.1.2 de la [RFC3261] pour une demande de rafraîchissement de cible. Une fois que ce traitement est achevé, il continue comme spécifié ci-dessous. Ce traitement est presque identique à celui du paragraphe 14.1 de la [RFC3261], mais généralisé pour UPDATE.


Si un UA reçoit une réponse finale non 2xx à un UPDATE, les paramètres de session DOIVENT rester inchangés, comme si aucun UPDATE n’avait été produit. Noter que, comme établi au paragraphe 12.2.1 de la [RFC3261], si la réponse finale non 2xx est un 481 (Cet appel/transaction n’existe pas) ou un 408 (Fin de temporisation de demande) ou si aucune réponse n’est reçue pour le UPDATE (c’est-à-dire, si une fin de temporisation est retournée par la transaction de client UPDATE) l’UAC va terminer le dialogue.


Si un UAC reçoit une réponse 491 à un UPDATE, il DEVRAIT lancer un temporisateur d’une valeur T choisie comme suit :

1. S l’UAC est le propriétaire du Call-ID de l’identifiant de dialogue (ce qui signifie qu’il a généré la valeur) T a une valeur choisie au hasard entre 2,1 et 4 secondes en unités de 10 ms.

2. Si l’UAC n’est pas le propriétaire du Call-ID de l’identifiant de dialogue, T a une valeur choisie au hasard entre 0 et 2 secondes en unités de 10 ms.

Lorsque le temporisateur arrive à expiration, l’UAC DEVRAIT tenter une fois de plus le UPDATE, si il désire toujours que cette modification de session ait lieu. Par exemple, si l’appel a déjà été raccroché par un BYE, le UPDATE n’aurait pas lieu.


6. Comportement du mandataire


Le traitement d’une demande UPDATE par le mandataire est identique à celui de toute autre demande non INVITE.


7. Définition de la méthode UPDATE


La sémantique de la méthode UPDATE est décrite en détails ci-dessous. Cette extension ajoute une autre valeur au BNF Method décrit dans la [RFC3261] :


UPDATEm = %x55.50.44.41.54.45 ; UPDATE en majuscules

Method = INVITEm / ACKm / OPTIONSm / BYEm / CANCELm / REGISTERm / UPDATEm / extension-method


Le Tableau 1 étend le Tableau 2 de la [RFC3261] pour la méthode UPDATE.


Le Tableau 2 met à jour le Tableau 3 de la [RFC3261] pour la méthode UPDATE.


Champ d’en-tête

mandataire

UPDATE

Accept

R


o

Accept

2xx


o

Accept

415


c

Accept-Encoding

R


o

Accept-Encoding

2xx


o

Accept-Encoding

415


c

Accept-Language

R


o

Accept-Language

2xx


o

Accept-Language

415


c

Alert-Info



-

Allow

R


o

Allow

2xx


o

Allow

r


o

Allow

405


m

Allow-Events

(1)


-

Authentication-Info

2xx


o

Authorization

R


o

Call-ID

c

r

m

Call-Info


ar

o

Contact

R


m

Contact

1xx


o

Contact

2xx


m

Contact

3xx

d

o

Contact

485


o

Content-Disposition



o

Content-Encoding



o

Content-Language



o

Content-Length


ar

t

Content-Type



*

Cseq

c

r

m

Date


a

o

Error-Info

300-699

a

o

Event

(1)


-

Expires



-

From

c

r

m

In-Reply-To



-

Max-Forwards

R

amr

m

Min-Expires



-

MIME-Version



o

Organization


ar

o

(1) défini dans la [RFC3265].

Tableau 1 : Résumé des champs d’en-tête, A--O


Champ d’en-tête où mandataire UPDATE

Priority -

Proxy-Authenticate 407 ar m

Proxy-Authenticate 401 ar o

Proxy-Authorization R dr o

Proxy-Require R ar o

RAck R -

Record-Route R ar o

Record-Route 2xx,18x mr o

Reply-To -

Require ar c

Retry-After 404,413,480,486 o

500,503 o

600,603 o

Route R adr c

Rseq - -

Server r o

Subject - -

Subscription-State (1) -

Supported R o

Supported 2xx o

Timestamp o

To c r m

Unsupported 420 m

User-Agent o

Via R amr m

Via rc dr m

Warning r o

WWW-Authenticate 401 ar m

WWW-Authenticate 407 ar o


Tableau 2 : résumé des champs d’en-tête, P--Z.


8. Exemple de flux d’appel


Cette section présente un exemple de flux d’appel utilisant la méthode UPDATE. Le flux est montré à la Figure 1. L’appelant envoie un INVITE initial (1) qui contient une offre. L’appelant génère une réponse 180 (2) avec une réponse à cette offre. Avec l’achèvement d’un échange offre/réponse, la session est établie, bien que le dialogue soit encore dans l’état précoce. L’appelant génère un PRACK (3) pour accuser réception du 180, et il est répondu au PRACK par un 200 OK (4). L’appelant décide de mettre à jour certains aspects de la session – pour la mettre en garde, par exemple. Donc, il génère une demande UPDATE (5) avec une nouvelle offre. Il est répondu à cette offre dans la réponse 200 au UPDATE (6). Peu après, l’appelé décide de mettre à jour un aspect de la session, donc, il génère une demande UPDATE (7) avec une offre, et la réponse est envoyée dans la réponse 200 (8). Finalement, l’appelé répond à l’appel, d’où résulte une réponse 200 OK à l’INVITE (9), et ensuite un ACK (10). Ni le 200 OK à l’INVITE, ni le ACK, ne va contenir de SDP.


Appelant Appelé

| |

|(1) INVITE avec offre 1 |

|----------------------------->|

| |

|(2) 180 avec réponse 1 |

|<-----------------------------|

| |

|(3) PRACK |

|----------------------------->|

| |

|(4) 200 PRACK |

|<-----------------------------|

| |

|(5) UPDATE avec offre 2 |

|----------------------------->|

| |

|(6) 200 UPDATE avec réponse 2 |

|<-----------------------------|

| |

|(7) UPDATE avec offre 3 |

|<-----------------------------|

| |

|(8) 200 UPDATE avec réponse 3 |

|----------------------------->|

| |

|(9) 200 INVITE |

|<-----------------------------|

| |

|(10) ACK |

|----------------------------->|

| |


Figure 1 : Flux d’appel UPDATE


9. Considérations pour la sécurité


Les considérations de sécurité pour UPDATE sont identiques à celles pour re-INVITE. Il est important que l’intégrité du UPDATE soit protégée et qu’il soit authentifié comme venant de la même source que l’entité de l’autre extrémité du dialogue. La [RFC3261] discute des mécanismes de sécurité pour réaliser ces fonctions.


10. Considérations relatives à l’IANA


Selon le paragraphe 27.4 de la [RFC3261], cette spécification sert d’enregistrement pour la méthode de mande SIP UPDATE. Les informations à ajouter au registre sont :

RFC 3311 : Cette spécification sert de RFC d’enregistrement de la méthode de demande UPDATE.

Nom de la méthode : UPDATE

Phrase de cause : Non applicable.


11. Notice concernant les droits de propriété intellectuelle


Des droits de propriété intellectuelle ont été notifiés à l’IETF en ce qui concerne tout ou partie de la spécification contenue dans le présent document. Pour plus d’informations, consulter la liste en ligne des revendications de droits.


12. Références normatives


[RFC2119] S. Bradner, "Mots clés à utiliser dans les RFC pour indiquer les niveaux d'exigence", BCP 14, mars 1997.


[RFC3261] J. Rosenberg et autres, "SIP : Protocole d'initialisation de session", juin 2002. (Mise à jour par RFC3265, RFC3853, RFC4320, RFC4916, RFC5393, RFC6665) )


[RFC3262] J. Rosenberg et H. Schulzrinne, "Fiabilité des réponses provisoires dans le protocole d'initialisation de session (SIP)", juin 2002. (P.S.)


[RFC3264] J. Rosenberg et H. Schulzrinne, "Modèle d'offre/réponse avec le protocole de description de session (SDP)", juin 2002.


[RFC3265] A.B. Roach, "Notification d'événement spécifique du protocole d'initialisation de session (SIP)", juin 2002. (MàJ par RFC6446) (Remplacée par la RFC6665)


13. Remerciements


L’auteur tient à remercier Jo Hornsby, Markus Isomaki, Rohan Mahy, et Bob Penfield de leurs commentaires.


14. Adresse de l’auteur


Jonathan Rosenberg

dynamicsoft

72 Eagle Rock Avenue

First Floor

East Hanover, NJ 07936

USA

mél : jdrosen@dynamicsoft.com


15. Déclaration complète de droits de reproduction


Copyright (c) The Internet Society (2002). Tous droits réservés.


Le présent document et ses traductions peuvent être copiés et fournis aux tiers, et les travaux dérivés qui les commentent ou les expliquent ou aident à leur mise en œuvre peuvent être préparés, copiés, publiés et distribués, en tout ou partie, sans restriction d’aucune sorte, pourvu que la déclaration de copyright ci-dessus et le présent et paragraphe soient inclus dans toutes telles copies et travaux dérivés. Cependant, le présent document lui-même ne peut être modifié d’aucune façon, en particulier en retirant la notice de droits de reproduction ou les références à la Internet Society ou aux autres organisations Internet, excepté autant qu’il est nécessaire pour le besoin du développement des normes Internet, auquel cas les procédures de droits de reproduction définies dans les procédures des normes Internet doivent être suivies, ou pour les besoins de la traduction dans d’autres langues que l’anglais.


Les permissions limitées accordées ci-dessus sont perpétuelles et ne seront pas révoquées par la Internet Society, ses successeurs ou ayant droits.


Le présent document et les informations y contenues sont fournies sur une base "EN L’ÉTAT" et le contributeur, l’organisation qu’il ou elle représente ou qui le/la finance (s’il en est), la INTERNET SOCIETY et la INTERNET ENGINEERING TASK FORCE déclinent toutes garanties, exprimées ou implicites, y compris mais non limitées à toute garantie que l’utilisation des informations ci encloses ne violent aucun droit ou aucune garantie implicite de commercialisation ou d’aptitude à un objet particulier.


Remerciement

Le financement de la fonction d’édition des RFC est actuellement fourni par l’Internet Society.

page - 7 -