mbt
Options de ligne de commande et orchestration du traitement.
struct mbt_torrent *torrent = mbt_torrent_init();
mbt_be_parse_torrent_file(path, torrent);
struct mbt_net_context *ctx =
mbt_net_context_init(torrent, ip, port);
mbt_net_contact_tracker(ctx);
mbt_leech(ctx);
Socle modulaire d’un client BitTorrent : décodage bencode,
métadonnées .torrent, pièces de fichiers et couche réseau.
MyBitTorrent est un projet académique consacré au protocole BitTorrent.
Le programme devait lire un fichier .torrent, contacter son tracker,
échanger avec plusieurs pairs et reconstituer les fichiers téléchargés.
Le code conservé suit l’architecture imposée en quatre bibliothèques partagées. Il contient une implémentation substantielle du bencode, de la lecture et de la création des métadonnées, ainsi que de la gestion des pièces et de leur empreinte SHA-1.
La partie réseau est restée à l’état de prototype : les structures, le contact du tracker
et une boucle epoll sont présents, mais le protocole pair-à-pair n’est pas achevé.
Meson déclare un exécutable et quatre bibliothèques partagées. Le schéma se lit de haut en bas, depuis la commande utilisateur jusqu’aux utilitaires communs.
mbtOptions de ligne de commande et orchestration du traitement.
mbtnetContexte, tracker, description des pairs et prototype de téléchargement.
mbtfileDécoupage en pièces et blocs, contrôle SHA-1 et écriture sur disque.
mbtbeArbre bencode, parsing, encodage et manipulation des fichiers .torrent.
mbtutilsChaînes dynamiques et vues mémoire utilisées par les autres modules.
Dépendances réelles : mbtnet s’appuie sur les trois autres
bibliothèques ; mbtfile utilise mbtbe, qui utilise à son tour
mbtutils et OpenSSL.
Le module reconnaît les entiers, chaînes, listes et dictionnaires, puis les représente sous forme d’arbre alloué dynamiquement.
Lecture d’un fichier .torrent, accès à ses champs, affichage lisible
et génération de métadonnées pour un fichier ou une arborescence.
Les structures de mbtfile décrivent fichiers, pièces et blocs.
Une pièce assemblée peut être contrôlée avec son empreinte SHA-1.
Le dépôt contient les contextes réseau, le début du dialogue avec un tracker,
des structures de pairs et une boucle événementielle basée sur epoll.
mbt -P fichier.torrent
Parse puis affiche l’arbre bencode d’un fichier de métadonnées.
mbt -m chemin
Construit les métadonnées et calcule les empreintes des pièces avec SHA-1.
mbt [-i ip] [-p port] fichier
Prépare le contexte réseau ; ce parcours reste incomplet dans le rendu conservé.
L’option -v est reconnue, mais son comportement est encore un placeholder.
Les options d’adresse et de port sont analysées par le programme principal.
Les quatre bibliothèques, leurs en-têtes, leurs sources et leurs cibles Meson sont présents. Le bencode et la gestion des pièces constituent les parties les plus abouties.
Il reste notamment à initialiser et enregistrer les sockets, réaliser le handshake, encoder les messages BitTorrent et valider un téléchargement complet.
L’initialisation Meson fonctionne sur l’environnement actuel. La compilation stricte avec GCC 15 s’arrête toutefois sur plusieurs avertissements traités comme des erreurs ; aucun jeu de tests du projet n’est conservé dans le dépôt.
Ce projet met en pratique la conception d’API en C, la gestion explicite de la mémoire, la représentation de données récursives, l’intégrité par hachage et la séparation entre métadonnées, stockage et transport réseau.
Le rendu montre aussi la difficulté propre à un protocole distribué : disposer des structures et d’une boucle asynchrone ne suffit pas sans machine d’état, encodage exact des messages et stratégie robuste de connexion aux pairs.