diff --git a/src/client/connect/dns.rs b/src/client/connect/dns.rs index 127cd728..c8e5c3b3 100644 --- a/src/client/connect/dns.rs +++ b/src/client/connect/dns.rs @@ -228,6 +228,16 @@ impl IpAddrs { let addr = SocketAddrV4::new(addr, port); return Some(IpAddrs { iter: vec![SocketAddr::V4(addr)].into_iter() }) } + let host = { + // trim_left/trim_right deprecated... + // TODO: use trim_start/trim_end in Rust 1.30 + #[allow(deprecated)] + { + host + .trim_left_matches('[') + .trim_right_matches(']') + } + }; if let Ok(addr) = host.parse::() { let addr = SocketAddrV6::new(addr, port, 0, 0); return Some(IpAddrs { iter: vec![SocketAddr::V6(addr)].into_iter() }) @@ -360,4 +370,19 @@ mod tests { assert_eq!(name.as_str(), DOMAIN); assert_eq!(name.to_string(), DOMAIN); } + + #[test] + fn ip_addrs_try_parse_v6() { + let uri = ::http::Uri::from_static("http://[::1]:8080/"); + let dst = super::super::Destination { uri }; + + let mut addrs = IpAddrs::try_parse( + dst.host(), + dst.port().expect("port") + ).expect("try_parse"); + + let expected = "[::1]:8080".parse::().expect("expected"); + + assert_eq!(addrs.next(), Some(expected)); + } }