mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-16 20:59:54 +01:00
Correctly handle connectivity events on IPv6-only networks.
This commit is contained in:
@@ -252,7 +252,7 @@ class AndroidLanTcpPlugin extends LanTcpPlugin {
|
|||||||
connectionStatusExecutor.execute(() -> {
|
connectionStatusExecutor.execute(() -> {
|
||||||
State s = getState();
|
State s = getState();
|
||||||
if (s != ACTIVE && s != INACTIVE) return;
|
if (s != ACTIVE && s != INACTIVE) return;
|
||||||
Pair<InetAddress, Boolean> wifi = getWifiIpv4Address();
|
Pair<InetAddress, Boolean> wifi = getPreferredWifiAddress();
|
||||||
if (wifi == null) {
|
if (wifi == null) {
|
||||||
LOG.info("Not connected to wifi");
|
LOG.info("Not connected to wifi");
|
||||||
socketFactory = SocketFactory.getDefault();
|
socketFactory = SocketFactory.getDefault();
|
||||||
@@ -280,4 +280,23 @@ class AndroidLanTcpPlugin extends LanTcpPlugin {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a {@link Pair} where the first element is an IP address (IPv4 if
|
||||||
|
* available, otherwise IPv6) of the wifi interface and the second element
|
||||||
|
* is true if this device is providing an access point, or false if this
|
||||||
|
* device is a client. Returns null if this device isn't connected to wifi
|
||||||
|
* as an access point or client.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
private Pair<InetAddress, Boolean> getPreferredWifiAddress() {
|
||||||
|
Pair<InetAddress, Boolean> wifi = getWifiIpv4Address();
|
||||||
|
// If there's no wifi IPv4 address, we might be a client on an
|
||||||
|
// IPv6-only wifi network. We can only detect this on API 21+
|
||||||
|
if (wifi == null && SDK_INT >= 21) {
|
||||||
|
InetAddress ipv6 = getWifiClientIpv6Address();
|
||||||
|
if (ipv6 != null) return new Pair<>(ipv6, false);
|
||||||
|
}
|
||||||
|
return wifi;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user