Crate vincenzo

Source
Expand description

A library for working with the BitTorrent protocol V1.

This is the library created for Vincenzo, a BitTorrent client. It uses this library to create both the daemon and ui binaries.

This crate contains building blocks for developing software using this protocol in a high-level manner.

A few ideas that benefit from a distributed and decentralized protocol:

  • A program that synchronizes files between multiple peers.
  • A fully encrypted chat client with files.

§Example

This is how you can download torrents using just the daemon, we simply run the daemon and send messages to it.

   use vincenzo::daemon::Daemon;
   use vincenzo::daemon::DaemonMsg;
   use vincenzo::magnet::Magnet;
   use tokio::spawn;
   use tokio::sync::oneshot;

   #[tokio::main]
   async fn main() {
       let download_dir = "/home/gabriel/Downloads".to_string();

       let mut daemon = Daemon::new(download_dir);
       let tx = daemon.ctx.tx.clone();

       spawn(async move {
           daemon.run().await.unwrap();
       });

       let magnet = Magnet::new("magnet:?xt=urn:btih:ab6ad7ff24b5ed3a61352a1f1a7811a8c3cc6dde&dn=archlinux-2023.09.01-x86_64.iso").unwrap();

       // identifier of the torrent
       let info_hash = magnet.parse_xt();

       tx.send(DaemonMsg::NewTorrent(magnet)).await.unwrap();

       // get information about the torrent download
       let (otx, orx) = oneshot::channel();

       tx.send(DaemonMsg::RequestTorrentState(info_hash, otx)).await.unwrap();
       let torrent_state = orx.await.unwrap();

       // TorrentState {
       //     name: "torrent name",
       //     download_rate: 999999,
       //     ...
       // }
   }

Modules§

avg
Exponential moving average accumulator.
bitfield
Wrapper types around Bitvec.
config
Config file
counter
daemon
A daemon that runs on the background and handles everything that is not the UI.
daemon_wire
Framed messages sent to/from Daemon
disk
Disk is responsible for file I/O of all Torrents.
error
extension
Extensions of the standard BitTorrent protocol
magnet
Handle magnet link
metainfo
Metainfo is a .torrent file with information about the Torrent. From the magnet link, we get the Metainfo from other peers.
peer
A remote peer in the network that downloads and uploads data
tcp_wire
Documentation of the “TCP Wire” protocol between Peers in the network. Peers will follow this protocol to exchange information about torrents.
torrent
Torrent that is spawned by the Daemon
tracker
A tracker is a server that manages peers and stats of multiple torrents.
utils
Utility functions