bittorrent_udp: response_from_bytes: more fixes

This commit is contained in:
Joakim Frostegård 2020-04-09 20:43:42 +02:00
parent a37b44ec89
commit 13e7ef6b57
2 changed files with 13 additions and 20 deletions

View file

@ -53,7 +53,7 @@ fn print_results(
fn main(){ fn main(){
let num_rounds = 10; let num_rounds = 1;
let mut connect_data = (0.0, 0.0); let mut connect_data = (0.0, 0.0);
let mut announce_data = (0.0, 0.0); let mut announce_data = (0.0, 0.0);

View file

@ -173,21 +173,20 @@ pub fn response_from_bytes(
// Scrape // Scrape
2 => { 2 => {
let mut stats = Vec::new(); let position = bytes.position() as usize;
let inner = bytes.into_inner();
let mut buf = [0u8; 12]; let stats = inner[position..].chunks_exact(12).map(|chunk| {
let seeders = (&chunk[0..4]).read_i32::<NetworkEndian>().unwrap();
let downloads = (&chunk[4..8]).read_i32::<NetworkEndian>().unwrap();
let leechers = (&chunk[8..12]).read_i32::<NetworkEndian>().unwrap();
while let Ok(()) = bytes.read_exact(&mut buf){ types::TorrentScrapeStatistics {
let seeders = (&buf[0..4]).read_i32::<NetworkEndian>().unwrap();
let downloads = (&buf[4..8]).read_i32::<NetworkEndian>().unwrap();
let leechers = (&buf[8..12]).read_i32::<NetworkEndian>().unwrap();
stats.push(types::TorrentScrapeStatistics {
seeders: types::NumberOfPeers(seeders), seeders: types::NumberOfPeers(seeders),
completed: types::NumberOfDownloads(downloads), completed: types::NumberOfDownloads(downloads),
leechers:types::NumberOfPeers(leechers) leechers:types::NumberOfPeers(leechers)
}) }
} }).collect();
Ok(types::Response::Scrape(types::ScrapeResponse { Ok(types::Response::Scrape(types::ScrapeResponse {
transaction_id: types::TransactionId(transaction_id), transaction_id: types::TransactionId(transaction_id),
@ -197,18 +196,12 @@ pub fn response_from_bytes(
// Error // Error
3 => { 3 => {
let mut message_bytes = Vec::new(); let position = bytes.position() as usize;
let inner = bytes.into_inner();
bytes.read_to_end(&mut message_bytes)?;
let message = match String::from_utf8(message_bytes) {
Ok(message) => message,
Err(_) => "".to_string()
};
Ok(types::Response::Error(types::ErrorResponse { Ok(types::Response::Error(types::ErrorResponse {
transaction_id: types::TransactionId(transaction_id), transaction_id: types::TransactionId(transaction_id),
message message: String::from_utf8_lossy(&inner[position..]).into()
})) }))
}, },