diff --git a/aquatic_http/src/lib/common.rs b/aquatic_http/src/lib/common.rs index c0f2549..ae1037c 100644 --- a/aquatic_http/src/lib/common.rs +++ b/aquatic_http/src/lib/common.rs @@ -16,6 +16,12 @@ use crate::protocol::request::Request; use crate::protocol::response::{Response, ResponsePeer}; +pub trait Ip: Copy + Eq + ::std::hash::Hash {} + +impl Ip for Ipv4Addr {} +impl Ip for Ipv6Addr {} + + #[derive(Clone, Copy, Debug)] pub struct ConnectionMeta { /// Index of socket worker responsible for this connection. Required for @@ -27,10 +33,10 @@ pub struct ConnectionMeta { #[derive(Clone, Copy, Debug)] -pub struct PeerConnectionMeta

{ +pub struct PeerConnectionMeta { pub worker_index: usize, pub poll_token: Token, - pub peer_ip_address: P, + pub peer_ip_address: I, } @@ -63,16 +69,16 @@ impl PeerStatus { #[derive(Clone, Copy)] -pub struct Peer

{ - pub connection_meta: PeerConnectionMeta

, +pub struct Peer { + pub connection_meta: PeerConnectionMeta, pub port: u16, pub status: PeerStatus, pub valid_until: ValidUntil, } -impl Peer { - pub fn to_response_peer(&self) -> ResponsePeer { +impl Peer { + pub fn to_response_peer(&self) -> ResponsePeer { ResponsePeer { ip_address: self.connection_meta.peer_ip_address, port: self.port @@ -82,23 +88,23 @@ impl Peer { #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct PeerMapKey { +pub struct PeerMapKey { pub peer_id: PeerId, - pub ip_or_key: Either + pub ip_or_key: Either } -pub type PeerMap

= IndexMap, Peer

>; +pub type PeerMap = IndexMap, Peer>; -pub struct TorrentData { - pub peers: PeerMap

, +pub struct TorrentData { + pub peers: PeerMap, pub num_seeders: usize, pub num_leechers: usize, } -impl Default for TorrentData

{ +impl Default for TorrentData { #[inline] fn default() -> Self { Self { @@ -110,7 +116,7 @@ impl Default for TorrentData

{ } -pub type TorrentMap

= HashMap>; +pub type TorrentMap = HashMap>; #[derive(Default)] diff --git a/aquatic_http/src/lib/handler.rs b/aquatic_http/src/lib/handler.rs index caff517..be18a72 100644 --- a/aquatic_http/src/lib/handler.rs +++ b/aquatic_http/src/lib/handler.rs @@ -170,14 +170,14 @@ pub fn handle_announce_requests( /// Insert/update peer. Return num_seeders, num_leechers and response peers -fn upsert_peer_and_get_response_peers( +fn upsert_peer_and_get_response_peers( config: &Config, rng: &mut impl Rng, - request_sender_meta: PeerConnectionMeta

, - torrent_data: &mut TorrentData

, + request_sender_meta: PeerConnectionMeta, + torrent_data: &mut TorrentData, request: AnnounceRequest, valid_until: ValidUntil, -) -> (usize, usize, Vec>) { +) -> (usize, usize, Vec>) { // Insert/update/remove peer who sent this request { let peer_status = PeerStatus::from_event_and_bytes_left( @@ -235,7 +235,7 @@ fn upsert_peer_and_get_response_peers( Some(numwant) => numwant.min(config.protocol.max_peers), }; - let response_peers: Vec> = extract_response_peers( + let response_peers: Vec> = extract_response_peers( rng, &torrent_data.peers, max_num_peers_to_take, diff --git a/aquatic_http/src/lib/tasks.rs b/aquatic_http/src/lib/tasks.rs index ad901dc..6c04be6 100644 --- a/aquatic_http/src/lib/tasks.rs +++ b/aquatic_http/src/lib/tasks.rs @@ -12,7 +12,7 @@ pub fn clean_torrents(state: &State){ } -fn clean_torrent_map( +fn clean_torrent_map( torrent_map: &mut TorrentMap, ){ let now = Instant::now();