fix(client): parse IPv6 hosts correctly in HttpConnector
This commit is contained in:
		| @@ -228,6 +228,16 @@ impl IpAddrs { | |||||||
|             let addr = SocketAddrV4::new(addr, port); |             let addr = SocketAddrV4::new(addr, port); | ||||||
|             return Some(IpAddrs { iter: vec![SocketAddr::V4(addr)].into_iter() }) |             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::<Ipv6Addr>() { |         if let Ok(addr) = host.parse::<Ipv6Addr>() { | ||||||
|             let addr = SocketAddrV6::new(addr, port, 0, 0); |             let addr = SocketAddrV6::new(addr, port, 0, 0); | ||||||
|             return Some(IpAddrs { iter: vec![SocketAddr::V6(addr)].into_iter() }) |             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.as_str(), DOMAIN); | ||||||
|         assert_eq!(name.to_string(), 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::<SocketAddr>().expect("expected"); | ||||||
|  |  | ||||||
|  |         assert_eq!(addrs.next(), Some(expected)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user