From b400a4b1cf6f9ff44a3632d0d56e29d9c9ae64d9 Mon Sep 17 00:00:00 2001 From: Quentin Le Sceller Date: Fri, 14 Feb 2020 09:37:14 -0500 Subject: [PATCH] Attempt to read ipv4-mapped ipv6 to ipv4 if possible (#3221) --- p2p/src/types.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/p2p/src/types.rs b/p2p/src/types.rs index 950fb9b06..38bf7d450 100644 --- a/p2p/src/types.rs +++ b/p2p/src/types.rs @@ -143,13 +143,15 @@ impl Readable for PeerAddr { )))) } else { let ip = try_iter_map_vec!(0..8, |_| reader.read_u16()); + let ipv6 = Ipv6Addr::new(ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7]); let port = reader.read_u16()?; - Ok(PeerAddr(SocketAddr::V6(SocketAddrV6::new( - Ipv6Addr::new(ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7]), - port, - 0, - 0, - )))) + if let Some(ipv4) = ipv6.to_ipv4() { + Ok(PeerAddr(SocketAddr::V4(SocketAddrV4::new(ipv4, port)))) + } else { + Ok(PeerAddr(SocketAddr::V6(SocketAddrV6::new( + ipv6, port, 0, 0, + )))) + } } } }