= Protocole Relay de WeeChat :author: Sébastien Helleu :email: flashcode@flashtux.org :lang: fr :toc: left :toclevels: 3 :toc-title: Table des matières :sectnums: :docinfo1: [[introduction]] == Introduction Ce document est une spécification du protocole Relay de WeeChat : le protocole utilisé pour relayer les données de WeeChat aux clients, qui sont surtout des interfaces distantes. [[terminology]] === Terminologie Les termes suivants sont utilisés dans ce document : * _relay_ : il s'agit de l'extension "relay" de WeeChat, qui agit comme un "serveur" et autorise les _clients_ à se connecter * _client_ : il s'agit d'un autre logiciel, connecté au _relay_ via une connexion réseau ; dans la plupart des cas, ce _client_ est une interface distante. [[network_diagram]] === Diagramme réseau Les _clients_ sont connectés au _relay_ comme dans le diagramme ci-dessous : .... ┌──────────┐ Station de travail ┌────────┐ ┌───┤ client 1 │ (Linux, Windows, │ irc │◄──┐ ╔═══════════╤═══════╗ │ └──────────┘ BSD, macOS ...) └────────┘ └──╢ │ ║◄───┘ ┌──────────┐ ...... ║ WeeChat │ Relay ║◄───────┤ client 2 │ Appareil mobile ┌────────┐ ┌──╢ │ ║◄───┐ └──────────┘ (Android, iPhone ...) │ jabber │◄──┘ ╚═══════════╧═══════╝ │ ...... └────────┘ │ ┌──────────┐ ...... └───┤ client N │ Autres appareils └──────────┘ └────────────┘ └───────────────────┘╘══════╛└────────────────────────────────┘ serveurs interface ncurses protocole interfaces distantes relay .... [NOTE] Tous les clients ici utilisent le protocole _weechat_ dans l'extension _relay_. L'extension _relay_ autorise aussi des clients IRC, et _relay_ agit alors comme un _proxy IRC_ (non décrit dans ce document). [[protocol_generalities]] == Généralités sur le protocole * Les connexions du _client_ vers _relay_ sont faites avec des sockets TCP sur l'IP/port utilisé par _relay_ pour écouter les nouvelles connexions. * Le nombre de clients est limité par l'option _relay.network.max_clients_. * Chaque _client_ est indépendant des autres clients. * Les messages du _client_ vers _relay_ sont appelés _commandes_, elles sont envoyées sous forme de texte (une chaîne de caractères). * Les messages de _relay_ vers le _client_ sont appelés des _messages_, ils sont envoyés sous forme de données binaires. [[commands]] == Commandes (client → relay) Les commandes ont le format : ---- (id) commande paramètres\n ---- Les champs sont : * _id_ : identifiant du message (facultatif) qui sera envoyée dans la réponse de _relay_ ; elle doit être entre parenthèses, et ne doit pas commencer par un underscore (les identifiants commençant par un underscore sont réservés pour les messages _évènements_ de WeeChat) * _commande_ : une commande (voir le tableau ci-dessous) * _paramètres_ : paramètres facultatifs pour la commande (plusieurs paramètres sont séparés par des espaces). Liste des commandes disponibles (détail dans les chapitres suivants) : [width="100%",cols="1m,8",options="header"] |=== | Commande | Description | handshake | Poignée de main : préparer l'authentification du client et définir des options, avant la commande _init_. | init | S'authentifier avec _relay_. | hdata | Demander un _hdata_. | info | Demander une _info_. | infolist | Demander une _infolist_. | nicklist | Demander une _nicklist_ (liste de pseudos). | input | Envoyer des données à un tampon (texte ou commande). | completion | Demander la complétion d'une chaîne. | sync | Synchroniser un/des tampon(s) : recevoir les mises à jour pour le(s) tampon(s). | desync | Désynchroniser un/des tampon(s) : stopper les mises à jour pour le(s) tampon(s). | quit | Se déconnecter de _relay_. |=== [[command_handshake]] === handshake _WeeChat ≥ 2.9, mis à jour dans la version 3.5._ Effectuer une poignée de main entre le client et WeeChat : cela est obligatoire dans la plupart des cas pour connaître les paramètres de la session et préparer l'authentification avec la commande _init_. Une seule poignée de main est autorisée avant la commande _init_. Syntaxe : ---- (id) handshake [