irssi-xmpp : un nouveau module Jabber pour irssi

Posté par  (site web personnel) . Modéré par Nÿco.
Étiquettes :
0
9
août
2007
XMPP
Il existe de nombreuses façons de se connecter au réseau Jabber avec irssi. Parmi celles-ci on retrouve : bitlbee (une passerelle de messagerie instantanée qui permet de se connecter depuis n'importe quel client IRC), irssi-jabber (un module irssi pour se connecter au réseau Jabber), gc (un script perl pour irssi permettant de se connecter aux salons de discussions de Jabber), PSYC et sûrement d'autres manières que je n'ai pas encore découvertes...

Jusqu'à présent j'utilisais bitlbee mais je (NdAMR : ErrTu, l'auteur du journal d'origine) voulais quelque chose dans irssi qui ne se connecte qu'à Jabber, qui prend en charge tout ou une grande partie du protocole XMPP (et de ses extensions incontournables) et qui le fasse bien. Hélas la plupart des autres solutions qui m'intéressaient ne sont ni complètes ni maintenues.

J'ai donc décidé de créer un nouveau module irssi pour se connecter au réseau Jabber en se basant sur le même principe que le module déjà existant irssi-jabber. Et après une petite semaine de développement, j'ai l'honneur de vous présenter irssi-xmpp !

Le module s'appuie sur la bibliothèque Loudmouth, écrite en C avec Glib, utilisée par Gossip, Inkscape et Telepathy, qui se veut légère et facile à utiliser pour programmer toutes sortes de choses dans les limites du protocole XMPP. Et je dois dire qu'elle fait plutôt bien son boulot.

La version actuelle du module irssi-xmpp et par la même occasion la première version publique est la 0.10 (NdAMR : et dans la foulée du journal, la 0.11). Au programme, la base de la base :
  • Version 0.10 :
    • la connexion aux serveurs Jabber (encore heureux) ;
    • la discussion avec les contacts Jabber ;
    • une liste des contacts avec un traçage complet des ressources et un tri des contacts (par état puis par pseudo/jid) ;
    • la possibilité de changer son état ;
    • l'envoi aux clients qui le demande de nos informations sur notre client (nom du client, version et système d'exploitation -> pas tout à fait le cas, je viens de m'apercevoir qu'"OpenBSD" est défini comme système d'exploitation en dur dans le module).

  • Version 0.11 :
    • L'autocomplétion des JID et aussi des ressources. La complétion des ressources n'est pas encore complète, pour l'avoir faut taper un truc du genre : /q foo@bar.bar/«TAB» (où «TAB» est l'appui sur la touche tabulation bien sûr) ;
    • La possibilité de n'afficher que les contacts connectés avec : /SET roster_show_offline OFF ;
    • La possibilité de ne pas envoyer les informations sur la version du client avec : /SET xmpp_send_version OFF
      À l'occasion, le nom du système d'exploitation renvoyé est bien celui que vous utilisez. ;
    • Le roster trie les contacts correctement.

Merci à ErrTu pour son journal. Je développe activement le module donc vous devriez voir arriver dans les semaines à venir les fonctions suivantes :
  • l'ajout/suppression de contacts ;
  • l'utilisation complète de l'infrastructure de thème d'irssi pour l'affichage des messages (ce qui n'est pas entièrement le cas en ce moment) et utiliser un niveau de message particulier pour tout ce qui concerne l'état des contacts (ainsi on pourra afficher les changements d'état et la liste des contacts dans une fenêtre dédiée) ;
  • la possibilité de configurer le module en utilisant l'infrastructure de configuration d'irssi (globalement on pourra : afficher ou non les contacts déconnectés, afficher ou non les changements d'états et les connexions/déconnexions, envoyer ou non les informations concernant notre client,...) ;
  • l'affichage des informations des contacts ;
  • la possibilité de modifier ses informations personnelles ;
  • la gestion des groupes et des pseudonymes dans la liste des contacts ;
  • les connexions chiffrées avec SSL ;
  • la prise en charge des proxys ;
  • la possibilité d'utiliser les MUC (les salons de discussions) ;
  • l'exploration des services des serveurs Jabber ;
  • l'inscription à des services ;
  • - ...

Je vous invite donc à aller régulièrement jeter un coup d'oeil à l'adresse suivante pour les mises à jour : http://cybione.org/src/irssi-xmpp/

Pour installer la bestiole, il vous faut irssi et loudmouth d'installés. Il vous faut aussi les sources d'irssi (enfin surtout les fichiers d'entêtes). Je ne touche pas aux autotools et à ce genre de choses ; la procédure d'installation est assez simple :
$ export IRSSI_INCLUDE=/le/chemin/vers/les/sources/d'/irssi
$ make
et enfin pour installer le module dans votre ~/.irssi/modules :
$ make user-install

Si tout s'est bien passé, vous pouvez lancer irssi et taper la commande suivante pour charger le module :
/load xmpp
Ensuite pour se connecter :
/server -xmppnet network server port password username
Par exemple :
/server -xmppnet jabber im.cybione.org 5222 motdepasse errtu

Et avec un peu de chance, vous voilà connecté !

Enfin vous pouvez afficher la liste de vos contacts :
/roster
Parler avec quelqu'un :
/q /
Par exemple :
/q errtu@im.cybione.org/Home
Et changer d'état :
/away indisponible

La commande away est un peu plus puissante que d'habitude car elle vous permet de changer la petite icône sur un client graphique, par exemple :
  • Pour se mettre "Absent" :
    /away message
  • Pour se mettre en "Veut discuter" :
    /away chat message
  • Pour se mettre en "Ne pas déranger" (occupé) :
    /away dnd message
  • Pour se mettre en "Non disponible" :
    /away xa message
  • Pour redevenir disponible :
    /away message

Dans tous les cas, sauf le premier, le message est facultatif.

Pour le moment, c'est rudimentaire mais presque suffisant pour une utilisation de base.

Au passage, le module a été programmé et testé sous OpenBSD amd64.

Je vous invite à laisser vos impressions/commentaires/insultes/rapports de bugs/patchs/demandes de fonctionnalités soit directement sur ce journal soit par Jabber : errtu@im.cybione.org (ah ben non, qu'est-ce que je raconte, je ne peux pas encore ajouter des nouveaux contacts donc je ne peux pas encore vous parler sur Jabber).

NdAMR : À la question « pourquoi ne pas avoir contribué à irssi-jabber ? » ErrTu répond :

Ça fait un petit moment que je voulais faire évoluer la prise en charge de jabber dans irssi et comme j'ai eu récemment un peu plus de temps et de motivation à y consacrer, j'ai décidé de mettre les mains dans le cambouis.

Seulement ça me paraissait impossible de contribuer à irssi-jabber pensant ne pas avoir les compétences pour. Donc j'ai commencé à bricoler dans mon coin pour comprendre comment fonctionnent les modules irssi et le protocole XMPP. Sans m'en rendre compte j'avais obtenu une bonne base et quelques heures de boulot supplémentaires ont suffit pour faire voir le jour à irssi-xmpp.

À mon niveau actuel de compréhension je pourrais contribuer sans trop de problème à irssi-jabber mais comme irssi-xmpp en est pratiquement au même stade de fonctionnalités, l'intérêt n'y est plus.

Maintenant techniquement, les deux modules sont assez différent puisque irssi-jabber intègre son propre parser XML et utilise les sockets d'irssi alors qu'irssi-xmpp se base entièrement sur loudmouth. Personnellement je trouve irssi-xmpp plus facile à maintenir car il n'intègre pas toute la brique bas niveau de communication avec le protocole XMPP.

Aller plus loin

  • # irssi-xmpp 0.12

    Posté par  . Évalué à 8.

    uh uh uh une dépêche pour présenter le module :)

    Voici venir la version 0.12 : http://cybione.org/src/irssi-xmpp/irssi-xmpp-0.12.tar.gz

    Au programme :
    - Le support de la connexion SSL : pour en profiter, il faut rajouter "-ssl" à la commande "/connect", où "use_ssl = "yes";" dans votre section "servers" de votre fichier de conf. (pour le moment, si la connection n'abouti pas, la connection se retrouve bloquée, alors ne vous trompez pas !)
    - La complétion des JID et des ressources est maintenant complète
    - Si on ouvre une fenêtre de discussion avec "/query jid" sans spécifier la ressource, cela ouvrira la fenêtre avec la ressource la plus élevée du jid (s'il y en a de connecté biensûr)
    - Des petites choses de modifiées dans la liste des contacts (on affiche le niveau de subscription s'il n'est pas à "both", on n'affiche plus les groupes vides, on peut changer le nom du groupe par défaut)
    - Et enfin l'ajout de la variable de configuration "xmpp_default_away_mode" que l'on peut mettre à "away", "xa", "dnd" ou "chat" pour choisir le mode de disponibilité que l'on veut lorsque l'on ne le spécifie pas avec la commande /away. Par défaut elle est fixée à "away". (par exemple : "/set xmpp_default_away_mode xa", "/away plus là" équivaut à "/away xa plus là")

    À venir probablement pour la prochaine version : la gestion des contacts et des groupes.
  • # irssi-xmpp 0.13

    Posté par  . Évalué à 3.

    Bon, je continue dans mon monologue pour vous annoncer irssi-xmpp 0.13. Cette version intègre la gestion des contacts donc à partir de maintenant le module supporte toutes les fonctionnalités de bases pour l'utiliser en tant que client jabber.

    Donc au programme :
    - La gestion des contacts et des autorisations
    - L'option de conf "roster_add_send_subscribe" pour envoyer automatiquement une requête subscribe lorsque l'on ajoute un contact au roster.
    - L'option de conf "xmpp_priority" pour spécifier la priorité de la connexion. Il faudra se reconnecter après avoir modifié cette variable.
    - La commande /CONNECT vérifie correctement ses paramètres.
    - Et enfin une petite modification dans les Makefiles pour que le module compile chez ceux qui n'ont pas les commandes "lorder" et "tsort".

    Le fichier README contient une documentation beaucoup plus complète où pratiquement tout est décrit.

    La commandes /ROSTER se voit dotée de 2 jeux de commandes. Le premier pour gérer les contacts dans la liste et l'autre pour gérer le autorisation.

    Ainsi pour gérer les contacts, on a pour ajouter un contact :
    /ROSTER ADD «jid»

    Pour supprimer un contact (et toutes ses autorisations) :
    /ROSTER REMOVE «jid»

    Pour renommer un contact :
    /ROSTER NAME «jid» «name»

    À savoir que même si on peut spécifier un nom, il n'apparaîtra que dans la liste des contacts et si l'on souhaite faire un /QUERY sur un contact, il faut toujours passer par le JID et non par le nom.
    Enfin pour changer un contact de groupe :
    /ROSTER GROUP «jid» «group»


    Au niveau des autorisations, on peut demander à voir la présence d'un contact avec :
    /ROSTER SUBSCRIBE «jid»

    Si on souhaite ne plus voir sa présence, il suffit de faire :
    /ROSTER UNSUBSCRIBE «jid»

    Lorsque l'on reçoit une demande d'autorisation, pour qu'un contact puisse voir votre présence, on peut accepter cette demande avec :
    /ROSTER ACCEPT «jid»

    Et enfin si on ne veut plus qu'un contact puisse voir votre présence ;
    /ROSTER DENY «jid»


    C'en est tout pour cette version 0.13. Pour la prochaine version, on devrait voir arriver la sauvegarde des sessions pour pouvoir automatiquement se reconnecter lorsqu'une connexion est rompue, la possibilité de voir les informations concernant un contact (globalement sa vCard) et quelques améliorations par ci par là. Ainsi la prochaine grosse étape sera le support des MUC.
    • [^] # Re: irssi-xmpp 0.13

      Posté par  . Évalué à 2.

      J'ai oublié de le mentionner mais pour les utilisateurs d'openSUSE, des paquets[1] sont (ou seront) disponibles sur le dépôt Guru[2].

      [1] http://linux01.gwdg.de/~pbleser/rpm-navigation.php?cat=/Netw(...)
      [2] http://opensuse-community.org/Guru
    • [^] # Re: irssi-xmpp 0.13

      Posté par  . Évalué à 4.

      en tant qu'utilisateur d'irssi à qui il manquait un client Jabber pouvant s'utiliser dans screen je te dis un grand merci
      • [^] # Re: irssi-xmpp 0.13

        Posté par  . Évalué à 3.

        Ça fait plaisir d'avoir des encouragements :)

        J'ai mis en place un page un peu plus clair pour résumer le projet :
        http://cybione.org/src/irssi-xmpp/

        Le module est maintenant en partie hébergé chez gna! qui fournit un dépôt CVS, un bug tracker, un task manager et une mailing-list. Tous les détails sont sur la page citée plus haut.
        • [^] # Re: irssi-xmpp 0.13

          Posté par  (site web personnel) . Évalué à 5.

          Si je peux fournir un petit conseil, renverse l'ordre des identifiant et mot de passe dans ta commande de connexion...

          La logique est plutôt Identifiant puis Mot de passe et pas l'inverse ;)

          Je comprend ton aversion pour les autotools et leur doc inexistante (ou pas exploitable je dirais après l'avoir trouvé).

          Essaye tout de même de voir si cmake ne serait pas adapté a ton cas.
          • [^] # Re: irssi-xmpp 0.13

            Posté par  . Évalué à 2.

            Au niveau de la commande de connexion, l'ordre des paramètres est tel qu'il est pour des raisons "historiques" ; elle est en fait calquée sur celle qui existe actuellement dans irssi pour se connecter à un serveur irc. Il faudra que je me penche sur la question pour refaire une commande de connexion adaptée à jabber. Par exemple spécifier le serveur en plus de celui qui est dans le JID est une information redondante qu'il n'est pas forcément nécessaire de spécifier plusieurs fois. De plus le port devrait être une information non obligatoire puisqu'il est courant d'utiliser le port par défaut.
            Quelque chose comme me l'avait suggéré David Ammouial serait beaucoup plus approprié :
            /connect [-ssl] -xmppnet <network> <jid> <password> [<servfer>[:<port>]]
            Enfin la commande /connect est bien ancrée dans irssi, donc ça me demandera pas mal de boulot de recherche pour savoir comment je peux la modifier en profondeur. Mais c'est bon, ça ne me décourage pas, au contraire :)
            À la limite, on pourrait imaginer une nouvelle commande autre que /connect ou /server spécialement dédiée à la connexion à des serveurs jabber, comme /xmppconnect, ...

            Au niveau d'autotools, je n'ai pas pris le temps et je ne le prendrais sûrement pas pour faire un beau configure. La méthode actuelle avec un simple Makefile marche pas mal (en tout cas moi ça me convient). Mais je suis ouvert à toute personne souhaitant adapter à un quelconque système de compilation du moment que ça reste relativement simple et que ça ne rajoute pas de nouvelles dépendances non nécessaires.
  • # Paquet Debian

    Posté par  (site web personnel) . Évalué à 1.

    Pour info, j'ai fait un paquet Debian pour irssi-xmpp. Le paquet s'appelle irssi-plugin-xmpp, et il est présent dans Debian unstable.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.