Parlons XMPP - épisode 2 - le cœur et les extensions

goffi 9 years ago technique planet-libre parlons_xmpp jabber-xmpp Libre

Maintenant qu'on sait de quoi on parle, voyons à quoi ressemble le cœur du protocole.
 
 
À la base XMPP c'est 3 (anciennement 2) RFCs: la 6120, la 6121, et la 6122 (il y en a d'autres, mais ces 3 là sont les principales). Elles expliquent tout le cœur comme l'envoi de messages, les informations de présence, les statuts, etc.
 
Sans trop entrer dans les détails qui vont concerner surtout les développeurs, on peut rapidement expliquer que XMPP se base sur 3 types d'éléments, ou « stanzas »:
 
  • <presence/> pour indiquer principalement… notre information de présence (parfois on y accroche aussi d'autres choses comme des infos sur notre avatar ou nos capacités, mais ne nous égarons pas). La présence est relayée par votre serveur à toutes les personnes à qui vous avez donné l'accès (voir plus bas).
      On peut associer un état et un message à notre présence. L'état peut être un des suivants (les noms peuvent changer selon votre client)
    • disponible (par défaut): vous êtes en ligne normalement
    • away (absent): vous êtes absent pour une courte période
    • chat (discussion): vous avez particulièrement envie de parler
    • dnd (do not disturb – ne pas déranger): vous êtes occupé (souvent appelé « busy » aussi dans les clients)
    • xa (eXtended Away – durablement absent): vous êtes absent pour une longue période
      Le message de statut permet spécifier en langage clair votre disponibilité (par exemple « je regarde un film, ne pas déranger »), même si en pratique c'est utilisé pour tout type de message (beaucoup de gens mettent une citation par exemple).
  • <message/> un envoi de message de type j'envoie et j'oublie. Il existe 5 types de messages :
    • chat (discussion): le plus connu, celui qui sert à la messagerie instantanée simple
    • error (erreur): celui-là est normalement géré par les logiciels directement, il se traduit souvent par un fenêtre vous indiquant dans votre client que quelque chose s'est mal passé
    • groupchat (discussion de groupe): comme « chat », mais pour les discussions à plusieurs. En pratique la différence ne concerne que les développeurs et cela devrait être transparent dans le client
    • headline (manchette): un message important, une annonce. Normalement, ces messages ne sont pas gardés hors ligne, aussi si vous n'êtes pas connecté au moment du message, vous ne devriez pas l'avoir. Ces messages ne sont pas faits pour y répondre. Un exemple typique est une annonce de maintenance du serveur imminente
    • normal : un type méconnu et pourtant intéressant. Il s'agit d'un message ayant généralement un sujet, et en dehors d'une conversation instantanée. Oui oui, exactement comme un courriel ! C'est plus ou moins son équivalent XMPP.
    À cela s'ajoute la gestion des « thread » (fils de discussion), mais nous en parlerons une autre fois.
  • <IQ/> (Info/Query – information/requête): utilisé pour tout ce qui est de type question/réponse (il est obligatoire de répondre à une requête <IQ/>, au pire par une erreur). Son utilisation concerne plutôt les développeurs, c'est la base de la plupart des fonctionnalités que vous utilisez : cet élément sert à dire « je veux connaître ou modifier telle information »
 
Je ne veux pas trop entrer dans les détails techniques, mais il me semble essentiel de connaître les différents types de messages et de présences pour bien comprendre son client.
 
À noter un point excellent avec XMPP, et largement sous exploité : XMPP sait nativement gérer les différentes langues, grâce à son héritage de XML (xml:lang). Autrement dit, vous pouvez spécifier un message normal ou de statut à la fois en français, en allemand et en slovaque. C'est un atout majeur que nous comptons bien exploiter dans Libervia.
 
Passons maintenant à une autre partie essentielle : la liste de contacts.
 
Dans le monde XMPP, on l'appelle « roster » (qui se traduit par « liste » ou « tableau de service »). À chaque contact que vous y ajoutez, vous pouvez associer 0, 1 ou plusieurs groupes (« famille », « amis », etc), un nom (donné par l'utilisateur et non le contact), ainsi qu'une information d'abonnement (« subscription »).
 
L'abonnement permet de savoir si vous avez autorisé votre contact à avoir votre information de présence, et si le contact vous a autorisé à voir la sienne. C'est pour cela que quand quelqu'un vous ajoute dans sa liste de contacts, votre client, par exemple Gajim, vous demande si vous l'autorisez à connaître votre information de présence. Il est tout à fait possible d'avoir autorisé un contact à vous voir sans qu'il ne vous autorise à le voir (et inversement évidemment), voir qu'aucun des deux ne soit autorisé à voir la présence de l'autre (mais je pense que la plupart des clients suppriment le contact du roster dans ce cas).
 
Les groupes sont associés aux contacts, et non l'inverse (ce n'est pas une liste  liste de groupes qui contiennent des contacts), c'est la raison pour laquelle il est impossible d'avoir un groupe sans contact associé (c.-à-d. vide).Là encore les groupes sont à mon sens sous-exploités dans le monde XMPP, nous y reviendrons.
 
 
Voilà pour aujourd'hui. J'ai finalement préféré couper la partie extensions pour le prochain article, pour éviter de trop charger.
 

Goffi 9 years ago

Cette partie est peut-être un poil trop technique, c'est difficile de placer le curseur. Je m'adresse à un publi averti, donc j'essaye d'expliquer comme ça se passe en dessous mais ça n'est pas obligatoire, n'hésitez pas à me dire ce qui est trop difficile pour que j'adapte les prochains articles. Par exemple parler de RFC et de <IQ/>  n'est vraiment pas indispensable.


author website

Ginko 9 years ago

Ok pour moi. Très intéressant et très clair. Merci !

Impatient d'avoir la suite. A la limite ce qu'il me faudrait en plus c'est un article sur comment convaincre ses contacts (en particulier les moins "techniques") d'utiliser XMPP ah ah.

Philippe 9 years ago

Je suis d'accord avec Ginko. XMPP ca a l'air bien mais ca va etre dur de convaincre tout le monde de changer encore une fois de messagerie.

Goffi 9 years ago

Un des gros intérêts de passer sur XMPP, c'est qu'après on peut utiliser des logiciels différents avec le même compte. Movim, Gajim ou Libervia vont fonctionner tous les 3 sans créer un nouveau compte derrière.

Donc c'est peut-être un nouveau compte à régler, mais beaucoup plus universel que la plupart des réseaux existant.


author website

okso 9 years ago

Chouette article ! J'ai hâte de lire la suite car je m'interroge sur la pertinence de XMPP face à tous les nouveaux "protocoles sociaux".

Stephanou 9 years ago

Comme le premier article, celui est très clair et accessible sans problème au novice.

J'espère que la question du message dit "normal" sera développée. Si vraiment XMPP offre aussi une fonction de type email, c'est vraiment excitant !

Goffi 9 years ago

okso: c'est souvent dans l'autre sens qu'il faut se poser la question, la pertinence de développer quelque chose en partant d'une feuille blanche, alors qu'il y a déjà un standard libre et éprouvé en place. Enfin je ne suis pas contre l'expérimentation non plus.

Stephanou: Tu peux déjà regardé ce vieux billet que j'avais écrit: http://www.goffi.org/post/2011/01/1...


author website

Sangfroid 9 years ago

Merci pour ces articles, c'est tout à fait compréhensible, tout en restant un peu technique. Nickel, hâte d'avoir la suite.
XMPP, c'est la vie


author website

Charpy 9 years ago

Pour suivre mon commetaire fait au premier article, je constate que finalement c'est surtout une "simple" messagerie, avec gestion de la dispo des personnes. Donc pour l'instant peu d'ajout par rapport à IRC, qui doit êtr une bonne dizaine d'année plus ancien, mais j'attend de voir ce que réservent les extensions!

Bonne continuation pour cette série!

Goffi 9 years ago

Charpy: oui, c'est dans les extensions qu'il y a tout ce qui est autre que la messagerie (et désolé ton commentaire n'apparaît que maintenant, je ne l'avais pas vu il était passé en spam, même chose pour Sangfroid)


author website