// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu // // SPDX-License-Identifier: GPL-3.0-or-later = Protocole Relay de WeeChat :author: Sébastien Helleu :email: flashcode@flashtux.org :lang: fr include::includes/attributes-fr.adoc[] [[introduction]] == Introduction Ce document est une spécification du protocole relay _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 : include::includes/relay.fr.adoc[tag=diagram] [NOTE] Tous les clients ici utilisent le protocole _weechat_ dans l'extension _relay_. L'extension _relay_ autorise aussi les protocoles _api_ et _irc_ (non décrits 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 les versions 3.5, 4.0.0._ 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 [