fix android unit tests and add better macos instructions

This commit is contained in:
John Smith
2022-08-23 10:37:41 -04:00
parent e112cc4527
commit 1793dd90e8
13 changed files with 227 additions and 75 deletions

View File

@@ -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;

View File

@@ -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,