mainline 4.1.0

Simple, robust, BitTorrent's Mainline DHT implementation
Documentation
use std::{thread::sleep, time::Duration};

use mainline::{
    server::{DefaultServer, Server},
    Dht,
};
use tracing::{info, instrument, Level};

#[derive(Debug, Default)]
struct MyCustomServer {
    inner: DefaultServer,
}

impl Server for MyCustomServer {
    #[instrument]
    fn handle_request(
        &mut self,
        rpc: &mut mainline::rpc::Rpc,
        from: std::net::SocketAddr,
        transaction_id: u16,
        request: &mainline::rpc::messages::RequestSpecific,
    ) {
        info!(?request, ?from, "Request from");

        // Do something ...
        // For example, rate limiting:
        // if self.rate_limiter.check() { return };

        self.inner
            .handle_request(rpc, from, transaction_id, request)
    }
}

fn main() {
    tracing_subscriber::fmt().with_max_level(Level::INFO).init();

    Dht::builder()
        .custom_server(Box::<MyCustomServer>::default())
        .build()
        .unwrap();

    sleep(Duration::from_secs(5))
}