Include only addresses with known working connections
This commit is contained in:
parent
1129d5b6e6
commit
1fa05837fb
2 changed files with 61 additions and 47 deletions
|
|
@ -123,42 +123,44 @@ where
|
|||
}
|
||||
|
||||
impl UtPex<ByteBufOwned> {
|
||||
|
||||
pub fn from_addrs<'a, I,J>(addrs_live: I, addrs_closed: J) -> Self
|
||||
pub fn from_addrs<'a, I, J>(addrs_live: I, addrs_closed: J) -> Self
|
||||
where
|
||||
I: IntoIterator<Item = &'a SocketAddr>,
|
||||
J: IntoIterator<Item = &'a SocketAddr>,
|
||||
{
|
||||
|
||||
|
||||
fn addrs_to_bytes<'a,I>(addrs: I) -> (Option<ByteBufOwned>, Option<ByteBufOwned>)
|
||||
fn addrs_to_bytes<'a, I>(addrs: I) -> (Option<ByteBufOwned>, Option<ByteBufOwned>)
|
||||
where
|
||||
I: IntoIterator<Item = &'a SocketAddr>,
|
||||
{
|
||||
let mut ipv4_addrs = BytesMut::new();
|
||||
let mut ipv6_addrs = BytesMut::new();
|
||||
for addr in addrs {
|
||||
match addr {
|
||||
SocketAddr::V4(v4) => {
|
||||
ipv4_addrs.extend_from_slice(&v4.ip().octets());
|
||||
ipv4_addrs.extend_from_slice(&v4.port().to_be_bytes());
|
||||
}
|
||||
SocketAddr::V6(v6) => {
|
||||
ipv6_addrs.extend_from_slice(&v6.ip().octets());
|
||||
ipv6_addrs.extend_from_slice(&v6.port().to_be_bytes());
|
||||
{
|
||||
let mut ipv4_addrs = BytesMut::new();
|
||||
let mut ipv6_addrs = BytesMut::new();
|
||||
for addr in addrs {
|
||||
match addr {
|
||||
SocketAddr::V4(v4) => {
|
||||
ipv4_addrs.extend_from_slice(&v4.ip().octets());
|
||||
ipv4_addrs.extend_from_slice(&v4.port().to_be_bytes());
|
||||
}
|
||||
SocketAddr::V6(v6) => {
|
||||
ipv6_addrs.extend_from_slice(&v6.ip().octets());
|
||||
ipv6_addrs.extend_from_slice(&v6.port().to_be_bytes());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let freeze = |buf: BytesMut| -> Option<ByteBufOwned> {
|
||||
if !buf.is_empty() {
|
||||
Some(buf.freeze().into())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
|
||||
(freeze(ipv4_addrs), freeze(ipv6_addrs))
|
||||
}
|
||||
|
||||
let freeze = |buf: BytesMut| -> Option<ByteBufOwned> { if !buf.is_empty() {Some(buf.freeze().into())} else {None} };
|
||||
|
||||
(freeze(ipv4_addrs), freeze(ipv6_addrs))
|
||||
}
|
||||
|
||||
let (added, added6) = addrs_to_bytes(addrs_live);
|
||||
let (dropped, dropped6) = addrs_to_bytes(addrs_closed);
|
||||
|
||||
|
||||
Self {
|
||||
added,
|
||||
added6,
|
||||
|
|
@ -166,9 +168,7 @@ impl UtPex<ByteBufOwned> {
|
|||
dropped6,
|
||||
..Default::default()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
@ -210,8 +210,12 @@ mod tests {
|
|||
let a1 = "185.159.157.20:46439".parse::<SocketAddr>().unwrap();
|
||||
let a2 = "151.249.105.134:4240".parse::<SocketAddr>().unwrap();
|
||||
//IPV6
|
||||
let aa1 = "[5be8:dde9:7f0b:d5a7:bd01:b3be:9c69:573b]:46439".parse::<SocketAddr>().unwrap();
|
||||
let aa2 = "[f16c:f7ec:cfa2:e1c5:9a3c:cb08:801f:36b8]:4240".parse::<SocketAddr>().unwrap();
|
||||
let aa1 = "[5be8:dde9:7f0b:d5a7:bd01:b3be:9c69:573b]:46439"
|
||||
.parse::<SocketAddr>()
|
||||
.unwrap();
|
||||
let aa2 = "[f16c:f7ec:cfa2:e1c5:9a3c:cb08:801f:36b8]:4240"
|
||||
.parse::<SocketAddr>()
|
||||
.unwrap();
|
||||
|
||||
let addrs = vec![a1, aa1, a2, aa2];
|
||||
let pex = UtPex::from_addrs(&addrs, &addrs);
|
||||
|
|
@ -230,7 +234,5 @@ mod tests {
|
|||
assert_eq!(a2, addrs2[1].addr);
|
||||
assert_eq!(aa1, addrs2[2].addr);
|
||||
assert_eq!(aa2, addrs2[3].addr);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue