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

goffi 25/06/2015, 14:34 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 25/06/2015, 16:44

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 25/06/2015, 18:11

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 26/06/2015, 16:18

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 26/06/2015, 17:25

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 27/06/2015, 00:31

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 27/06/2015, 06:43

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 28/06/2015, 15:12

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 01/07/2015, 16:08

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 01/07/2015, 16:09

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 01/07/2015, 16:13

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

Parlons XMPP - épisode 1 - les bases

goffi 24/06/2015, 15:01 technique planet-libre parlons_xmpp jabber-xmpp Libre

Salut à Vous,
 
Bon, comme je trouve vraiment dommage que XMPP soit mal connu ou compris, j'ai décidé de commencer une série d'articles pour vous expliquer ce que c'est.
 
Ces articles sont destinés à un public averti, mais pas forcément de développeurs, et j'espère qu'il vous aidera à comprendre les intérêts de ce protocole et à mieux utiliser vos logiciels.
 
Étant développeur du projet Salut à Toi, je donnerai probablement souvent des exemples avec.
 
Donc commençons par les bases.
 
XMPP c'est quoi ? C'est un protocole de messagerie et de présence standard, et extensible (XMPP signifie « eXtensible Message and Presence Protocol », soit « protocole de présence et messagerie extensible »), c'est à dire qu'il est documenté et utilisé comme une référence (ici validée par un organisme de standardisation : l'IETF). Ceci permet à tous les logiciels qui l'utilisent de parler la même langue, et d'être interopérables. Il s'agit d'un protocole libre, c'est à dire que vous pouvez obtenir la documentation et l'utiliser gratuitement, sans restriction légale ou technique, et que vous pouvez l'améliorer ou le modifier (mais si vous déviez et que vous ne proposez pas vos modifications, vous risquez de perdre la compatibilité avec les autres logiciels).
 
XMPP est décentralisé et fédéré, c'est à dire que vous pouvez avoir des serveurs un peu partout, ils pourront (s'ils ne l'interdisent pas explicitement dans leur configuration) communiquer entre eux.
 
C'est un protocole populaire, de nombreux logiciels permettent de l'utiliser : en serveurs on peut citer Prosody, Ejabberd, Open Fire, Tigase, Mongoose.im, Metronome, etc. En client: Gajim, Poezio, Pidgin, Psi, Swift, Jappix, Movim, et bien sûr Libervia/Salut à Toi (je vous laisse chercher les sites officiels vous-même). Une liste plus complète (serveurs, clients et bibliothèques) est disponible ici: https://xmpp.org/xmpp-software/.
 
Si vous ne voulez pas installer un serveur chez vous, de nombreux serveurs publics sont disponibles: en France on peut citer ceux de l'APINC (jabber.fr, im.apinc.org, etc), de La quadrature de Net, etc. Une petite liste (la page n'est pas à jour, n'hésitez pas à contribuer !) est disponible ici en français, sinon vous pouvez regarder sur https://xmpp.net/directory.php ou http://www.jabberes.org/servers/ (oui il y en a beaucoup !). Mais je vous recommande très fortement d'installer votre propre serveur ou de vous approcher d'une association locale avec qui vous pouvez communiquer facilement : d'une part si vous installez vous-même, ça vous permet de mieux maîtriser vos données, et d'autre part si vous voulez une fonctionnalité en particulier, il vaut mieux pouvoir demander facilement aux administrateurs une mise à jour.
 
Bon maintenant qu'on sait tout ça, essayons de créer un compte.
 
Une fois un serveur installé ou un serveur public choisi, vous pouvez créer un compte. Vous aurez alors une adresse, un « jid » (pour Jabber ID, « Jabber » est l'ancien nom du procole, ce nom appartient désormais à une société privée, il est juste gardé ici pour des raisons historiques).
 
Cette adresse est de la forme nom_local@domaine.tld/ressource, ou en forme canonique (ce qu'on appelle le « bare jid ») nom_local@domaine.ext. Par exemple la mienne est goffi@jabber.fr . Celà ne vous rappelle rien ? Et oui ça ressemble beaucoup aux adresses de courrier électronique !
 
Mais alors c'est quoi la ressource ? La ressource est liée au logiciel client que vous utilisez pour vous connecter : XMPP a été pensé dès l'origine pour permettre à plusieurs clients de se connecter en même temps (il y a 10 ans, peu de protocoles de messagerie le permettaient, et se reconnecter ailleurs signifiait souvent la déconnexion du premier client), et cette ressource permet de les identifier. Autrement dit, vous n'avez une ressource que quand vous êtes connectés, et elle est différente pour chaque client que vous utilisez : si je me connecte avec Libervia, Gajim et Movim, j'aurais 3 ressources différentes.
 
Il y a eu plusieurs écoles pour nommer la ressource, parfois on s'en servait pour indiquer le lieu de connexion (« maison », « bureau »), les clients mettaient souvent leur nom par défaut (« gajim », « psi »). Aujourd'hui, il est admis qu'il vaut mieux avoir une ressource non prédictible, car sinon quelqu'un peut savoir si vous êtes connectés ou pas (même si vous ne souhaitez pas que ça se sache) en faisant une requête à cette ressource. Il vaut donc mieux laisser le serveur choisir la ressource pour nous.
 
Enfin, votre ressource est associée à une priorité: elle permet de déterminer, si plusieurs ressources sont connectées, laquelle va recevoir le message. Mais nous y reviendrons plus tard.
 
Dans le prochain épisode je vous parlerai des extensions et de la découverte de fonctionnalités.
 
Voilà, dites-moi si vous êtes intéressés par cette série, si cela vous semble trop technique, ou si vous avez des remarques ou des corrections à faire. Je publie la série en même temps sur DLFP, et le tout est sous licence CC By-SA, donc n'hésitez pas à réutiliser, diffuser ou modifier !

e-Jim 24/06/2015, 20:56

Intéressant comme série. Surtout sachant que ça vient de quelqu'un qui maîtrise le sujet sur le bout des doigts.
Je n'ai pas appris grand-chose cette fois-ci, mais j'attends impatiemment la suite...

godu 25/06/2015, 01:28

Ce sujet m'intéresse énormément, mais j'ai jamais eu l'occasion de développer avec. J'espère que la suite gagnera en profondeur.
Belle initiative.


author website

Stephanou 25/06/2015, 08:18

C'est très interessant, à titre personnel j'ai commencé à m'interesser à Jabber il y a peu en faisant des recherches sur d'éventuels subsituts à l'email.

Goffi 25/06/2015, 12:52

Oui sur les premières parties j'explique les bases, ceux qui connaissent ne vont pas apprendre grand chose. N'hésitez pas à demander si y'a des sujets en particulier qui vous intéressent.

Stephanou: je pense que XMPP a tout ce qu'il faut pour remplacer l'e-mail, j'avais d'ailleurs écrit un billet à ce sujet il y a longtemps: http://www.goffi.org/post/2011/01/1...


author website

raleur 25/06/2015, 13:59

Très bon article de présentation, c'est juste dommage de devoir lire ça sur un bloc de 474px de large ...
(je sais que c'est pas la faute de l'auteur, mais Dotclear ...)

Philippe 25/06/2015, 14:30

J'ai toujours voulu en savoir un peu plus sur XMPP sans jamais prendre le temps de lire (trop de chose a faire)

Je vais suivre cette serie en esperant comprendre de quoi il s'agit. Merci d'avance

Goffi 25/06/2015, 15:11

raleur: (j'en suis un aussi t'inquiuètes ;)) au pire tu as le flux RSS, ou j'ai mis une version sur DLFP ==> http://linuxfr.org/users/goffi/jour... Je pourrais changer le thème de dotclear, mais là je vais bientôt passer mon blog sur Libervia, donc ça vaut pas le coup de passer du temps dessus.


author website

Pazns 25/06/2015, 23:10

Très intéressant !
J'ai hâte de lire la suite.

Charpy 27/06/2015, 23:02

Pareil, très intéressé! Parce que je n'ai jamais capté exactement ce qui est possible de faire avec.

Je maitrise bien IRC, par contre. Que peut-on faire en plus / en moins avec XMPP ?

On pourrait avoir une capture d'écran pour voir de quoi ca a l'air?

Oui, j'en demande beaucoup :x

Goffi 28/06/2015, 15:14

Charpy: je vais faire un article sur les discussions de groupe (à la IRC) pour expliquer les différence, je pense l'épisode 4 ou 5.

Pour les captures, tu peux chercher des images sur les noms de clients que j'ai cité, ou regarder le notre: http://salut-a-toi.org/screenshots....


author website