From a37b44ec890569d5c3ef7d91922c839d66b50ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Thu, 9 Apr 2020 20:27:50 +0200 Subject: [PATCH] bittorrent_udp: response_to_bytes: improve scrape encoding --- bittorrent_udp/src/converters/responses.rs | 36 ++++++++-------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/bittorrent_udp/src/converters/responses.rs b/bittorrent_udp/src/converters/responses.rs index 1954097..6df923c 100644 --- a/bittorrent_udp/src/converters/responses.rs +++ b/bittorrent_udp/src/converters/responses.rs @@ -175,33 +175,23 @@ pub fn response_from_bytes( 2 => { let mut stats = Vec::new(); - // TODO: transition to while let && when available - loop { - if let Ok(seeders) = bytes.read_i32::() { - if let Ok(downloaded) = bytes.read_i32::() { - if let Ok(leechers) = bytes.read_i32::() { - stats.push(types::TorrentScrapeStatistics { - seeders: types::NumberOfPeers(seeders), - completed: types::NumberOfDownloads(downloaded), - leechers: types::NumberOfPeers(leechers) - }); - } - else { - break; - } - } - else { - break; - } - } - else { - break; - } + let mut buf = [0u8; 12]; + + while let Ok(()) = bytes.read_exact(&mut buf){ + let seeders = (&buf[0..4]).read_i32::().unwrap(); + let downloads = (&buf[4..8]).read_i32::().unwrap(); + let leechers = (&buf[8..12]).read_i32::().unwrap(); + + stats.push(types::TorrentScrapeStatistics { + seeders: types::NumberOfPeers(seeders), + completed: types::NumberOfDownloads(downloads), + leechers:types::NumberOfPeers(leechers) + }) } Ok(types::Response::Scrape(types::ScrapeResponse { transaction_id: types::TransactionId(transaction_id), - torrent_stats: stats + torrent_stats: stats })) },