From 4210498d3cee8922a2bec699e74f342e2dcfc648 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Sat, 31 Aug 2019 14:57:23 +0200 Subject: do not include DNS servers from networks know to be inactive MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * we still include DNS servers from VPNs because of edge cases where the XMPP server is hosted in the VPN * on older Android versions we don’t know if a network is active or not (activeNetwork == null) --- .../utils/AndroidUsingLinkProperties.java | 35 +++++++++++----------- 1 file changed, 17 insertions(+), 18 deletions(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/pixart/messenger/utils/AndroidUsingLinkProperties.java b/src/main/java/de/pixart/messenger/utils/AndroidUsingLinkProperties.java index 1c0fca8bb..f2f33dc1b 100644 --- a/src/main/java/de/pixart/messenger/utils/AndroidUsingLinkProperties.java +++ b/src/main/java/de/pixart/messenger/utils/AndroidUsingLinkProperties.java @@ -21,7 +21,7 @@ public class AndroidUsingLinkProperties extends AbstractDNSServerLookupMechanism private final Context context; - protected AndroidUsingLinkProperties(Context context) { + AndroidUsingLinkProperties(Context context) { super(AndroidUsingLinkProperties.class.getSimpleName(), AndroidUsingExec.PRIORITY - 1); this.context = context; } @@ -34,32 +34,31 @@ public class AndroidUsingLinkProperties extends AbstractDNSServerLookupMechanism @Override @TargetApi(21) public String[] getDnsServerAddresses() { - ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - Network[] networks = connectivityManager == null ? null : connectivityManager.getAllNetworks(); + final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + final Network[] networks = connectivityManager == null ? null : connectivityManager.getAllNetworks(); if (networks == null) { return new String[0]; } final Network activeNetwork = getActiveNetwork(connectivityManager); - List servers = new ArrayList<>(); + final List servers = new ArrayList<>(); int vpnOffset = 0; for (Network network : networks) { LinkProperties linkProperties = connectivityManager.getLinkProperties(network); if (linkProperties == null) { continue; } - NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network); + final NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network); final boolean isActiveNetwork = network.equals(activeNetwork); - if (isActiveNetwork) { - if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_VPN) { - final List tmp = getIPv4First(linkProperties.getDnsServers()); - servers.addAll(0, tmp); - vpnOffset += tmp.size(); - } else { - servers.addAll(vpnOffset, getIPv4First(linkProperties.getDnsServers())); - } + final boolean isVpn = networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_VPN; + if (isActiveNetwork && isVpn) { + final List tmp = getIPv4First(linkProperties.getDnsServers()); + servers.addAll(0, tmp); + vpnOffset += tmp.size(); + } else if (hasDefaultRoute(linkProperties) || isActiveNetwork || activeNetwork == null || isVpn) { + servers.addAll(vpnOffset, getIPv4First(linkProperties.getDnsServers())); } } - return servers.toArray(new String[servers.size()]); + return servers.toArray(new String[0]); } @TargetApi(23) @@ -69,11 +68,11 @@ public class AndroidUsingLinkProperties extends AbstractDNSServerLookupMechanism private static List getIPv4First(List in) { List out = new ArrayList<>(); - for (InetAddress addr : in) { - if (addr instanceof Inet4Address) { - out.add(0, addr.getHostAddress()); + for (InetAddress address : in) { + if (address instanceof Inet4Address) { + out.add(0, address.getHostAddress()); } else { - out.add(addr.getHostAddress()); + out.add(address.getHostAddress()); } } return out; -- cgit v1.2.3