From 2f2da8deb055d52e15cd8a6f4b7ae560419540d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 4 Jul 2020 11:20:58 +0200 Subject: [PATCH] aquatic_http: AnnounceRequest: make numwant optional, remove trackerid --- aquatic_http/src/lib/handler.rs | 8 +++----- aquatic_http/src/lib/protocol/request.rs | 22 ++++++++++++++-------- aquatic_http/src/lib/protocol/response.rs | 1 - 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/aquatic_http/src/lib/handler.rs b/aquatic_http/src/lib/handler.rs index 3ff37be..d18761b 100644 --- a/aquatic_http/src/lib/handler.rs +++ b/aquatic_http/src/lib/handler.rs @@ -143,10 +143,9 @@ pub fn handle_announce_requests( } } - let max_num_peers_to_take = if request.numwant <= 0 { - config.protocol.max_peers - } else { - request.numwant.min(config.protocol.max_peers) + let max_num_peers_to_take = match request.numwant { + Some(0) | None => config.protocol.max_peers, + Some(numwant) => numwant.min(config.protocol.max_peers), }; let response_peers: Vec = extract_response_peers( @@ -161,7 +160,6 @@ pub fn handle_announce_requests( incomplete: torrent_data.num_leechers, announce_interval: config.protocol.peer_announce_interval, peers: response_peers, - tracker_id: "".to_string() }); (request_sender_meta, response) diff --git a/aquatic_http/src/lib/protocol/request.rs b/aquatic_http/src/lib/protocol/request.rs index f1fef56..96eaa18 100644 --- a/aquatic_http/src/lib/protocol/request.rs +++ b/aquatic_http/src/lib/protocol/request.rs @@ -13,8 +13,8 @@ pub struct AnnounceRequest { pub bytes_left: usize, pub event: AnnounceEvent, pub compact: bool, - /// Requested number of peers to return - pub numwant: usize, + /// Number of response peers wanted + pub numwant: Option, } @@ -68,6 +68,17 @@ impl Request { } if location == "/announce" { + let numwant = if let Some(s) = data.get("numwant"){ + let numwant = s.parse::() + .map_err(|err| + anyhow::anyhow!("parse 'numwant': {}", err) + )?; + + Some(numwant) + } else { + None + }; + let request = AnnounceRequest { info_hash: info_hashes.get(0) .with_context(|| "no info_hash") @@ -91,12 +102,7 @@ impl Request { compact: data.get("compact") .map(|s| s == "1") .unwrap_or(true), - numwant: data.get("numwant") - .with_context(|| "no numwant") - .and_then(|s| s.parse() - .map_err(|err| - anyhow::anyhow!("parse 'numwant': {}", err) - ))?, + numwant, }; Ok(Request::Announce(request)) diff --git a/aquatic_http/src/lib/protocol/response.rs b/aquatic_http/src/lib/protocol/response.rs index 039696f..023f089 100644 --- a/aquatic_http/src/lib/protocol/response.rs +++ b/aquatic_http/src/lib/protocol/response.rs @@ -40,7 +40,6 @@ pub struct ScrapeStatistics { pub struct AnnounceResponse { #[serde(rename = "interval")] pub announce_interval: usize, - pub tracker_id: String, // Optional?? pub complete: usize, pub incomplete: usize, #[serde(