A vintage Apple Macintosh SE personal computer with a CRT display and a beige, boxy design.

Après avoir terminé les fonctionnalités principales de Willow CMS, j'envisageais de lancer un second projet parallèle. Je bidouillais sur mon Mac SE et me demandais à quoi ressemblerait le développement logiciel dessus. Il y a environ 25 ans, j'ai lancé CodeWarror pour la dernière fois sur un Power Macintosh 7500 et j'ai commencé à jouer au C/C++, et environ 20 ans depuis ma dernière étude universitaire. Après avoir découvert le travail remarquable de Joshua Stein avec le C sur System 6, j'ai décidé de me lancer et de développer une application de chat peer-to-peer. Je commencerai par la faire fonctionner sur Ubuntu, puis sur macOS moderne et, espérons-le, dans un avenir proche, sur System 6, 7, 8 et 9.

Pourquoi

Ce projet me permettra évidemment de découvrir la programmation de sockets en C, ainsi que les communications TCP et UDP sur le réseau, dont j'ai de vagues souvenirs et même quelques carnets de notes d'université. Il m'apprendrait également à envoyer des données structurées sur le réseau entre clients, ce qui me permettrait de me concentrer sur la façon de les faire fonctionner sur différentes architectures. Plus important encore, il me permettrait de transférer des fichiers entre mes systèmes Mac SE/PowerMac G4/macOS sans avoir à configurer Apple Talk, etc. En théorie, je pourrais simplement communiquer entre un Mac moderne et le Mac SE beaucoup plus facilement. Je doute que je puisse mettre en place un cryptage SSL moderne entre tous les clients, mais nous verrons bien.

Quoi qu'il en soit, le code de ce projet est sur GitHub et je l'ai appelé CSend pour l'instant. Pour l'exécuter sur Mac SE et les ordinateurs modernes, un nom plus proche de Retour vers le futur serait peut-être de mise. JiggaWhattsApp, peut-être ?

J'en suis actuellement à la version 0.0.3 et j'ai gradué mes efforts jusqu'à présent, passant d'une simple configuration client-serveur à une version toujours basée sur un terminal, mais avec prise en charge de la découverte automatique et de la messagerie. Je prends le temps de revoir le code à chaque itération, de relire mes deux anciens livres et d'utiliser Claude 3.7 pour me remettre au travail.

Voici quelques informations sur ce que la version 0.0.3 propose actuellement (et ne propose pas)

Fonctionnalités de base

  1. Messagerie peer-to-peer sans serveur central
  2. Découverte automatique des pairs sur le réseau local
  3. Messagerie directe entre pairs
  4. Diffusion de messages à tous les pairs connus

Fonctionnalités du réseau

  1. TCP pour une livraison fiable des messages (port 8080)
  2. UDP pour les diffusions de découverte de pairs (port 8081)
  3. Détection automatique d'IP pour les interfaces réseau locales
  4. Gestion du délai d'attente des pairs (30 secondes)

Interface utilisateur

Interface de ligne de commande avec des commandes simples :

  • /list - Afficher les pairs actifs
  • /send - Envoyer un message direct
  • /diffuser /diffuser
  • /quit - Quitter l'application en douceur

Protocole de message

Protocole de message textuel au format : TYPE|EXPÉDITEUR|CONTENU

Types de messages :

  1. DISCOVERY - Diffusez pour trouver des pairs
  2. RÉPONSE_DÉCOUVERTERÉPONSE_DÉCOUVERTE
  3. TEXTE - Messages texte réguliers
  4. QUITTER - Notification lors de la sortie du réseau

Mise en œuvre technique

  1. Architecture multithread :
  2. Fil d'écoute pour les messages entrants
  3. Fil de découverte pour la détection des pairs
  4. Fil de saisie utilisateur pour le traitement des commandes
  5. Gestion des pairs thread-safe à l'aide de mutex
  6. Gestion du signal pour une terminaison en douceur
  7. Gestion des délais d'expiration pour les opérations réseau

Sécurité et limitations

  1. Identification du nom d'utilisateur de base
  2. Pas de cryptage des messages
  3. Aucun mécanisme d'authentification
  4. Limité au réseau local par défaut
  5. Maximum de 10 pairs simultanés

Mots clés

Programming C Code RetroComputing MacOS P2P Multithreading Networking