Groupe de travail Réseau	P. Saint-Andre, éd., Jabber Software Foundation	
Request for Comments : 3922	octobre 2004	
Catégorie : En cours de normalisation	Traduction Claude Brière de L'Isle	

Transposition du protocole extensible de messagerie et de présence (XMPP) en présence commune et messagerie instantanée (CPIM)

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 (2004).

Résumé
Le présent mémoire décrit une transposition entre le protocole extensible de messagerie instantanée et de présence (XMPP) et les spécifications de présence commune et de messagerie instantanée (CPIM).

Table des Matières
1. Introduction	1
1.1 Vue d'ensemble	1
1.2 Terminologie	2
1.3 Conventions utilisées dans le présent document	2
2. Approche	2
3. Transposition d'adresse	3
3.1 Vue d'ensemble	3
3.2. XMPP en CPIM	3
3.3 CPIM en XMPP	3
4. Transposition de syntaxe de messages instantanés	4
4.1 Transposition de syntaxe de message de la spécification XMPP en CPIM	4
4.2 Transposition de syntaxe de message de la spécification CPIM en XMPP	6
5. Transposition de syntaxe pour les informations de présence	8
5.1 Transposition de syntaxe de présence de la spécification XMPP en CPIM	8
5.2 Transposition de syntaxe de présence des spécifications CPIM en XMPP	12
6. Passerelle XMPP-CPIM comme service de présence	17
6.1 Demande d'abonnement	17
6.2 Réception d'une demande d'abonnement	17
6.3 Opération Notify	18
6.4 Désabonnement	19
6.5 Annulation d'un abonnement	19
7. Considérations sur la sécurité	19
8. Références	19
8.1 Références normatives	19
8.2 Références pour information	20
Adresse de l'auteur	20
Déclaration complète de droits de reproduction	20

1.	Introduction
1.1	Vue d'ensemble
Le groupe de travail Messagerie instantanée et présence (IMPP, Instant Messaging and Presence) a défini un cadre abstrait pour l'interopérabilité entre les systèmes de messagerie instantanée (IM, instant messaging) et de présence qui sont conformes à la [RFC2779]. Ce cadre est couramment appelé Présence commune et messagerie instantanée (CPIM, Common Presence and Instant Messaging). La famille CPIM de spécifications inclut un profil commun pour la messagerie instantanée [RFC3860] (aussi appelé CPIM) un profil commun de présence [RFC3859], un format de message CPIM [RFC3862], et un format commun de données d'informations de présence [RFC3863]. (Note : pour prévenir les confusions, on se réfèrera ici à Présence commune et messagerie instantanée collectivement comme les "spécifications CPIM", tandis que le profil commun pour la messagerie instantanée sera appelé "CPIM".)

Le présent mémoire décrit comment le protocole extensible de messagerie instantanée et de présence ([RFC3920], [RFC3921]) se transpose dans le modèle abstrait contenu dans les spécifications CPIM, principalement dans le but d'établir des passerelles entre les services XMPP et les services non XMPP qui se conforment à la [RFC2779]. Une telle passerelle, qu'on appelle ici une "passerelle XMPP-CPIM", peut être établie pour interpréter les protocoles d'un service et les traduire dans les protocoles de l'autre service. On peut visualiser cette relation comme suit :

     +-------------+        +-------------+        +------------+
     |             |        |             |        |            |
     |   Service   |        |  Passerelle |        |  Service   |
     |     XMPP    | <----> |  XMPP-CPIM  | <----> |  non XMPP  |
     |             |        |             |        |            |
     +-------------+        +-------------+        +------------+

Le présent mémoire définit une transposition à utiliser par une passerelle qui traduit d'un protocole XMPP en protocole non XMPP et vice-versa via les spécifications CPIM. Une telle passerelle n'est pas un bond intermédiaire sur un réseau de serveurs non XMPP (dont les formats natifs peuvent être ou non définis par les spécifications CPIM) mais un traducteur dédié entre le protocole XMPP et un protocole non XMPP, où les spécifications CPIM définissent les formats communs dans lesquels sont traduits les protocoles pour les besoins d'interfonctionnement.

La transposition définie ici s'applique aux messages instantanés et aux informations de présence qui ne sont pas chiffrées ou signées pour une sécurité de bout en bout. Pour des informations sur des communications sécurisées vers ou à partir d'un service XMPP à travers une passerelle XMPP-CPIM, se reporter à la [RFC3923].

1.2	Terminologie
Le présent mémoire hérite du vocabulaire défini dans la [RFC2778]. Les termes Fermé (CLOSED), Boîte aux lettres instantanée (INSTANT INBOX), Message instantané (INSTANT MESSAGE), Ouvert (OPEN), service Présence (PRESENCE SERVICE), Présentité (PRESENTITY), Souscription (SUBSCRIPTION), et Observateur (WATCHER) sont utilisés avec la même signification que celle qui y est définie.

Le présent mémoire hérite aussi du vocabulaire défini dans la [RFC3920]. Les termes Entité (ENTITY), Identifiant de nœud (NODE IDENTIFIER), Identifiant de domaine (DOMAIN IDENTIFIER), Identifiant de ressource (RESOURCE IDENTIFIER), Strophe de message (MESSAGE STANZA), et strophe de présence (PRESENCE STANZA) sont utilisés avec la même signification que celle qui y est définie.

1.3	Conventions utilisées dans le présent document
Les mots clés "DOIT", "NE DOIT PAS", "EXIGE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDE", "PEUT", et "FACULTATIF" en majuscules dans ce document sont à interpréter comme décrit dans le BCP 14, [RFC2119].

2.	Approche

XMPP et CPIM sont des technologies distinctement étrangères. Donc, il faut faire attention lors de la transposition entre XMPP et la syntaxe abstraite définie par les spécifications CPIM.

À la base, XMPP est un protocole de transport de données pour écouler des éléments XML (appelés des "strophes") entre deux points d'extrémité quelconques sur le réseau ; messages et strophes de présence sont deux des éléments de données centraux définis dans XMPP et sont souvent utilisés pour échanger des messages instantanés et des informations de présence entre les utilisateurs de messagerie instantanée (bien que l'extensibilité inhérente de XML permette aux applications d'utiliser la sémantique générale de ces types de strophes à d'autres fins). XMPP ne se fonde pas sur la [RFC2045] ; à la place, la [RFC3920] définit des schémas XML pour les messages et les strophes de présence (par exemple, le fils <body/> d'une strophe de message contient des données de caractères XML qui sont généralement destinées à être lues par un utilisateur humain).

Les spécifications CPIM fournissent des formats communs pour la messagerie instantanée et présence au moyen de deux types de contenu [RFC2045] : "Message/CPIM" pour les messages [RFC3862] et "application/pidf+xml" pour présence [RFC3863]. La syntaxe des objets "Message/CPIM" est similaire, mais plus stricte, à celle définie dans la [RFC2822], et donne la capacité d'inclure des types arbitraires de supports MIME [RFC2046]. À l'opposé, chaque objet "application/pidf+xml" est un document XML complet dont la structure est définie par un schéma XML.

L'approche retenue ici est de spécifier les transpositions à partir des éléments et attributs XMPP vers les en-têtes et formats MIME définis par la [RFC3862] et la [RFC3863] afin de se conformer à la sémantique définie par la [RFC3860] et la [RFC3859]. Naturellement, les transpositions dans la direction opposée sont aussi fournies.

3.	Transposition d'adresse
3.1	Vue d'ensemble
La transposition d'adresse peut être nécessaire parce que les formats d'adresse utilisés pour identifier les entités XMPP (spécifiées dans la [RFC3920]) sont différentes de celles utilisées pour identifier les boîtes aux lettres de messagerie instantanée (le schéma d'URI im: spécifié dans la [RFC3860]) et les présentités (le schéma d'URI pres: spécifié dans la [RFC3859]). En particulier, des caractères différents de ceux permis dans les adresses XMPP sont permis dans les URI im: et pres: :
o	les caractères suivants de la [RFC0020] sont permis dans les URI im:/pres: mais pas dans les adresses XMPP : #26; (&), #27; ('), et #2f; (/).
o	De nombreux caractères non US-ASCII (précisément, UTF-8) sont permis dans les adresses XMPP mais ne le sont pas dans les URI im:/pres:, car XMPP permet des parties locales d'adresse internationalisée.

Note : Dans ce document on discute des caractères permis dans la seule partie locale des adresses (c'est-à-dire qu'on a exclu la transposition des noms de domaines du domaine d'application de la version initiale du présent document, car c'est un sujet pour le système des noms de domaines et la traduction des noms de domaines complètement internationalisés).

3.2.	XMPP en CPIM
Voici un algorithme général pour la transposition d'une adresse XMPP en un URI im: ou pres: :

1.	Séparer l'adresse XMPP en un identifiant de nœud (partie locale ; transposition décrite dans les étapes suivantes) identifiant de domaine (nom d'hôte ; sa transposition sort du domaine d'application) et identifiant de ressource (spécifie l'appareil ou connexion particulière ; l'éliminer pour l'interopérabilité trans-système)

2.	Appliquer le profil Nodeprep de la [RFC3454] (comme spécifié dans la [RFC3920]) pour la canonisation (FACULTATIF)

3.	 Traduire respectivement #26; en &, #27; en ', et #2f; en /

4.	Pour chaque octet, si l'octet n'est pas dans l'ensemble "A-Za-z0-9!$*.?_~+=" le changer en %hexhex comme décrit au paragraphe 2.2.5 de la [RFC2718]

5.	Combiner la partie locale résultante avec le nom d'hôte transposé pour former l'adresse local@domaine

6.	Faire précéder d'un schéma 'im:' (pour les strophes <message/> XMPP) ou d'un schéma 'pres:' (pour les strophes XMPP <presence/>)

3.3	CPIM en XMPP
Voici un algorithme général pour transposer un URI im: ou pres: en adresse XMPP :
1.	Retirer le schéma d'URI.
2.	Séparer au premier caractère '@' entre partie locale et nom d'hôte (la transposition de ce dernier est hors sujet).
3.	Traduire les %hexhex en octets équivalents comme décrit au paragraphe 2.2.5 de la [RFC2718].
4.	Traiter le résultat comme une chaîne UTF-8.
5.	Traduire respectivement & en #26;, ' en #27;, et / en #2f
6.	Appliquer le profil Nodeprep de la [RFC3454] (comme spécifié dans la [RFC3920]) pour la canonisation (FACULTATIF).
7.	Recombiner la partie locale avec le nom d'hôte transposé pour former l'adresse local@domaine.

4.	Transposition de syntaxe de messages instantanés

Cette section décrit comment une passerelle DEVRAIT transposer les messages instantanés entre un service XMPP et un service non XMPP en utilisant un objet "Message/CPIM" comme support d'un contenu de texte encapsulé afin de se conformer à la sémantique de messagerie instantanée définie par la [RFC3860].

4.1	Transposition de syntaxe de message de la spécification XMPP en CPIM
Ce paragraphe définit la transposition des primitives de syntaxe des strophes de message XMPP en objets "Message/CPIM" avec du contenu de texte encapsulé.

Note : Comme spécifié dans la [RFC2045], le type de contenu par défaut d'un objet MIME est "Content-type: text/plain; charset=us-ascii". Comme XMPP utilise exclusivement le codage de caractères de la [RFC3629], l'objet MIME encapsulé généré par une passerelle XMPP-CPIM DOIT régler le "Content-type" à "text/plain", et le jeu de caractères (charset) DOIT être réglé à "utf-8".

4.1.1	Adresse From
L'attribut 'from' d'une strophe de message XMPP se transpose en l'en-tête 'From' d'un objet "Message/CPIM". Dans XMPP, le serveur de l'envoyeur imprime ou valide l'adresse "from" et règle sa valeur au <usager@hôte/ressource> complet négocié entre le client et le serveur durant l'authentification et le lien de ressource comme défini dans la [RFC3920]. Donc une passerelle XMPP-CPIM va recevoir du serveur XMPP de l'envoyeur une strophe de message contenant une adresse "from" de la forme <usager@hôte/ressource>. Pour transposer l'attribut 'from' d'une strophe de message XMPP en en-tête 'From' d'un objet "Message/CPIM", la passerelle DOIT retirer l'identifiant de ressource, DOIT ajouter le schéma d'URI  "im:" de messagerie instantanée qui se trouve en tête de l'adresse, et PEUT inclure un "Formal-name" CPIM pour l'envoyeur (si il est connu).

Exemple : Transposition d'adresse From

Attribut 'from' XMPP :
     <message from='juliet@example.com/balcony'>
       ...
     </message>

En-tête 'From' CPIM :
     From: Juliet Capulet <im:juliet@example.com>

4.1.2	Adresse To
L'attribut 'to' d'une strophe de message XMPP se transpose en l'en-tête 'To' d'un objet "Message/CPIM". Dans XMPP, l'envoyeur DEVRAIT inclure un attribut 'to' à une strophe de message, et DOIT l'inclure si le message est destiné à être livré à un autre utilisateur. Donc une passerelle XMPP-CPIM va recevoir du serveur XMPP de l'envoyeur une strophe de message contenant une adresse "to" de la forme <usager@hôte> ou <usager@hôte/ressource>. Pour transposer l'attribut 'to' d'une strophe de message XMPP en l'en-tête 'To' d'un objet "Message/CPIM", la passerelle DOIT retirer l'identifiant de ressource (si il est inclus) DOIT ajouter le schéma d'URI de messagerie instantanée "im:" devant l'adresse, et PEUT inclure un "Formal-name" CPIM pour le receveur (si il est connu).

Exemple : Transposition d'adresse To

Attribut 'to' XMPP :
     <message to='romeo@example.net/orchard'>
       ...
     </message>

En-tête 'To'  CPIM :
     To: Romeo Montague <im:romeo@example.net>

4.1.3	Identifiant de strophe
Une strophe de message XMPP PEUT posséder un attribut 'id', qui est utilisé par l'application envoyeuse dans le but de suivre les strophes et n'est pas un identifiant unique au monde comme celui défini par l'en-tête MIME Content-ID. Comme l'attribut XMPP 'id' n'a pas la même signification que l'en-tête MIME Content-ID, il NE DEVRAIT PAS être transposé en cet en-tête; cependant, si le 'id' est connu pour être unique (par exemple, si il a été généré pour être unique par le serveur XMPP et que ce fait est connu par la passerelle XMPP-CPIM), il DEVRAIT alors être transposé ainsi.

4.1.4	Type de message
Une strophe de message XMPP PEUT posséder un attribut 'type', qui est utilisé par une application envoyeuse pour capturer le contexte conversationnel du message. Il n'y a pas de transposition d'un attribut 'type' XMPP en en-tête "Message/CPIM", en caractéristiques communes MIME, ou en contenu de texte encapsulé. Donc, si une strophe XMPP reçue par une passerelle XMPP-CPIM possède un attribut 'type', la passerelle DEVRAIT ignorer la valeur fournie.

4.1.5	Fil de message
Une strophe de message XMPP PEUT contenir un élément fils <thread/> pour spécifier le fil de la conversation dans lequel se situe le message. Il n'y a pas de transposition d'un élément <thread/> XMPP en en-tête "Message/CPIM", en caractéristiques MIME communes, ou en contenu de texte encapsulé. Donc, si une strophe de message XMPP reçoit d'une passerelle XMPP-CPIM un élément fils <thread/> inclus, la passerelle DEVRAIT ignorer la valeur fournie.

4.1.6	Sujet de message
Une strophe de message XMPP PEUT inclure un élément fils <subject/>. S'il est inclus, il se transpose en en-tête 'Subject' d'un objet "Message/CPIM". Pour transposer l'élément XMPP <subject/> en l'en-tête 'Subject' d'un objet "Message/CPIM", la passerelle DEVRAIT simplement transposer les données de caractères XML de l'élément XMPP <subject/> en la valeur de l'en-tête 'Subject'. L'élément <subject/> PEUT inclure un attribut 'xml:lang' qui spécifie le langage dans lequel le sujet est écrit. Si un attribut 'xml:lang' est fourni, il DOIT être transposé par l'inclusion de ';lang=tag' après le nom d'en-tête et les deux-points, et 'tag' est la valeur de l'attribut 'xml:lang'.

Exemple : Transposition de Subject

Élément XMPP <subject/> :
     <subject>Hi!</subject>
     <subject xml:lang='cz'>Ahoj!</subject>

En-tête CPIM 'Subject' :
     Subject: Hi!
     Subject:;lang=cz Ahoj!

4.1.7	Corps de message
L'élément fils <body/> d'une strophe de message XMPP est utilisé pour donner la signification principale du message. Les données de caractères XML de l'élément XMPP <body/> se transposent en le contenu de texte encapsulé.

Exemple : Corps de message

Message <body/> XMPP :
     <message>
       <body>Wherefore art thou, Romeo?</body>
     </message>

Contenu de texte MIME encapsulé :
     Content-type: text/plain; charset=utf-8
     Content-ID: <123456789@example.net>

     Wherefore art thou, Romeo?

4.1.8	Extensions de message
Comme défini dans la [RFC3920], une strophe de message XMPP peut contenir un contenu "extended" dans tout espace de noms afin de compléter ou étendre la sémantique du cœur de la strophe de message. À l'exception des informations étendues qualifiée par l'espace de noms 'urn:ietf:params:xml:ns:xmpp-e2e' comme défini dans la [RFC3923], une passerelle XMPP-CPIM DEVRAIT ignorer de telles informations et ne pas les passer par la passerelle au receveur désigné. Aucune transposition n'est définie pour de telles informations.

4.1.9	Syntaxe CPIM générée par une passerelle
CPIM spécifie l'existence des en-têtes "Message/CPIM" en plus de ceux décrits ci-dessus, mais il n'y a pas de correspondance exacte pour ces en-têtes dans les spécifications du cœur de XMPP. Cela inclut :
cc : spécifie l'adresse d'une entité qui va recevoir une "copie de courtoisie" du message (c'est-à-dire, un destinataire non principal)
DateTime : spécifie la date et l'heure d'envoi du message
NS : spécifie l'espace de noms d'une extension de caractéristique
Require : spécifie une caractéristique de mise en œuvre obligatoire

Une passerelle XMPP-CPIM PEUT générer d'elle même de tels en-têtes sur la base de ses propres informations (par exemple, la date et l'heure à laquelle elle a reçu une strophe de message d'une entité XMPP) ou sur la base de données codées dans des extensions XMPP non centrales, mais les règles pour ce faire sortent du domaine d'application du présent mémoire.

4.2	Transposition de syntaxe de message de la spécification CPIM en XMPP
Ce paragraphe définit la transposition des primitives de syntaxe des objets "Message/CPIM" avec un contenu de texte encapsulé en des strophes de message XMPP.

4.2.1	Adresse From
L'en-tête 'From' d'un objet "Message/CPIM" se transpose en l'attribut 'from' d'une strophe de message XMPP. Pour transposer l'en-tête CPIM 'From' en attribut 'from' XMPP, la passerelle DOIT retirer le schéma d'URI de messagerie instantanée "im:" du début de l'adresse et DOIT retirer le "Formal-name" CPIM (s'il est fourni).

Exemple : Transposition d'adresse From

En-tête CPIM 'From' :
     From: Romeo Montague <im:romeo@example.net>

Attribut XMPP 'from' :
     <message from='romeo@example.net'>
       ...
     </message>

4.2.2	Adresse To
L'en-tête 'To' d'un objet "Message/CPIM" se transpose en l'attribut 'to' d'une strophe de message XMPP. Pour transposer l'en-tête CPIM 'To' en l'attribut XMPP 'to', la passerelle DOIT retirer le schéma d'URI de messagerie instantanée "im:" du début de l'adresse et DOIT retirer le "Formal-name" CPIM (si il est fourni). Si la passerelle a connaissance de l'identifiant de ressource utilisé par l'entité XMPP, la passerelle PEUT ajouter l'identifiant de ressource à l'adresse.

Exemple : Transposition d'adresse To

En-tête CPIM 'To' :
     To: Juliet Capulet <im:juliet@example.com>

Attribut XMPP 'to' :
     <message to='juliet@example.com/balcony'>
       ...
     </message>

4.2.3	Copie de courtoisie
La spécification du cœur de XMPP ne comporte pas de syntaxe pour spécifier une "copie de courtoisie" (destinataire non principal) pour une strophe de message. Donc, si une passerelle XMPP-CPIM reçoit un objet "Message/CPIM" qui contient un en-tête 'cc', elle NE DEVRAIT PAS passer les informations contenues dans cet en-tête au receveur XMPP.

4.2.4	En-tête Datetime
La spécification du cœur de XMPP ne comporte pas de syntaxe pour spécifier la date et l'heure à laquelle une strophe de message a été envoyée. Donc, si une passerelle XMPP-CPIM reçoit un objet "Message/CPIM" qui contient un en-tête 'DateTime', elle NE DEVRAIT PAS passer les informations contenues dans cet en-tête au receveur XMPP.

4.2.5	Sujet de message
L'en-tête 'Subject' d'un objet "Message/CPIM" se transpose en l'élément fils <subject/> d'une strophe de message XMPP. Pour transposer l'en-tête CPIM 'Subject' en l'élément XMPP <subject/>, la passerelle DEVRAIT simplement transposer la valeur de l'en-tête 'Subject' en les données de caractères XML de l'élément XMPP <subject/>. L'en-tête 'Subject' PEUT spécifier le langage dans lequel le sujet est écrit. Si l'information "lang" est fournie, elle DOIT être transposée en l'attribut 'xml:lang' de l'élément <subject/>, où la valeur de l'attribut 'xml:lang' est la valeur de l'étiquette fournie dans la chaîne ';lang=tag' incluse après le nom de l'en-tête 'Subject' CPIM et les deux points.

Exemple : Transposition de Subject

En-tête CPIM 'Subject' :
     Subject: Hi!
     Subject:;lang=cz Ahoj!

Élément XMPP <subject/> :
     <subject>Hi!</subject>
     <subject xml:lang='cz'>Ahoj!</subject>

4.2.6	Extensions d'en-tête
Les objets "Message/CPIM" PEUVENT inclure un en-tête 'NS' facultatif pour spécifier l'espace de noms d'une extension de caractéristique. Une passerelle XMPP-CPIM NE DOIT PAS passer de tels en-têtes au receveur XMPP, et aucune transposition n'est définie pour ces en-têtes.

4.2.7	En-tête Require
Les objets "Message/CPIM" PEUVENT inclure un en-tête 'Require' facultatif pour spécifier des caractéristiques dont la reconnaissance est obligatoire. En général, un tel en-tête sera inclus par une application envoyeuse non XMPP pour (1) insister pour que l'application receveuse comprenne la fonctionnalité spécifiée par un en-tête particulier, ou (2) indiquer qu'une certaine sémantique de non en-tête doit être mise en œuvre par l'application receveuse afin de comprendre le contenu du message (par exemple, "Locale.MustRenderKanji"). Comme la caractéristique de reconnaissance obligatoire va être nécessaire pour l'application XMPP receveuse plutôt que pour la passerelle XMPP-CPIM elle-même, la passerelle ne peut pas correctement traiter l'en-tête 'Require' sans une connaissance détaillée des capacités de l'application XMPP receveuse. Donc, il semble approprié que la passerelle XMPP-CPIM DEVRAIT retourne un avertissement ou une erreur à l'application envoyeuse non XMPP si elle inclut un ou plusieurs en-têtes 'Require' dans un objet "Message/CPIM" ; la nature exacte de l'avertissement ou erreur va dépendre de la nature de la technologie non XMPP utilisée par le système étranger, et n'est pas définie ici. De plus, toute transposition de l'en-tête 'Require' en XMPP ou une extension XMPP est laissée à la mise en œuvre ou à une spécification future.

4.2.8	Identifiant de contenu MIME
XMPP ne comporte pas d'élément ou attribut qui capture un identifiant unique au monde comme il est défini pour l'en-tête MIME Content-ID comme spécifié dans la [RFC2045]. Si une passerelle XMPP-CPIM reçoit un objet MIME qui comporte un Content-ID, elle PEUT fournir le Content-ID comme valeur de l'attribut 'id' de la strophe de message, mais ceci est FACULTATIF.

Exemple : Content-ID pour objet encapsulé

En-tête MIME :
     Content-ID: <123456789@example.net>

Attribut XMPP 'id' (FACULTATIF) :
     <message id='123456789@example.net'>
       ...
     </message>

4.2.9	Corps de message
Si le Content-type d'un objet MIME encapsulé est "text/plain", le contenu du message de texte encapsulé se transpose en les données de caractères XML de l'élément fils <body/> d'une strophe de message XMPP.

Exemple : Corps de message

Contenu de texte MIME encapsulé :
     Content-type: text/plain; charset=utf-8
     Content-ID: <123456789@example.net>

     Wherefore art thou?

<body/> de message XMPP :
     <message id='123456789@example.net'>
       <body>Wherefore art thou?</body>
     </message>

Si le Content-Type n'est pas "text/plain", la passerelle XMPP-CPIM PEUT transposer le contenu en une extension XMPP mais NE DOIT PAS la transposer en fils <body/> de la strophe de message XMPP, à qui il n'est permis de contenir que des données de caractères XML. La seule exception à cette règle est un objet MIME multi-part de la sorte spécifiée dans la [RFC3923], qui est à transposer comme il y est décrit.

Si le jeu de caractères est "US-ASCII" ou "UTF-8", la passerelle DOIT transposer l'objet "Message/CPIM" ; autrement, elle NE le DEVRAIT PAS.

4.2.10	Syntaxe XMPP générée par la passerelle
XMPP spécifie l'existence d'un attribut 'type' pour les strophes de message XMPP, qui permet à l'envoyeur de définir le contexte conversationnel du message. Il n'y a pas d'analogue exact pour cet attribut dans CPIM. Une passerelle XMPP-CPIM PEUT d'elle-même générer l'attribut 'type' sur la base de ses propres informations, mais ceci est FACULTATIF et les règles pour le faire sortent du domaine d'application du présent mémoire.

5.	Transposition de syntaxe pour les informations de présence

Cette section décrit comment une passerelle DEVRAIT transposer les informations de présence entre un service XMPP et un service non XMPP en utilisant un objet "Message/CPIM" comme support d'un objet encapsulé selon la [RFC3863] afin de se conformer à la sémantique de présence définie par la [RFC3859].

5.1	Transposition de syntaxe de présence de la spécification XMPP en CPIM
Ce paragraphe définit la transposition des primitives de syntaxe des strophes de présence XMPP en objets "Message/CPIM" avec des objets encapsulés "application/pidf+xml".

Note : comme spécifié dans la [RFC2045], le type de contenu par défaut d'un objet MIME est "Content-type: text/plain; charset=us-ascii". Comme XMPP utilise exclusivement le codage de caractères de la [RFC3629] et parce que PIDF spécifie le type MIME "application/pidf+xml", l'objet MIME encapsulé généré par une passerelle XMPP-CPIM pour des informations de présence DOIT établir l'en-tête 'Content-type' pour cet objet. Le "Content-type" DOIT être réglé à "application/pidf+xml" et le jeu de caractères DOIT être réglé à "utf-8".

5.1.1	Adresse 'From'
L'attribut 'from' d'une strophe de présence XMPP se transpose en l'en-tête 'From' d'un objet "Message/CPIM". Dans XMPP, le serveur de l'envoyeur imprime ou valide l'adresse "from" et règle sa valeur au <usager@hôte/ressource> négocié entre le client et le serveur durant l'authentification et le lien de ressource comme défini dans la [RFC3920]. Donc, une passerelle XMPP-CPIM va recevoir du serveur XMPP de l'envoyeur une strophe de présence contenant une adresse "from" de la forme <usager@hôte/ressource>. Pour transposer l'attribut 'from' d'une strophe de présence XMPP en l'en-tête 'From' d'un objet "Message/CPIM", la passerelle DOIT retirer l'identifiant de ressource, DOIT ajouter le schéma d'URI de messagerie instantanée "im:" en tête de l'adresse, et PEUT inclure un "Formal-name" CPIM pour l'envoyeur (si il est connu).

Exemple : Transposition d'adresse From
Attribut XMPP 'from'  :
     <presence from='juliet@example.com/balcony'>
       ...
     </presence>

En-tête 'From' CPIM :
     From: Juliet Capulet <im:juliet@example.com>

De plus, l'attribut 'from' d'une strophe de présence XMPP se transpose en l'attribut 'entity' d'un élément racine PIDF <presence/>. Pour transposer l'attribut XMPP 'from' en attribut 'entity' PIDF, la passerelle DOIT retirer l'identifiant de ressource et DOIT ajouter le schéma d'URI "pres:" de messagerie instantanée au début de l'adresse.

Exemple : Transposition d'adresse From (PIDF)
Attribut XMPP 'from' :
     <presence from='juliet@example.com/balcony'>
       ...
     </presence>

Attribut PIDF 'entity' :
     <presence entity='pres:juliet@example.com'>
       ...
     </presence>

Finalement, une passerelle XMPP-CPIM DEVRAIT transposer l'identifiant de ressource de l'adresse XMPP contenue dans l'attribut XMPP 'from' en l'attribut 'id' de l'élément fils <tuple/> PIDF.

Exemple : Transposition d'identifiant de ressource
Attribut XMPP 'from' :
     <presence from='juliet@example.com/balcony'>
       ...
     </presence>

'id' PIDF pour <tuple/> :
     <presence entity='pres:juliet@example.com'>
       <tuple id='balcony'>
         ...
       </tuple>
     </presence>

5.1.2	Adresse 'To'
L'attribut 'to' d'une strophe de présence XMPP se transpose en l'en-tête 'To' d'un objet "Message/CPIM". Dans XMPP, l'envoyeur PEUT inclure un attribut 'to' sur une strophe de présence, et DOIT l'inclure si la strophe de présence est destinée à être livrée directement à un autre usager (les strophes de présence destinées à la diffusion sont marquées avec une adresse 'to' par le serveur de l'envoyeur). Donc, une passerelle XMPP-CPIM va recevoir du serveur XMPP de l'envoyeur une strophe de présence contenant une adresse "to" de la forme <usager@hôte> ou <usager@hôte/ressource>. Pour transposer l'attribut 'to' d'une strophe de présence XMPP en l'en-tête 'To' d'un objet "Message/CPIM", la passerelle DOIT retirer l'identifiant de ressource (si il est inclus) DOIT ajouter le schéma d'URI de messagerie instantanée "im:" au début de l'adresse, et PEUT  inclure un "Formal-name" CPIM pour le receveur (si il est connu).

Exemple : Transposition, d'adresse To

Attribut XMPP 'to' :
     <presence to='romeo@example.net/orchard'>
       ...
     </presence>

En-tête CPIM 'To' :
     To: Romeo Montague <im:romeo@example.net>

5.1.3	Identifiant de strophe
Une strophe de présence XMPP PEUT posséder un attribut 'id', qui est utilisé par l'application envoyeuse pour les besoins du suivi des strophes et n'est pas un identifiant unique au monde comme celui défini par l'en-tête MIME Content-ID. Comme l'attribut XMPP 'id' n'a pas la même signification que l'en-tête MIME Content-ID, il NE DEVRAIT PAS être transposé en cet en-tête ; cependant, si l''id' est connu comme étant unique (par exemple, si il est généré comme unique par le serveur XMPP et si ce fait est connu de la passerelle XMPP-CPIM) il DEVRAIT alors être transposé ainsi.

5.1.4	Type de présence
Une strophe de présence XMPP PEUT posséder un attribut 'type'. Si aucun attribut 'type' n'est inclus, la strophe de présence indique que l'envoyeur est disponible ; cet état se transpose en le type PIDF de base de présence de OPEN. Si l'attribut 'type' a une valeur de "unavailable", la strophe de présence indique que l'envoyeur n'est plus disponible ; cet état se transpose en le type PIDF de base de présence de CLOSED. Donc, l'absence d'un attribut 'type', comme un attribut 'type' réglé à une valeur de "unavailable", correspondent tous deux au "opération notify" de la [RFC3859]. Tous les autres types de présence sont utilisés pour gérer les abonnements à présence ou pour sonder la présence actuelle ; les transpositions de ces autres types de présence sont définis à la Section 6 "Passerelle XMPP-CPIM comme service de présence".

Exemple : Présence disponible

Présence XMPP disponible:
     <presence from='juliet@example.com/balcony'/>

Présence fondée sur PIDF (OPEN) :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               entity='pres:juliet@example.com'>
       <tuple id='balcony'>
         <status>
           <basic>open</basic>
         </status>
       </tuple>
     </presence>

Exemple : Présence indisponible

Présence XMPP indisponible:
     <presence from='juliet@example.com/balcony' type='unavailable'/>

Présence PIDF de base (CLOSED) :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               entity='pres:romeo@example.net'>
       <tuple id='balcony'>
         <status>
           <basic>closed</basic>
         </status>
       </tuple>
     </presence>

5.1.5	Élément 'Show'
L'élément fils <show/> d'une strophe de présence XMPP fournit des informations supplémentaires sur la disponibilité de l'envoyeur. Les données de caractères XML de l'élément XMPP <show/> se transposent en contenu <status/> étendu dans PIDF. Les valeurs définies de l'élément <show/> sont 'away', 'chat', 'dnd', et 'xa' ; aussitôt que des valeurs sont spécifiées pour des états 'status' étendus dans l'espace de noms 'urn:ietf:params:xml:ns:pidf:im', les valeurs XMPP seront transposées en les valeurs PIDF.

Exemple : Élément Show

Élément  XMPP <show/> :
     <presence from='juliet@example.com/balcony'>
       <show>away</show>
     </presence>

Informations de présence étendues PIDF :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               xmlns:im='urn:ietf:params:xml:ns:pidf:im'
               entity='pres:juliet@example.com'>
       <tuple id='balcony'>
         <status>
           <basic>open</basic>
           <im:im>away</im:im>
         </status>
       </tuple>
     </presence>

5.1.6	Élément 'Status'
L'élément fils <status/> d'une strophe de présence XMPP donne une description définie par l'utilisateur, en langage naturel, de l'état détaillé de disponibilité de l'envoyeur. L'élément XMPP <status/> se transpose en l'enfant PIDF <note/> de l'élément PIDF <tuple/>.

Exemple : Élément Status

Élément XMPP <status/> :
     <presence from='juliet@example.com/balcony'>
       <show>away</show>
       <status>retired to the chamber</status>
     </presence>

Élément PIDF <note/> :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               xmlns:im='urn:ietf:params:xml:ns:pidf:im'
               entity='pres:juliet@example.com'>
       <tuple id='balcony'>
         <status>
           <basic>open</basic>
           <im:im>away</im:im>
         </status>
         <note>retired to the chamber</note>
       </tuple>
     </presence>

5.1.7	Priorité de présence
Une strophe de présence XMPP PEUT contenir un élément fils <priority/> dont la valeur est un entier entre -128 et +127. La valeur de cet élément PEUT être transposée en l'attribut 'priority' du fils <contact/> de l'élément PIDF <tuple/>. Si la valeur de l'élément XMPP <priority/> est négative, une passerelle XMPP-CPIM NE DOIT PAS transposer la valeur. La gamme des valeurs admissibles pour l'attribut PIDF 'priority' est tout nombre décimal de zéro à un inclus, avec un maximum de trois décimales. Si une passerelle XMPP-CPIM transpose ces valeurs, elle DEVRAIT traiter <priority>0</priority> XMPP comme PIDF priority='0' et <priority>127</priority> XMPP comme PIDF priority='1', en transposant les valeurs intermédiaires de façon appropriée afin qu'elles soient uniques (par exemple, la priorité XMPP 1 en priorité PIDF de 0,007, la priorité XMPP 2 en priorité PIDF de 0,015, et ainsi de suite jusqu'à la transposition de la priorité XMPP 126 en priorité PIDF de 0,992 ; noter que ceci est seulement un exemple, et que la transposition exacte sera déterminée par la passerelle XMPP-CPIM).

Exemple : Priorité de présence

Élément XMPP <status/> :
     <presence from='juliet@example.com/balcony'>
       <priority>13</priority>
     </presence>

Élément PIDF <note/> :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               entity='pres:juliet@example.com'>
       <tuple id='balcony'>
         ...
         <contact priority='0.102'>im:juliet@example.com</contact>
       </tuple>
     </presence>

5.1.8	Extensions de présence
Comme défini dans la [RFC3920], une strophe de présence XMPP peut comporter un contenu "extended" dans tout espace de noms pour compléter ou étendre la sémantique de la strophe de présence cœur. À l'exception des informations étendues qualifiées par l'espace de noms 'urn:ietf:params:xml:ns:xmpp-e2e' comme défini dans la [RFC3923], une passerelle XMPP-CPIM DEVRAIT ignorer de telles informations et ne pas les passer à travers la passerelle au receveur désigné. Aucune transposition n'est définie pour de telles informations.

5.1.9	Syntaxe CPIM et PIDF générée par une passerelle
5.1.9.1	En-têtes de message CPIM
CPIM spécifie l'existence d'en-têtes "Message/CPIM" en plus de ceux décrits ci-dessus, mais il n'y a pas d'analogue exact de ces en-têtes dans les spécifications du cœur de XMPP. Cela inclut :
cc : spécifie l'adresse d'une entité qui va recevoir une "copie de courtoisie" des informations de présence (c'est-à-dire, un destinataire non principal)
DateTime : spécifie la date et l'heure à laquelle les informations de présence ont été envoyées.
NS : spécifie l'espace de noms d'une extension de caractéristiques.
Subject : spécifie le sujet ou l'objet de l'objet encapsulé "Message/CPIM".
Require : spécifie des caractéristiques qu'il est obligatoire de reconnaître.

Une passerelle XMPP-CPIM PEUT générer d'elle-même de tels en-têtes sur la base de ses propres informations (par exemple, la date et l'heure à laquelle elle a reçu une strophe de présence d'une entité XMPP) ou sur la base de données codées dans des extensions XMPP non centrales, mais les règles pour ce faire sortent du domaine d'application du présent mémoire.

5.1.9.2	Éléments PIDF
PIDF spécifie l'existence d'éléments XML en plus de ceux décrits ci-dessus, mais il n'y a pas d'analogue exact de ces éléments XML dans les spécifications du cœur de XMPP. Cela inclut :
<contact/> : spécifie une adresse (par exemple, un URI im:, tel:, ou mailto:) à laquelle on peut communiquer avec la présentité  ; une passerelle XMPP-CPIM PEUT inclure cet élément, auquel cas elle DEVRAIT régler sa valeur au <usager@hôte> de l'envoyeur XMPP, précédé du schéma d'URI de messagerie instantanée "im:".
<timestamp/> : spécifie la date et l'heure à laquelle les informations de présence ont été envoyées ; une passerelle XMPP-CPIM PEUT générer d'elle-même cet élément sur la base de ses propres informations (par exemple, la date et l'heure à laquelle elle a reçu la strophe de présence d'une entité XMPP) ou sur la base de données codées dans des extensions XMPP non centrales, mais les règles pour ce faire sortent du domaine d'application du présent mémoire.

5.2	Transposition de syntaxe de présence des spécifications CPIM en XMPP
Ce paragraphe définit la transposition des primitives de syntaxe des objets "Message/CPIM" avec des objets encapsulés "application/pidf+xml" en strophes de présence XMPP.

Note : Une passerelle XMPP-CPIM NE DOIT PAS transposer en strophe de présence XMPP un objet "Message/CPIM" dont l'objet MIME encapsulé a un Content-type autre que "application/pidf+xml" (à l'exception des objets multi-part MIME comme spécifié dans la [RFC3923]).

5.2.1	Adresse 'From'
L'en-tête 'From' d'un objet "Message/CPIM" se transpose en la portion <usager@hôte> de l'attribut 'from' d'une strophe de présence XMPP, et l'attribut 'id' de l'élément fils <tuple/> PIDF se transpose en la portion identifiant de ressource de l'attribut 'from' XMPP. Donc, pour transposer les informations CPIM et PIDF en l'attribut XMPP 'from', la passerelle DOIT retirer le schéma d'URI de messagerie instantanée "im:" du début de l'adresse et DOIT retirer le "Formal-name" CPIM (s'il est fourni) afin de générer la portion <usager@hôte> de l'attribut XMPP 'from', puis ajouter un caractère '/'suivi par la valeur de l'attribut 'id' de l'élément <tuple/> PIDF.

Exemple : Transposition d'adresse From

En-tête CPIM 'From' :
     From: Romeo Montague <im:romeo@example.net>

Attribut XMPP 'from' :
     <presence from='romeo@example.net'>
       ...
     </presence>

Exemple : Transposition d'identifiant de ressource

Attribut XMPP 'from' :
     <presence from='juliet@example.com/balcony'>
       ...
     </presence>

'id' PIDF pour <tuple/> :
     <presence entity='pres:juliet@example.com'>
       <tuple id='balcony'>
         ...
       </tuple>
     </presence>

5.2.2	Adresse 'To'
L'en-tête 'To' d'un objet "Message/CPIM" se transpose en l'attribut 'to' d'une strophe de présence XMPP. Pour transposer l'en-tête CPIM 'To' en l'attribut XMPP 'to', la passerelle DOIT retirer le schéma d'URI de messagerie instantanée "im:" du début de l'adresse et DOIT retirer le "Formal-name" CPIM (s'il est fourni). Si la passerelle a connaissance de l'identifiant de ressource utilisé par l'entité XMPP, la passerelle PEUT ajouter l'identifiant de ressource à l'adresse.

Exemple : Transposition d'adresse To

En-tête CPIM 'To' :
     To: Juliet Capulet <im:juliet@example.com>

Attribut XMPP 'to' :
     <presence to='juliet@example.com/balcony'>
       ...
     </presence>

5.2.3	Copie de courtoisie
La spécification du cœur de XMPP ne comporte pas de syntaxe pour spécifier une "copie de courtoisie" (destinataire non principal) pour une strophe de présence. Donc, si une passerelle XMPP-CPIM reçoit un objet "Message/CPIM" avec un objet PIDF encapsulé qui contient un en-tête 'cc', elle NE DEVRAIT PAS passer l'information contenue dans cet en-tête au receveur XMPP.

5.2.4	En-tête Date-heure
La spécification du cœur de XMPP ne comporte pas de syntaxe pour spécifier la date et l'heure à laquelle a été envoyée une strophe de présence. Donc, si une passerelle XMPP-CPIM reçoit un objet "Message/CPIM" avec un objet PIDF encapsulé qui contient un en-tête 'DateTime', elle NE DEVRAIT PAS passer l'information contenue dans cet en-tête au receveur XMPP.

5.2.5	En-tête Sujet
Une strophe de présence XMPP ne contient pas d'information qui puisse être transposée en l'en-tête 'Subject' d'un objet "Message/CPIM". Donc, si une passerelle XMPP-CPIM reçoit un objet "Message/CPIM" avec un objet PIDF encapsulé qui contient un en-tête 'Subject', elle NE DEVRAIT PAS passer l'information contenue dans cet en-tête au receveur XMPP.

5.2.6	Extensions d'en-tête
Les objets "Message/CPIM" PEUVENT inclure un en-tête 'NS' facultatif pour spécifier l'espace de noms d'une extension de caractéristique. Une passerelle XMPP-CPIM NE DOIT PAS passer de tels en-têtes au receveur XMPP, et aucune transposition n'est définie pour ces en-têtes.

5.2.7	En-tête 'Require'
Les objets "Message/CPIM" PEUVENT inclure un en-tête 'Require' facultatif pour spécifier des caractéristique qu'il est obligatoire de reconnaître. Une passerelle XMPP-CPIM NE DOIT PAS passer de tels en-têtes au receveur XMPP, et aucune transposition n'est définie pour ces en-têtes.

5.2.8	Identifiant de contenu MIME
XMPP ne comporte pas d'élément ou attribut qui capture un identifiant unique au monde comme défini pour l'en-tête MIME Content-ID spécifié dans la [RFC2045]. Si une passerelle XMPP-CPIM reçoit un objet MIME qui inclut un Content-ID, elle PEUT fournir le Content-ID comme valeur de l'attribut 'id' de la strophe de présence, mais ceci est FACULTATIF.

Exemple : Content-ID pour objet encapsulé

En-tête MIME :
     Content-ID: <123456789@example.net>

Attribut XMPP 'id' (FACULTATIF) :
     <presence id='123456789@example.net'>
       ...
     </presence>

5.2.9	États de base de présence
Les types de base d'état de présence définis dans PIDF sont OPEN (ouvert) et CLOSED (fermé). L'état de présence PIDF de base de OPEN se transpose en strophe de présence XMPP qui ne possède pas d'attribut 'type' (indiquant par défaut la disponibilité). L'état de présence PIDF de base de CLOSED se transpose en strophe de présence XMPP qui possède un attribut 'type' d'une valeur de "unavailable" (indisponible).

Exemple : État de présence OPEN

Présence PIDF de base (OPEN) :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               entity='pres:romeo@example.net'>
       <tuple id='orchard'>
         <status>
           <basic>open</basic>
         </status>
       </tuple>
     </presence>

Présence XMPP disponible :
     <presence from='romeo@example.net/orchard'/>

Exemple : État de présence CLOSED

Présence PIDF de base (CLOSED) :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               entity='pres:romeo@example.net'>
       <tuple id='orchard'>
         <status>
           <basic>closed</basic>
         </status>
       </tuple>
     </presence>

Présence XMPP indisponible :
     <presence from='romeo@example.net/orchard'
               type='unavailable'/>

5.2.10	Informations d'état étendues
Les documents PIDF peuvent comporter un contenu <status/> étendu. Au moment de la rédaction du présent document, il n'y a pas d'état étendu prédéfini qui puisse être transposé en des valeurs définies d'élément XMPP <show/> ('away', 'chat', 'dnd', et 'xa'). Une fois que les extensions PIDF pour de tels états étendus seront définies au sein du processus des normes de l'Internet, une passerelle DEVRAIT transposer ces extensions ; cependant, une telle transposition sort du domaine d'application du présent mémoire car les extensions PIDF pertinentes ne sont pas encore définies.

Exemple : Informations d'état étendues (provisoires)

Informations PIDF de présence étendues :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               xmlns:im='urn:ietf:params:xml:ns:pidf:im'
               entity='pres:romeo@example.net'>
       <tuple id='orchard'>
         <status>
           <basic>open</basic>           <im:im>busy</im:im>
         </status>
       </tuple>
     </presence>

Élément XMPP <show/> :
     <presence from='romeo@example.net/orchard'>
       <show>dnd</show>
     </presence>

5.2.11	Élément 'Note'
Un élément PIDF <tuple/> peut contenir un fils <note/> qui fournit une description définie par l'utilisateur, en langage naturel, de l'état détaillé de disponibilité de l'envoyeur. L'élément PIDF <note/> se transpose en l'élément XMPP <status/>.

Exemple : Élément Note

Élément PIDF <note/> :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               xmlns:im='urn:ietf:params:xml:ns:pidf:im'
               entity='pres:romeo@example.net'>
       <tuple id='orchard'>
         <status>
           <basic>open</basic>
           <im:im>busy</im:im>
         </status>
         <note>Wooing Juliet</note>
       </tuple>
     </presence>

Élément XMPP <status/> :
     <presence from='romeo@example.net/orchard'>
       <show>dnd</show>
       <status>Wooing Juliet</status>
     </presence>

Un document PIDF avec zéro tuple PEUT contenir un ou plusieurs éléments <note/> comme enfants directs de l'élément PIDF <presence/>. Il n'y a pas de transposition de ces documents PIDF en strophe de présence XMPP ; une entité sur le côté non XMPP d'une passerelle XMPP-CPIM NE DEVRAIT PAS, si possible, envoyer de tels documents PIDF à un receveur XMPP, et une passerelle XMPP-CPIM NE DOIT PAS transposer de tels documents PIDF à une strophe de présence XMPP (voir au paragraphe 6.3.2 "Ressources zéro).

5.2.12	Élément 'Contact'
Un document PIDF peut contenir un élément <contact/> qui spécifie l'URI d'une adresse à laquelle le principal peut être contacté (par exemple, un URI im:, tel:, ou mailto:). La spécification du cœur de XMPP ne comporte pas de syntaxe pour spécifier l'URI d'une adresse de contact, car l'adresse de contact est implicite dans l'attribut 'from' de la strophe de présence XMPP. Donc, si une passerelle XMPP-CPIM reçoit un objet "Message/CPIM" avec un objet PIDF encapsulé qui contient un élément <contact/>, elle NE DEVRAIT PAS passer les données de caractères XML de l'élément <contact/> au receveur XMPP. (Voir cependant le paragraphe 5.2.15 "Inclusion du document PIDF complet".)

Exemple : Élément PIDF Contact

Élément PIDF <contact/> :
     <?xml version='1.0' encoding='UTF-8'?>
     <presence xmlns='urn:ietf:params:xml:ns:pidf'
               entity='pres:romeo@example.net'>
       <tuple id='orchard'>
         ...
         <contact>im:romeo@example.net</contact>
       </tuple>
     </presence>

Strophe de présence XMPP :
     <presence from='romeo@example.net/orchard'/>

5.2.13	Priorité de présence
L'enfant <contact/> de l'élément PIDF <tuple/> PEUT posséder un attribut 'priority' dont la valeur est un nombre décimal entre zéro et un (avec un maximum de trois décimales). La valeur de cet attribut PEUT se transposer en l'élément fils <priority/> d'une strophe de présence XMPP. Une passerelle XMPP-CPIM NE DOIT PAS transposer les valeurs de priorité PIDF en valeurs négatives de l'élément XMPP <priority/>. Si une passerelle XMPP-CPIM transpose ces valeurs, elle DEVRAIT traiter la priority='0' PIDF comme une <priority>0</priority> XMPP et une priority='1' PIDF comme la <priority>127</priority>, en transposant les valeurs intermédiaires de façon appropriée pour qu'elles soient uniques (par exemple, les priorités PIDF entre 0,001 et 0,007 en priorité XMPP 1, les priorités PIDF entre 0,008 et 0,015 en priorité XMPP 2, et ainsi de suite jusqu'à la transposition des priorités PIDF entre 0,992 et 0,999 en priorité XMPP 126 ; noter que ceci est seulement un exemple, et que la transposition exacte devra être déterminée par la passerelle XMPP-CPIM).

5.2.14	Élément 'Timestamp'
La spécification du cœur de XMPP ne comporte pas de syntaxe pour spécifier la date et l'heure ou l'horodatage de l'envoi de la strophe de présence. Donc, si une passerelle XMPP-CPIM reçoit un objet "Message/CPIM" avec un objet PIDF encapsulé qui contient un élément <timestamp/>, elle NE DEVRAIT PAS passer les données de caractères XML de l'élément <timestamp/> au receveur XMPP.

5.2.15	Inclusion de document PIDF complet
Certain éléments PIDF ne transposent pas la syntaxe de strophe de présence XMPP (par exemple, les données de caractères XML de l'élément <contact/>). Cependant, un client XMPP peut être capable de traiter de telles informations en analysant un document PIDF natif. Pour rendre cela possible, une passerelle XMPP-CPIM PEUT inclure le document PIDF complet comme élément fils de la strophe de présence, comme décrit dans [XMPP-PIDF]. Si un client XMPP ne comprend pas ces données étendues, il DOIT naturellement les ignorer.

6.	Passerelle XMPP-CPIM comme service de présence

La [RFC3859] définit la sémantique d'un service de présence abstrait. Une passerelle XMPP-CPIM PEUT fonctionner comme un tel service de présence, et s'il en est ainsi, une entité XMPP peut utiliser la syntaxe XMPP définie pour interagir avec le service de présence de la passerelle. Comme la [RFC3863] ne spécifie pas la syntaxe pour des opérations sémantiques telles que 'subscribe', la présente section définit seulement les interactions XMPP avec le service de présence offert par une passerelle XMPP-CPIM, et non la traduction d'une telle syntaxe XMPP en PIDF. (Noter que les informations détaillées sur les services de présence XMPP se trouvent dans la [RFC3921] ; autant que possible, une passerelle XMPP-CPIM DEVRAIT mettre en œuvre la syntaxe, la sémantique, et les règles de fonctionnement de serveur qui y sont définies.)

6.1	Demande d'abonnement
Si une entité XMPP veut s'abonner aux informations de présence d'une présentité non XMPP à travers une passerelle XMPP-CPIM, elle DOIT envoyer une strophe de présence de type "subscribe" à la présentité cible. La transposition de syntaxe est la suivante :
o	L'attribut XMPP 'from' (usager@hôte) DOIT être transposé en le champ CPP "paramètre d'observateur" (watcher parameter) (pres:usager@hôte). La passerelle XMPP-CPIM DOIT ajouter le schéma d'URI présence "pres:" devant l'adresse.
o	L'attribut XMPP 'to' (usager@hôte) DOIT être transposé en le champ CPP "paramètre cible" (target parameter) (pres:usager@hôte). La passerelle XMPP-CPIM DOIT ajouter le schéma d'URI présence "pres:" devant l'adresse.
o	Il n'y a pas de XMPP transposition XMPP pour le "paramètre de durée" (duration parameter) CPP, car les abonnements XMPP sont actifs jusqu'à ce qu'ils aient été explicitement "unsubscribed" (désabonnés).
o	L'attribut XMPP 'id' DEVRAIT être transposé en le champ CPP "TransID".

Si la présentité cible approuve la demande d'abonnement (par tout protocole utilisé pour interagir avec la passerelle) la passerelle XMPP-CPIM DOIT retourner une strophe de présence de type "subscribed" à l'entité XMPP et notifier à l'entité XMPP la disponibilité de présence actuelle de la cible. Ensuite, jusqu'à ce que l'abonnement soit annulé, la passerelle DOIT  notifier à l'entité XMPP abonnée chaque fois que les informations de présence de la cible changent.

Si la présentité cible refuse la demande d'abonnement, la passerelle XMPP-CPIM DOIT retourner une strophe de présence de type "unsubscribed" à l'entité XMPP et NE DOIT PAS invoquer l'opération notify.

En plus des cas d'approbation et de refus, une des exceptions suivantes peut se produire :
o	Le paramètre cible (adresse "to" XMPP) ne se réfère pas à une présentité valide ; si cette exception se produit, la passerelle XMPP-CPIM DOIT retourner une erreur de strophe <item-not-found/> (élément non trouvé) à l'entité XMPP.
o	Les règles de contrôle d'accès ne permettent pas à l'entité de s'abonner à la cible ; si cette exception se produit, la passerelle XMPP-CPIM DOIT retourner une erreur de strophe <forbidden/> (interdit) à l'entité XMPP.
o	Il y a un abonnement préexistant ou une opération d'abonnement en cours entre l'entité XMPP et la présentité cible ; si cette exception se produit, la passerelle XMPP-CPIM DEVRAIT retourner une erreur de strophe <conflict/> à l'entité XMPP.

Les services XMPP supposent qu'un abonnement est actif jusqu'à ce qu'il soit explicitement terminé. Cependant, des services non XMPP peuvent mettre en œuvre des abonnements de durée limitée, qui doivent être périodiquement rafraîchis pour répondre à la permanence des abonnements XMPP. Donc, une passerelle XMPP-CPIM peut devoir envoyer de tels rafraîchissements aux entités non XMPP au nom de l'entité XMPP pour que l'abonnement ne se termine pas. La nécessité de tels rafraîchissements dépend du protocole natif mis en œuvre par le service non XMPP à capacité CPIM auquel la passerelle traduit.

6.2	Réception d'une demande d'abonnement
Si une présentité non XMPP veut s'abonner aux informations de présence d'une entité XMPP à travers une passerelle XMPP-CPIM, elle DOIT utiliser le protocole dont elle se sert pour interagir avec la passerelle afin de demander l'abonnement, sous réserve des règles d'accès locales, la passerelle DOIT alors envoyer une strophe de présence de type "subscribe" à l'entité XMPP à partir de l'observateur non XMPP. La transposition de syntaxe est la suivante :
o	Le champ CPP "watcher parameter" (pres:usager@hôte) DOIT être transposé en attribut XMPP 'from' (usager@hôte). La passerelle XMPP-CPIM DOIT retirer le schéma d'URI de présence "pres:" du devant de l'adresse.
o	Le champ CPP "target parameter" (pres:usager@hôte) DOIT être transposé en attribut XMPP 'to' (usager@hôte).La passerelle XMPP-CPIM DOIT retirer le schéma d'URI de présence "pres:" du devant de l'adresse.
o	Il n'y a pas de transposition XMPP pour le champ CPP "duration parameter", car les abonnements XMPP sont actifs jusqu'à ce qu'ils aient été explicitement "désabonnés".
o	Le champ CPP "TransID" DEVRAIT être transposé en attribut XMPP 'id'.

Si l'entité XMPP cible approuve la demande d'abonnement, elle DOIT envoyer une strophe de présence de type "subscribed" à la présentité observatrice. La passerelle XMPP-CPIM DOIT alors notifier à la présentité observatrice la présence disponible actuelle de l'entité XMPP cible. Ensuite, jusqu'à ce que l'abonnement soit annulé, la passerelle DOIT notifier à la présentité observatrice chaque fois que changent les informations de présence de la cible.

Si l'entité XMPP cible refuse la demande d'abonnement, elle DOIT envoyer une strophe de présence de type "unsubscribed" à la présentité observatrice. La passerelle XMPP-CPIM NE DOIT PAS invoquer l'opération notify.

En plus des cas d'approbation et de refus, une des exceptions suivantes PEUT survenir :
o	Le paramètre cible (adresse "to" XMPP) ne se réfère pas à une entité XMPP valide.
o	Les règles de contrôle d'accès ne permettent pas à la présentité observatrice de s'abonner à l'entité XMPP cible.
o	Il y a un abonnement préexistant ou une opération d'abonnement en cours entre la présentité observatrice et l'entité XMPP cible.
Si une de ces exceptions se produit, la passerelle XMPP-CPIM DOIT informer la présentité observatrice de l'échec.

Les services XMPP supposent qu'un abonnement est actif jusqu'à ce qu'il soit explicitement terminé. À l'exception des paramètres de durée de traitement dont la valeur est zéro, les paramètres de durée de traitement vont dépendre étroitement de la mise en œuvre et des exigences de la passerelle XMPP-CPIM. Comme il n'y a pas d'exigence explicite que soit pris en charge le "paramètre de durée" spécifié dans la [RFC2778] ou la [RFC2779], la transposition de paramètre de durée est une question locale qui sort du domaine d'application du présent mémoire. Cependant, une passerelle XMPP-CPIM PEUT garder trace du paramètre de durée si il est reçu d'une entité sur le service non XMPP et retarder l'abonnement jusque après l'arrivée à expiration de ce paramètre de durée.

6.3	Opération Notify
Une passerelle XMPP-CPIM invoque une "opération notify" CCP chaque fois que les informations de présence associées à une entité XMPP ou une présentité CCP changent et qu'il y a des abonnés à ces informations sur l'autre côté de la passerelle. La transposition de syntaxe des informations de syntaxe relatives à une opération notify est définie à la Section 5 "Transposition de syntaxe pour les informations de présence".

6.3.1	Ressources multiples
Sémantiquement, PIDF contient la notion de "tuples" de présence multiples. Normalement, un document PIDF va contenir au moins un tuple mais PEUT contenir plus d'un tuple (ou zéro tuple, comme indiqué au paragraphe suivant). Dans la terminologie de XMPP, chaque tuple va se transposer en informations de présence pour une ressource séparée. Cependant, XMPP n'inclut pas de capacité à envoyer des informations de présence sur plus d'une ressource à la fois, car la ressource qui génère les informations de présence est contenue dans l'adresse 'from' d'une strophe de présence.
Donc, une passerelle XMPP-CPIM qui agit comme service de présence DEVRAIT partager un document PIDF qui contient plusieurs tuples en plusieurs strophes de présence XMPP, et DEVRAIT générer seulement un document PIDF (avec plusieurs tuples) si un utilisateur XMPP a actuellement plusieurs ressources connectées.

Afin de ne pas multiplier au delà de ce qui est nécessaire les strophes XMPP, une passerelle XMPP-CPIM ne DEVRAIT générer de strophes de présence XMPP que si les informations de présence contenues dans un tuplet PIDF communiquent un changement dans l'état de disponibilité de l'appareil ou application associé à cet identifiant de tuplet.

Pour se conformer à la recommandation PIDF de fournir des informations sur plusieurs "ressources" dans plusieurs tuplets plutôt que dans plusieurs documents PIDF, une passerelle XMPP-CPIM DEVRAIT inclure les informations sur toutes les ressources d'un utilisateur XMPP dans un document PIDF (avec un tuplet pour chaque ressource) même si l'état de disponibilité d'une seule ressource a changé.

6.3.2	Ressources zéro 
Un document PIDF peut contenir zéro tuplet. Par exemple :

Document  PIDF avec zéro tuplet :

     <presence entity='pres:juliet@example.com'
               xmlns='urn:ietf:params:xml:ns:pidf'/>

Parce que (1) l'attribut 'entity' d'un élément PIDF <presence/> se transpose en la portion <usager@hôte> d'une adresse XMPP et que (2) l'attribut 'id' d'un élément <tuple/> PIDF se transpose en la portion identifiant de ressource d'une adresse XMPP, un document PIDF qui contient zéro tuplet va fournir des informations de présence sur <usager@hôte> plutôt que sur <usager@hôte/ressource> lorsque il est transposé en XMPP. Bien que la notion de notifications de présence sur un simple usager plutôt que sur une des ressources de l'usager ne veuille pas dire grand chose dans le contexte de XMPP, une passerelle XMPP-CPIM DEVRAIT transposer un document PIDF avec zéro tuplet en une strophe de présence XMPP dont l'adresse 'from' est le <usager@hôte> de l'entité non XMPP. Cependant, une passerelle XMPP-CPIM NE DOIT PAS générer un document PIDF avec zéro <tuple/> fils lorsque elle reçoit une strophe de présence d'une entité XMPP (c'est-à-dire, tout les documents PIDF communiqués par la passerelle à un service non XMPP DOIVENT contenir au moins un élément <tuple/>).

6.4	Désabonnement
Si une entité XMPP veut se désabonner de la présence d'une présentité non XMPP à travers une passerelle XMPP-CPIM, elle DOIT envoyer une strophe de présence de type "unsubscribe" à la présentité cible. La transposition de syntaxe est la suivante :
o	L'attribut XMPP 'from' (usager@hôte) DOIT être transposé en le champ CPP "watcher parameter" (pres:usager@hôte). La passerelle XMPP-CPIM DOIT ajouter le schéma d'URI de présence "pres:" devant l'adresse.
o	L'attribut XMPP 'to' (usager@hôte) DOIT être transposé en le champ CPP "target parameter" (pres:usager@hôte). La passerelle XMPP-CPIM DOIT ajouter le schéma d'URI de présence "pres:" devant l'adresse.
o	Le "paramètre de durée"  COO DOIT être réglé à zéro.
o	L'attribut XMPP 'id' DEVRAIT être transposé en le champ CPP "TransID".

Si le paramètre cible (adresse "to" XMPP) ne se réfère pas à une présentité valide, la passerelle XMPP-CPIM DOIT retourner une erreur de strophe <item-not-found/> à l'entité XMPP.

À réception de la strophe de présence de type "unsubscribe" de l'entité XMPP, la passerelle XMPP-CPIM NE DOIT PAS envoyer d'autres notifications de présence à l'entité XMPP.

6.5	Annulation d'un abonnement
Si une entité XMPP veut annuler l'abonnement d'une présentité non XMPP à la présence de l'entité à travers une passerelle XMPP-CPIM, elle DOIT envoyer une strophe de présence de type "unsubscribed" à la présentité cible. La transposition de syntaxe est la suivante :
o	L'attribut XMPP 'from' (usager@hôte) DOIT être transposé en le champ CPP "paramètre d'observateur" (pres:usager@hôte). La passerelle XMPP-CPIM DOIT ajouter le schéma d'URI de présence "pres:" devant l'adresse.
o	L'attribut XMPP 'to' (usager@hôte) DOIT être transposé en le champ CPP "paramètre cible" (pres:user@host). La passerelle XMPP-CPIM DOIT ajouter le schéma d'URI de présence "pres:" devant l'adresse.
o	Le "paramètre de durée" CPP DOIT être réglé à zéro.
o	L'attribut XMPP 'id' DEVRAIT être transposé en le champ CPP "TransID".

À réception de la strophe de présence de type "unsubscribed" de l'entité XMPP, la passerelle XMPP-CPIM NE DOIT PAS envoyer d'autres notifications de présence à la présentité observatrice.

7.	Considérations sur la sécurité

Des considérations détaillées sur la sécurité pour les protocoles de messagerie instantanée et de présence sont données dans la [RFC2779], des paragraphes 5.1 à 5.4.

Le présent document spécifie des méthodes pour échanger des informations de messagerie instantanée et de présence à travers une passerelle qui met en œuvre les [RFC3860] et [RFC3859]. Une telle passerelle DOIT être conforme aux exigences minimales de sécurité des protocoles de messagerie instantanée et de présence avec lesquels elle fait l'interface. L'introduction de passerelles dans le modèle de sécurité de la messagerie instantanée et présence dans la RFC 2779 introduit aussi de nouveaux risques. En particulier, les propriétés de sécurité de bout en bout (en particulier la confidentialité et l'intégrité) entre les agents d'utilisateur de messagerie instantanée et de présence qui s'interfacent à travers une passerelle XMPP-CPIM ne peuvent être fournies que si des formats communs sont pris en charge ; ces formats sont spécifiés dans la [RFC3923].

8.	Références
8.1	Références normatives
[RFC0020]	V. Cerf, "Format ASCII pour les échanges sur les réseaux", octobre 1969. (STD80) 

[RFC2045]	N. Freed et N. Borenstein, "Extensions de messagerie Internet multi-objets (MIME) Partie 1 : Format des corps de message Internet", novembre 1996. (D. S., MàJ par 2184, 2231, 5335.)

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

[RFC2718]	L. Masinter, H. Alvestrand, D. Zigmond et R. Petke, "Lignes directrices pour les nouveaux schémas d'URL", novembre  1999. (Obsolète, voir RFC7595 BCP35 Information)

[RFC2778]	M. Day, J. Rosenberg et H. Sugano, "Modèle pour Presence et la messagerie instantanée", février 2000.

[RFC2779]	M. Day et autres, "Exigences des protocoles Messagerie instantanée / Presence", février 2000. (Information)

[RFC3454]	P. Hoffman et M. Blanchet, "Préparation de chaînes internationalisées ("stringprep")", décembre  2002. (P.S.)

[RFC3629]	F. Yergeau, "UTF-8, un format de transformation de la norme ISO 10646", STD 63, novembre  2003.

[RFC3859]	J. Peterson, "Profil commun pour les services de présence (CPP)", août 2004. (P.S.)

[RFC3860]	J. Peterson, "Profil commun pour la messagerie instantanée (CPIM)", août 2004. (P.S.)

[RFC3862]	G. Klyne, D. Atkins, "Profil commun pour la messagerie instantanée (CPIM) : format de message", août 2004. (P.S.)

[RFC3863]	H. Sugano et autres, "Format des données d'information de présence (PIDF)", août 2004.

[RFC3920]	P. Saint-Andre, éd., "Protocole extensible de messagerie et de présence (XMPP) : éléments centraux", octobre  2004. (P.S.)

[RFC3921]	P. Saint-Andre, éd., "Protocole extensible de messagerie et de présence (XMPP) : messagerie instantanée et présence", octobre 2004. (P.S.)

[RFC3923]	P. Saint-Andre, "Signature et chiffrement d'objet de bout en bout pour le protocole extensible de messagerie et de présence (XMPP)", octobre 2004. (P.S.)

8.2	Références pour information
[RFC2046]	N. Freed et N. Borenstein, "Extensions de messagerie Internet multi-objets (MIME). Partie 2 : Types de support", novembre 1996. (D. S., MàJ par 2646, 3798, 5147, 6657.)

[RFC2822]	P. Resnick, "Format de message Internet", avril 2001. (Remplace la RFC0822, STD 11, Remplacée par RFC5322)

[XMPP-PIDF]	Saint-Andre, P., "Transporting Presence Information Data/Format (PIDF) over the Extensible Messaging and Presence Protocol (XMPP)", Travail en cours, février 2004.

Adresse de l'auteur

Peter Saint-Andre (editor)
Jabber Software Foundation

mél : stpeter@jabber.org 

Déclaration complète de droits de reproduction

Copyright (C) The Internet Society (2004).

Le présent document est soumis aux droits, licences et restrictions contenus dans le BCP 78, et à www.rfc-editor.org, et sauf pour ce qui est mentionné ci-après, les auteurs conservent tous leurs droits.

Le présent document et les informations contenues sont fournis 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.

Propriété intellectuelle
L’IETF ne prend pas position sur la validité et la portée de tout droit de propriété intellectuelle ou autres droits qui pourraient être revendiqués au titre de la mise en œuvre ou l’utilisation de la technologie décrite dans le présent document ou sur la mesure dans laquelle toute licence sur de tels droits pourrait être ou n’être pas disponible ; pas plus qu’elle ne prétend avoir accompli aucun effort pour identifier de tels droits. Les informations sur les procédures de l’ISOC au sujet des droits dans les documents de l’ISOC figurent dans les BCP  78 et BCP 79.

Des copies des dépôts d’IPR faites au secrétariat de l’IETF et toutes assurances de disponibilité de licences, ou le résultat de tentatives faites pour obtenir une licence ou permission générale d’utilisation de tels droits de propriété par ceux qui mettent en œuvre ou utilisent la présente spécification peuvent être obtenues sur le répertoire en ligne des IPR de l’IETF à http://www.ietf.org/ipr .

L’IETF invite toute partie intéressée à porter son attention sur tous copyrights, licences ou applications de licence, ou autres droits de propriété qui pourraient couvrir les technologies qui peuvent être nécessaires pour mettre en œuvre la présente norme. Prière d’adresser les informations à l’IETF à ietf- ipr@ietf.org .

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