= Protocole Relay de WeeChat :author: Sébastien Helleu :email: flashcode@flashtux.org :lang: fr :toc2: :toclevels: 3 :max-width: 100% 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 [