= 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, Mac OS X ...) └────────┘ └──╢ │ ║◄───┘ ┌──────────┐ ...... ║ 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 | init | Initialiser la connexion 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_init]] === init Initialiser la connexion avec _relay_. Il doit s'agir de la première commande envoyée à _relay_. Si elle n'est pas envoyée, _relay_ coupera la connexion à la première commande reçue, sans avertissement. Syntaxe : ---- init [