Skip to main content

btracker_scrape/
lib.rs

1mod udp;
2
3use std::net::SocketAddr;
4use udp::Udp;
5
6#[derive(Default)]
7pub struct Result {
8    pub leechers: u32,
9    pub peers: u32,
10    pub seeders: u32,
11}
12
13pub struct Scrape {
14    udp: Option<Udp>,
15    // tcp: @TODO
16}
17
18impl Scrape {
19    pub fn init(udp: Option<(Vec<SocketAddr>, Vec<SocketAddr>)>) -> Self {
20        Self {
21            udp: udp.map(|(local, remote)| Udp::init(local, remote)),
22        }
23    }
24
25    pub fn get(&self, info_hash: [u8; 20]) -> Option<Result> {
26        self.udp.as_ref()?;
27        let mut t = Result::default();
28        if let Some(ref u) = self.udp {
29            let r = u.scrape(info_hash).ok()?; // @TODO handle
30            t.leechers += r.leechers;
31            t.peers += r.peers;
32            t.seeders += r.seeders;
33        }
34        Some(t)
35    }
36}