= 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: 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. [[introduction]] == Introduction [[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="80%",cols="^3m,14",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). | 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._ 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_. La poignée de main peut être effectuée plusieurs fois avant la commande _init_, même si cela est rarement nécessaire. Syntaxe : ---- handshake [