Make TcpConfig::nat_traversal work with IPv6 (#956)

This commit is contained in:
Pierre Krieger
2019-02-19 16:44:07 +01:00
committed by GitHub
parent 4fa00725e4
commit e92c6a219b

View File

@ -189,6 +189,8 @@ impl Transport for TcpConfig {
// Use the observed IP address.
match server.iter().zip(observed.iter()).next() {
Some((Protocol::Ip4(_), x @ Protocol::Ip4(_))) => address.append(x),
Some((Protocol::Ip6(_), x @ Protocol::Ip4(_))) => address.append(x),
Some((Protocol::Ip4(_), x @ Protocol::Ip6(_))) => address.append(x),
Some((Protocol::Ip6(_), x @ Protocol::Ip6(_))) => address.append(x),
_ => return None
}
@ -533,4 +535,32 @@ mod tests {
"/ip4/80.81.82.83/tcp/10000".parse::<Multiaddr>().unwrap()
);
}
#[test]
fn nat_traversal_ipv6_to_ipv4() {
let tcp = TcpConfig::new();
let server = "/ip6/::1/tcp/10000".parse::<Multiaddr>().unwrap();
let observed = "/ip4/80.81.82.83/tcp/25000".parse::<Multiaddr>().unwrap();
let out = tcp.nat_traversal(&server, &observed);
assert_eq!(
out.unwrap(),
"/ip4/80.81.82.83/tcp/10000".parse::<Multiaddr>().unwrap()
);
}
#[test]
fn nat_traversal_ipv4_to_ipv6() {
let tcp = TcpConfig::new();
let server = "/ip4/127.0.0.1/tcp/10000".parse::<Multiaddr>().unwrap();
let observed = "/ip6/2001:db8::1/tcp/25000".parse::<Multiaddr>().unwrap();
let out = tcp.nat_traversal(&server, &observed);
assert_eq!(
out.unwrap(),
"/ip6/2001:db8::1/tcp/10000".parse::<Multiaddr>().unwrap()
);
}
}