fix android unit tests and add better macos instructions
This commit is contained in:
@@ -268,9 +268,8 @@ impl Network {
|
||||
if !from.ip().is_unspecified() {
|
||||
vec![*from]
|
||||
} else {
|
||||
self.unlocked_inner
|
||||
.interfaces
|
||||
.best_addresses()
|
||||
let addrs = self.get_usable_interface_addresses();
|
||||
addrs
|
||||
.iter()
|
||||
.filter_map(|a| {
|
||||
// We create sockets that are only ipv6 or ipv6 (not dual, so only translate matching unspecified address)
|
||||
@@ -311,11 +310,21 @@ impl Network {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn with_interface_addresses<F, R>(&self, f: F) -> R
|
||||
where
|
||||
F: FnOnce(&[IpAddr]) -> R,
|
||||
{
|
||||
self.unlocked_inner.interfaces.with_best_addresses(f)
|
||||
pub fn is_usable_interface_address(&self, addr: IpAddr) -> bool {
|
||||
let usable_addrs = self.get_usable_interface_addresses();
|
||||
usable_addrs.contains(&addr)
|
||||
}
|
||||
|
||||
pub fn get_usable_interface_addresses(&self) -> Vec<IpAddr> {
|
||||
let addrs = self.unlocked_inner.interfaces.best_addresses();
|
||||
let addrs: Vec<IpAddr> = addrs
|
||||
.into_iter()
|
||||
.filter(|addr| {
|
||||
let address = Address::from_ip_addr(*addr);
|
||||
address.is_local() || address.is_global()
|
||||
})
|
||||
.collect();
|
||||
addrs
|
||||
}
|
||||
|
||||
// See if our interface addresses have changed, if so we need to punt the network
|
||||
@@ -591,7 +600,7 @@ impl Network {
|
||||
{
|
||||
let mut inner = self.inner.lock();
|
||||
inner.enable_ipv4 = false;
|
||||
for addr in self.unlocked_inner.interfaces.best_addresses() {
|
||||
for addr in self.get_usable_interface_addresses() {
|
||||
if addr.is_ipv4() {
|
||||
log_net!(debug "enable address {:?} as ipv4", addr);
|
||||
inner.enable_ipv4 = true;
|
||||
|
@@ -332,14 +332,15 @@ impl Network {
|
||||
}
|
||||
|
||||
// See if this public address is also a local interface address we haven't registered yet
|
||||
let is_interface_address = self.with_interface_addresses(|ip_addrs| {
|
||||
for ip_addr in ip_addrs {
|
||||
if pdi_addr.ip() == *ip_addr {
|
||||
let is_interface_address = (|| {
|
||||
for ip_addr in self.get_usable_interface_addresses() {
|
||||
if pdi_addr.ip() == ip_addr {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
});
|
||||
})();
|
||||
|
||||
if !local_dial_info_list.contains(&pdi) && is_interface_address {
|
||||
routing_table.register_dial_info(
|
||||
RoutingDomain::LocalNetwork,
|
||||
@@ -428,15 +429,9 @@ impl Network {
|
||||
}
|
||||
|
||||
// See if this public address is also a local interface address
|
||||
let is_interface_address = self.with_interface_addresses(|ip_addrs| {
|
||||
for ip_addr in ip_addrs {
|
||||
if gsa.ip() == *ip_addr {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
});
|
||||
if !registered_addresses.contains(&gsa.ip()) && is_interface_address {
|
||||
if !registered_addresses.contains(&gsa.ip())
|
||||
&& self.is_usable_interface_address(gsa.ip())
|
||||
{
|
||||
routing_table.register_dial_info(
|
||||
RoutingDomain::LocalNetwork,
|
||||
pdi,
|
||||
@@ -559,15 +554,9 @@ impl Network {
|
||||
}
|
||||
|
||||
// See if this public address is also a local interface address
|
||||
let is_interface_address = self.with_interface_addresses(|ip_addrs| {
|
||||
for ip_addr in ip_addrs {
|
||||
if gsa.ip() == *ip_addr {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
});
|
||||
if !registered_addresses.contains(&gsa.ip()) && is_interface_address {
|
||||
if !registered_addresses.contains(&gsa.ip())
|
||||
&& self.is_usable_interface_address(gsa.ip())
|
||||
{
|
||||
routing_table.register_dial_info(
|
||||
RoutingDomain::LocalNetwork,
|
||||
pdi,
|
||||
@@ -679,15 +668,7 @@ impl Network {
|
||||
}
|
||||
|
||||
// See if this public address is also a local interface address
|
||||
let is_interface_address = self.with_interface_addresses(|ip_addrs| {
|
||||
for ip_addr in ip_addrs {
|
||||
if pdi_addr.ip() == *ip_addr {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
});
|
||||
if is_interface_address {
|
||||
if self.is_usable_interface_address(pdi_addr.ip()) {
|
||||
routing_table.register_dial_info(
|
||||
RoutingDomain::LocalNetwork,
|
||||
pdi,
|
||||
|
Reference in New Issue
Block a user