44 lines
1.1 KiB
Rust
44 lines
1.1 KiB
Rust
|
use std::fs;
|
||
|
|
||
|
use brs::{
|
||
|
torrent::v1,
|
||
|
tracker::{Tracker, TrackerRequest},
|
||
|
};
|
||
|
use rand::distributions::Alphanumeric;
|
||
|
use rand::Rng;
|
||
|
|
||
|
pub(crate) async fn check(path: String) {
|
||
|
let bytes = fs::read(path).unwrap();
|
||
|
let torrent = v1::Torrent::parse_bytes(&bytes);
|
||
|
if let Err(e) = &torrent {
|
||
|
eprintln!("Failed to parse torrent: {e}")
|
||
|
}
|
||
|
|
||
|
let torrent = torrent.unwrap();
|
||
|
let peer_id: String = rand::thread_rng()
|
||
|
.sample_iter(&Alphanumeric)
|
||
|
.take(12)
|
||
|
.map(char::from)
|
||
|
.collect();
|
||
|
let info_hash = match torrent.calc_hash() {
|
||
|
Ok(v) => v,
|
||
|
Err(e) => return eprintln!("Failed to calculate info hash: {e}"),
|
||
|
};
|
||
|
let mut tracker = Tracker::new(torrent.announce.clone());
|
||
|
let rsp = tracker
|
||
|
.announce(TrackerRequest {
|
||
|
peer_id: format!("-BRS010-{peer_id}"),
|
||
|
downloaded: "0".to_string(),
|
||
|
left: torrent.calc_download_lenght().to_string(),
|
||
|
uploaded: "0".to_string(),
|
||
|
info_hash,
|
||
|
compact: true,
|
||
|
..Default::default()
|
||
|
})
|
||
|
.await;
|
||
|
|
||
|
if let Err(e) = rsp {
|
||
|
eprintln!("{e}")
|
||
|
}
|
||
|
}
|