Moxl
Moxl est la librairie XMPP officielle du projet Movim, elle remplace Jaxl à partir de la version 0.6 (incluse).
Historique
Moxl (pour Movim XMPP Librairie) a été développée pendant l'été 2012 par Jaussoin Timothée suite à la décision de l'équipe de développement de remplacer la librairie Jaxl qui commençais à montrer de sérieuses limites pour le bon développement du projet Movim.
Fonctionnalités
Son mode de fonctionnement diffère fondamentalement de Jaxl. En effet Moxl est conçue pour ne dialoguer avec le serveur XMPP cible qu'en HTTP(s). Elle ne contient donc pas de mode synchrone ou de système pouvant la faire fonctionner sous forme de démon.
Sessions
Pour garder la session ouverte entre les requêtes Moxl est conçue pour sauvegarder à chaque requête l'ensemble des variables de session en base de donnée. Pour son intégration au sein de Movim elle se base donc sur la classe Session elle même basée sur Modl (https://launchpad.net/modl).
Il est bon de noter que l'ensemble de paramètres de session (hash de session, ris, sid, id, utilisateur, serveur cible…) tiennent dans un simple tableau PHP.
Namespaces
Contrairement à de très nombreuses librairies XMPP, Moxl préfère traiter les messages entrant et sortant au travers des namespaces XMPP plutôt que via les extensions (XEP).
Fonctionnalités présentes
Authentification
Pour l'authentification Moxl peut actuellement se connecter en
- PLAIN : authentification en clair, sans chiffrement du mot de passe
- DIGEST-MD5 : authentification sécurisée basée sur l'échange de secrets entre le serveur et le client
- CRAM-MD5
Ressources XMPP
Le système d'authentification a aussi été adapté pour pouvoir se connecter aisément sur des serveurs imposants une ressource (tel que Gmail ou Facebook). Une ressource XMPP est une chaine se plaçant à la fin du JID (Jabber ID en autres mots l'adresse de l'utilisateur sur le réseaux XMPP) et permettant de spécifier depuis quel client les messages envoyés au serveur sont émis, ce qui permet à une personne d'être connectée depuis plusieurs clients à la fois. Par exemple si on envois un message sur :
- user@serveur.com/android l'utilisateur le recevra sur son mobile Android
- user@serveur.com/home l'utilisateur le recevra sur son ordinateur à la maison
La ressource par défaut de Moxl est moxl (les adresses seront donc écrites de cette façon : utilisateur@serveur.tld/moxl) mais certains serveurs imposent une ressource particulière à la connexion, les serveurs XMPP de Gmail par exemple imposent un hash de ce type :
- user@serveur.com/ACE45E
Moxl s'adapte donc aux directives du serveur et permet ainsi de se connecter sans encombres sur un large panel de serveurs.
Implémentation du protocole XMPP
Voir la page Protocol Implementations.
Fonctionnement interne
Structure de la librairie
Voici la structure des dossiers qui composent la librairie Moxl :
Moxl/
|-- stanza/
| |-- base/
| `-- microblog/
|
`-- xec
|-- action/
`-- payload/
Stanza
Ce dossier contient un ensemble de fonctions permettant de construire le XML nécessaire à la création de Stanza (requêtes XMPP) valides. Ces fonctions sont regroupées arbitrairement par fichiers de même thème (Presence.php, Message.php…).
Ces fonction retournent donc une chaine de caractère contenant le XML en question qui sera ensuite envoyé au requèteur.
XEC
XEC (pour XMPP Event Controller) est un sous module de Moxl. Il permet de gérer intelligemment les requêtes passées au travers de Moxl. Voir la page dédiée à XEC.