From 8426e8f3f72dd70cdfcf1f10c40120f0be3c4e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Mon, 6 Apr 2020 19:43:49 +0200 Subject: [PATCH] on invalid requests, return error response; simplify Request type --- aquatic/src/lib/network.rs | 20 ++++++++++++++------ bittorrent_udp/src/converters/requests.rs | 12 ------------ bittorrent_udp/src/types/request.rs | 4 ---- scripts/run-server.sh | 0 4 files changed, 14 insertions(+), 22 deletions(-) mode change 100644 => 100755 scripts/run-server.sh diff --git a/aquatic/src/lib/network.rs b/aquatic/src/lib/network.rs index 07c8091..c3b2810 100644 --- a/aquatic/src/lib/network.rs +++ b/aquatic/src/lib/network.rs @@ -90,18 +90,26 @@ pub fn run_event_loop( ); match request { - Request::Connect(r) => { + Ok(Request::Connect(r)) => { connect_requests.push((r, src)); }, - Request::Announce(r) => { + Ok(Request::Announce(r)) => { announce_requests.push((r, src)); }, - Request::Scrape(r) => { + Ok(Request::Scrape(r)) => { scrape_requests.push((r, src)); }, - _ => { - // FIXME - } + Ok(Request::Invalid(r)) => { + let response = Response::Error(ErrorResponse { + transaction_id: r.transaction_id, + message: "Invalid request".to_string(), + }); + + responses.push((response, src)); + }, + Err(err) => { + eprintln!("Request parse error: {:?}", err); + }, } }, Err(err) => { diff --git a/bittorrent_udp/src/converters/requests.rs b/bittorrent_udp/src/converters/requests.rs index 8801914..e9e616e 100644 --- a/bittorrent_udp/src/converters/requests.rs +++ b/bittorrent_udp/src/converters/requests.rs @@ -64,18 +64,6 @@ pub fn request_to_bytes(request: &types::Request) -> Vec { pub fn request_from_bytes( bytes: &[u8], max_scrape_torrents: u8, -) -> types::Request { - - match try_request_from_bytes(bytes, max_scrape_torrents){ - Ok(request) => request, - Err(_) => types::Request::Error - } -} - - -fn try_request_from_bytes( - bytes: &[u8], - max_scrape_torrents: u8, ) -> Result { let mut bytes = io::Cursor::new(bytes); diff --git a/bittorrent_udp/src/types/request.rs b/bittorrent_udp/src/types/request.rs index 7d63348..4121c9f 100644 --- a/bittorrent_udp/src/types/request.rs +++ b/bittorrent_udp/src/types/request.rs @@ -52,8 +52,4 @@ pub enum Request { Announce(AnnounceRequest), Scrape(ScrapeRequest), Invalid(InvalidRequest), - - /// Should ideally only be used when no transaction id can be parsed, - /// but is currently also used as a catch-all for non-specific errors - Error, } \ No newline at end of file diff --git a/scripts/run-server.sh b/scripts/run-server.sh old mode 100644 new mode 100755