Saucisse Royale delthas Statut : Protocole Standard 3 nov. 2016 Protocole pour lier IRDille et Skype : SkyDille 1 SO6RFC1 Contexte Une partie de la communauté Saucisse Royale utilise IRDille, tandis qu'une autre préfère communiquer via un groupe de chat Skype. Il convient de relier ces deux médium de communication par le biais d'un bot IRDille/Skype. La communication entre Skype et le bot étant déjà assurée, il serait intéressant d'intégrer directement le bot au sein du serveur IRDille afin de simuler la présence des utilisateurs, plutôt que de faire un simple bot traditionnel type « Bot IRC ». Le bot IRDille/Skype permet de connaître les utilisateurs connectés et appartenant au groupe de chat Skype, de recevoir des messages, et d'en envoyer. Le protocole va traduire ces différentes possibilités. Table des matières 1. Rappels de notation 2. Protocole SkyDille 1 2.1. Généralités 2.2. Types de messages 2.3. Exemple d'echange 3. Recommandations 1. Rappels de notation o X + Y signifie X puis Y accolés (sans information entre les deux). o uintX signifie entier non signé codé sur X bits. o utf8 signifie chaîne de caractères encodée avec l'encodage UTF-8, précédee de sa longueur représentée par un uint16 : uint16+chaîne. o l{X,Y} signifie liste de valeurs de type Y, dont la longueur est indiquée par une valeur de type X : X + Y + Y + Y + ... + Y. o S signifie serveur, C signifie client, dans une situation faisant intervenir un serveur et un client. 2. Protocole SkyDille 1 2.1. Généralités Toutes les communications se feront par un stream TCP chiffré par TLS, où Saucisse Royale jouera le role de serveur du stream, et le bot IRDille/Skype jouera le role du client. Le certificat TLS utilisé pour le stream DOIT être celui utilisé pour le site et IRDille. La communication sera divisée en unités de sens appelées « messages », composées d'un en-tête, et d'un corps. Toute donnée envoyée DOIT appartenir à un message. L'en-tête est composé d'un unique octet codant un uint8 indiquant le type de message. Le corps du message dépend du type du message. 2.2. Types de messages +---------------+---------+------------------------------+-------+ | Type | En-tête | Corps | S/C ? | +---------------+---------+------------------------------+-------+ | Saluer | 0 | utf8 pseudo + utf8 passe | C | | | | | | | Quitter | 1 | utf8 raison | S/C | | | | | | | Message | 2 | utf8 envoyeur + utf8 message | S/C | | | | | | | PrivMessage | 3 | utf8 envoyeur + utf8 message | S/C | | | | + utf8 destinataire | | | | | | | | Dutilisateurs | 4 | Aucun | S/C | | | | | | | Utilisateurs | 5 | l{uint16,utf8} utilisateurs | S/C | | | | | | | Déconnexion | 6 | utf8 utilisateur | S/C | | | | | | | Connexion | 7 | utf8 utilisateur | S/C | | | | | | | Ping | 8 | Aucun | S/C | | | | | | | Pong | 9 | Aucun | S/C | | | | | | | CNom | 10 | utf8 ancien + utf8 nouveau | S/C | +---------------+---------+------------------------------+-------+ Table des types de messages o Saluer : Le client est connecté et prêt. Il indique par pseudo et passe les identifiant et mot de passe propres au compte associé a ce client SkyDille. o Quitter : L'émetteur demande la fermeture de la connexion, en indiquant la raison de la fermeture par raison. À la réception de ce message, fermer le stream et n'envoyer aucun message. o Message : L'émetteur envoie l'envoyeur du message (son *pseudo* pour Skype, son *nickname* pour IRDille), puis le message qu'il a envoyé, en format « plaintext », i.e. sans aucun formattage, ni aucune balise. Il s'agit d'un message à envoyer sur le groupe de chat. o PrivMessage : L'émetteur envoie l'envoyeur du message, puis le message qu'il a envoyé, en format « plaintext », i.e. sans aucun formattage, ni aucune balise, puis le destinataire. Il s'agit d'un message privé. o Dutilisateurs : L'émetteur demande au destinataire de lui envoyer un message Utilisateurs. o Utilisateurs : L'émetteur envoie la liste des utilisateurs connectés sur son service, identifiés de la même maniere que pour Message. o Déconnexion : L'émetteur indique qu'un utilisateur sur son service s'est déconnecté, en l'identifiant comme pour Message. o Connexion : L'émetteur indique qu'un utilisateur sur son service s'est connecté, en l'identifiant comme pour Message. o Ping : L'émetteur demande au destinataire de lui envoyer un message Pong afin de s'assurer qu'il est encore là. o Pong : L'émetteur indique au destinataire qu'il est encore là. o CNom : L'émetteur indique au destinataire qu'un utilisateur de son service a changé de nom (son *pseudo* pour Skype, son *nickname* pour IRDille). 2.3. Exemple d'echange o (Le client se connecte au serveur) o (Établissement du stream TCP) o C : Saluer o C : Demande utilisateurs o S : Utilisateurs o S : Dutilisateurs o C : Utilisateurs o (Un message est envoyé sur Skype) o C : Message o (Un message est envoyé sur IRDille) o S : Message o (...) o (Un utilisateur se déconnecte de IRDille) o S : Déconnexion o (...) o (Le serveur doit etre fermé pour maintenance) o S : Quitter o (Le client ferme le stream TCP) o (Fermeture du stream TCP) 3. Recommandations o Le port choisi pour le stream TCP DEVRAIT être le port 6698. o Le serveur IRDille DEVRAIT simuler la presence des utilisateurs de Skype comme des utilisateurs normaux d'IRDille grâce aux informations fournies par le bot, et envoyer des messages par le biais de ces utilisateurs. o Le bot DEVRAIT pouvoir permettre d'afficher la liste des utilisateurs présents sur IRDille, sur Skype, par une commande simple telle que ?co. o Le serveur et le bot ne DEVRAIENT PAS fermer le stream TCP sans envoyer de message Quitter avant.