diff --git a/Cargo.lock b/Cargo.lock index f80d310..ef4554d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,6 +68,7 @@ dependencies = [ "hashbrown 0.12.3", "hex", "hwloc", + "indexmap", "indexmap-amortized", "libc", "log", diff --git a/aquatic_common/Cargo.toml b/aquatic_common/Cargo.toml index 293bffe..759cccb 100644 --- a/aquatic_common/Cargo.toml +++ b/aquatic_common/Cargo.toml @@ -24,6 +24,7 @@ duplicate = "0.4" git-testament = "0.2" hashbrown = "0.12" hex = "0.4" +indexmap = "1" indexmap-amortized = "1" libc = "0.2" log = "0.4" diff --git a/aquatic_common/src/lib.rs b/aquatic_common/src/lib.rs index b23a71b..7d51312 100644 --- a/aquatic_common/src/lib.rs +++ b/aquatic_common/src/lib.rs @@ -13,6 +13,9 @@ pub mod privileges; #[cfg(feature = "rustls")] pub mod rustls_config; +/// IndexMap using AHash hasher +pub type IndexMap = indexmap::IndexMap; + /// Amortized IndexMap using AHash hasher pub type AmortizedIndexMap = indexmap_amortized::IndexMap; @@ -104,7 +107,7 @@ impl Drop for PanicSentinel { #[inline] pub fn extract_response_peers( rng: &mut impl Rng, - peer_map: &AmortizedIndexMap, + peer_map: &IndexMap, max_num_peers_to_take: usize, sender_peer_map_key: K, peer_conversion_function: F, diff --git a/aquatic_http/src/workers/swarm.rs b/aquatic_http/src/workers/swarm.rs index cbfef5c..6e3c6c5 100644 --- a/aquatic_http/src/workers/swarm.rs +++ b/aquatic_http/src/workers/swarm.rs @@ -16,7 +16,7 @@ use rand::SeedableRng; use smartstring::{LazyCompact, SmartString}; use aquatic_common::access_list::{create_access_list_cache, AccessListArcSwap, AccessListCache}; -use aquatic_common::{extract_response_peers, PanicSentinel}; +use aquatic_common::{extract_response_peers, IndexMap, PanicSentinel}; use aquatic_common::{AmortizedIndexMap, CanonicalSocketAddr}; use aquatic_common::{SecondsSinceServerStart, ServerStartInstant, ValidUntil}; use aquatic_http_protocol::common::*; @@ -78,7 +78,7 @@ pub struct PeerMapKey { pub ip_or_key: Either>, } -pub type PeerMap = AmortizedIndexMap, Peer>; +pub type PeerMap = IndexMap, Peer>; pub struct TorrentData { pub peers: PeerMap, diff --git a/aquatic_http_private/src/workers/swarm/common.rs b/aquatic_http_private/src/workers/swarm/common.rs index 4fc6a12..277da34 100644 --- a/aquatic_http_private/src/workers/swarm/common.rs +++ b/aquatic_http_private/src/workers/swarm/common.rs @@ -1,6 +1,8 @@ use std::net::{Ipv4Addr, Ipv6Addr}; -use aquatic_common::{AmortizedIndexMap, SecondsSinceServerStart, ServerStartInstant, ValidUntil}; +use aquatic_common::{ + AmortizedIndexMap, IndexMap, SecondsSinceServerStart, ServerStartInstant, ValidUntil, +}; use aquatic_http_protocol::common::{AnnounceEvent, InfoHash, PeerId}; use aquatic_http_protocol::response::ResponsePeer; @@ -55,7 +57,7 @@ pub struct PeerMapKey { pub ip_address: I, } -pub type PeerMap = AmortizedIndexMap, Peer>; +pub type PeerMap = IndexMap, Peer>; pub struct TorrentData { pub peers: PeerMap, diff --git a/aquatic_udp/src/workers/swarm/storage.rs b/aquatic_udp/src/workers/swarm/storage.rs index 5870ebe..6523d25 100644 --- a/aquatic_udp/src/workers/swarm/storage.rs +++ b/aquatic_udp/src/workers/swarm/storage.rs @@ -2,6 +2,7 @@ use std::net::Ipv4Addr; use std::net::Ipv6Addr; use std::sync::Arc; +use aquatic_common::IndexMap; use aquatic_common::SecondsSinceServerStart; use aquatic_common::ServerStartInstant; use aquatic_common::{ @@ -35,7 +36,7 @@ impl Peer { } } -pub type PeerMap = AmortizedIndexMap>; +pub type PeerMap = IndexMap>; pub struct TorrentData { peers: PeerMap, diff --git a/aquatic_ws/src/workers/swarm.rs b/aquatic_ws/src/workers/swarm.rs index b8a06f7..b180fb8 100644 --- a/aquatic_ws/src/workers/swarm.rs +++ b/aquatic_ws/src/workers/swarm.rs @@ -13,7 +13,7 @@ use hashbrown::HashMap; use rand::{rngs::SmallRng, SeedableRng}; use aquatic_common::{ - extract_response_peers, AmortizedIndexMap, PanicSentinel, SecondsSinceServerStart, + extract_response_peers, AmortizedIndexMap, IndexMap, PanicSentinel, SecondsSinceServerStart, ServerStartInstant, }; use aquatic_ws_protocol::*; @@ -53,7 +53,7 @@ struct Peer { pub valid_until: ValidUntil, } -type PeerMap = AmortizedIndexMap; +type PeerMap = IndexMap; struct TorrentData { pub peers: PeerMap,