Simple, robust, BitTorrent's Mainline DHT implementation.
This library is focused on being the best and simplest Rust client for Mainline, especially focused on reliable and fast time-to-first-response.
It should work as a routing / storing node as well, but if you want to run a reliable node to support the network, you might be better off running libtorrent for now.
Check the Examples.
Running as a client, means you can store and query for values on the DHT, but not accept any incoming requests.
use mainline::Dht;
let dht = Dht::client(); // or Dht::default();
Supported BEPs:
- BEP0005 DHT Protocol
- BEP0042 DHT Security extension
- BEP0043 Read-only DHT Nodes
- BEP0044 Storing arbitrary data in the DHT
Running as a server is the same as a client, but you also respond to incoming requests and serve as a routing and storing node, supporting the general routing of the DHT, and contributing to the storage capacity of the DHT.
use mainline::Dht;
let dht = Dht::server(); // or Dht::builder::as_server().build();
Supported BEPs:
- BEP0005 DHT Protocol
- BEP0042 DHT Security extension
- BEP0043 Read-only DHT Nodes
- BEP0044 Storing arbitrary data in the DHT
This implementation was possible thanks to Webtorrent's Bittorrent-dht as a reference, and Rustydht-lib that saved me a lot of time, especially at the serialization and deserialization of Bencode messages.