From 3837ec8122a24269409d9d8e5f3949928f3277e8 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 18 Jul 2019 11:23:07 +0200 Subject: [PATCH] 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) fixes #3465 --- .../utils/AndroidUsingLinkProperties.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/utils/AndroidUsingLinkProperties.java b/src/main/java/eu/siacs/conversations/utils/AndroidUsingLinkProperties.java index d6a9f9a1a..658e7abcd 100644 --- a/src/main/java/eu/siacs/conversations/utils/AndroidUsingLinkProperties.java +++ b/src/main/java/eu/siacs/conversations/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 (networkInfo != null && isActiveNetwork && networkInfo.getType() == ConnectivityManager.TYPE_VPN) { + 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) { + } else if (hasDefaultRoute(linkProperties) || isActiveNetwork || activeNetwork == null || isVpn) { servers.addAll(vpnOffset, getIPv4First(linkProperties.getDnsServers())); - } else { - servers.addAll(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;