X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=dnsseed-rust;a=blobdiff_plain;f=src%2Fdatastore.rs;fp=src%2Fdatastore.rs;h=1f2221029d6d2d76f79626f574c6fc64b066f86b;hp=27987714d347f566ea79d662f6bc4343b9c314d8;hb=5626798a0d61d3eab42edb0feacdda328620c580;hpb=852e939be31574ea13b9f0da3056393d23d55753 diff --git a/src/datastore.rs b/src/datastore.rs index 2798771..1f22210 100644 --- a/src/datastore.rs +++ b/src/datastore.rs @@ -132,13 +132,17 @@ struct Node { #[derive(Clone, PartialEq, Eq, Hash)] enum SockAddr { V4(SocketAddrV4), - V6((Ipv6Addr, u16)), + V6(([u16; 8], u16)), +} +#[inline] +fn segs_to_ip6(segs: &[u16; 8]) -> Ipv6Addr { + Ipv6Addr::new(segs[0], segs[1], segs[2], segs[3], segs[4], segs[5], segs[6], segs[7]) } impl From for SockAddr { fn from(addr: SocketAddr) -> SockAddr { match addr { SocketAddr::V4(sa) => SockAddr::V4(sa), - SocketAddr::V6(sa) => SockAddr::V6((sa.ip().clone(), sa.port())), + SocketAddr::V6(sa) => SockAddr::V6((sa.ip().segments(), sa.port())), } } } @@ -146,7 +150,7 @@ impl Into for &SockAddr { fn into(self) -> SocketAddr { match self { &SockAddr::V4(sa) => SocketAddr::V4(sa), - &SockAddr::V6(sa) => SocketAddr::V6(SocketAddrV6::new(sa.0, sa.1, 0, 0)) + &SockAddr::V6(sa) => SocketAddr::V6(SocketAddrV6::new(segs_to_ip6(&sa.0), sa.1, 0, 0)) } } } @@ -166,7 +170,7 @@ impl SockAddr { pub fn ip(&self) -> IpAddr { match *self { SockAddr::V4(sa) => IpAddr::V4(sa.ip().clone()), - SockAddr::V6((ip, _)) => IpAddr::V6(ip), + SockAddr::V6((ip, _)) => IpAddr::V6(segs_to_ip6(&ip)), } } }