Loading core/java/android/net/NetworkUtils.java +15 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import java.net.InetAddress; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.UnknownHostException; import java.util.Collection; import android.util.Log; Loading Loading @@ -235,4 +236,18 @@ public class NetworkUtils { throw new IllegalArgumentException(e); } } /** * Create a string array of host addresses from a collection of InetAddresses * @param addrs a Collection of InetAddresses * @return an array of Strings containing their host addresses */ public static String[] makeStrings(Collection<InetAddress> addrs) { String[] result = new String[addrs.size()]; int i = 0; for (InetAddress addr : addrs) { result[i++] = addr.getHostAddress(); } return result; } } services/java/com/android/server/ConnectivityService.java +18 −3 Original line number Diff line number Diff line Loading @@ -1926,7 +1926,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { } // Caller must grab mDnsLock. private boolean updateDns(String network, Collection<InetAddress> dnses, String domains) { private boolean updateDns(String network, String iface, Collection<InetAddress> dnses, String domains) { boolean changed = false; int last = 0; if (dnses.size() == 0 && mDefaultDns != null) { Loading Loading @@ -1962,6 +1963,14 @@ public class ConnectivityService extends IConnectivityManager.Stub { } mNumDnsEntries = last; if (changed) { try { mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses)); mNetd.setDefaultInterfaceForDns(iface); } catch (Exception e) { Slog.e(TAG, "exception setting default dns interface: " + e); } } if (!domains.equals(SystemProperties.get("net.dns.search"))) { SystemProperties.set("net.dns.search", domains); changed = true; Loading @@ -1981,10 +1990,16 @@ public class ConnectivityService extends IConnectivityManager.Stub { String network = nt.getNetworkInfo().getTypeName(); synchronized (mDnsLock) { if (!mDnsOverridden) { changed = updateDns(network, dnses, ""); changed = updateDns(network, p.getInterfaceName(), dnses, ""); } } } else { try { mNetd.setDnsServersForInterface(Integer.toString(netType), NetworkUtils.makeStrings(dnses)); } catch (Exception e) { Slog.e(TAG, "exception setting dns servers: " + e); } // set per-pid dns for attached secondary nets List pids = mNetRequestersPids[netType]; for (int y=0; y< pids.size(); y++) { Loading Loading @@ -2686,7 +2701,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { // Apply DNS changes. boolean changed = false; synchronized (mDnsLock) { changed = updateDns("VPN", addresses, domains); changed = updateDns("VPN", "VPN", addresses, domains); mDnsOverridden = true; } if (changed) { Loading Loading
core/java/android/net/NetworkUtils.java +15 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import java.net.InetAddress; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.UnknownHostException; import java.util.Collection; import android.util.Log; Loading Loading @@ -235,4 +236,18 @@ public class NetworkUtils { throw new IllegalArgumentException(e); } } /** * Create a string array of host addresses from a collection of InetAddresses * @param addrs a Collection of InetAddresses * @return an array of Strings containing their host addresses */ public static String[] makeStrings(Collection<InetAddress> addrs) { String[] result = new String[addrs.size()]; int i = 0; for (InetAddress addr : addrs) { result[i++] = addr.getHostAddress(); } return result; } }
services/java/com/android/server/ConnectivityService.java +18 −3 Original line number Diff line number Diff line Loading @@ -1926,7 +1926,8 @@ public class ConnectivityService extends IConnectivityManager.Stub { } // Caller must grab mDnsLock. private boolean updateDns(String network, Collection<InetAddress> dnses, String domains) { private boolean updateDns(String network, String iface, Collection<InetAddress> dnses, String domains) { boolean changed = false; int last = 0; if (dnses.size() == 0 && mDefaultDns != null) { Loading Loading @@ -1962,6 +1963,14 @@ public class ConnectivityService extends IConnectivityManager.Stub { } mNumDnsEntries = last; if (changed) { try { mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses)); mNetd.setDefaultInterfaceForDns(iface); } catch (Exception e) { Slog.e(TAG, "exception setting default dns interface: " + e); } } if (!domains.equals(SystemProperties.get("net.dns.search"))) { SystemProperties.set("net.dns.search", domains); changed = true; Loading @@ -1981,10 +1990,16 @@ public class ConnectivityService extends IConnectivityManager.Stub { String network = nt.getNetworkInfo().getTypeName(); synchronized (mDnsLock) { if (!mDnsOverridden) { changed = updateDns(network, dnses, ""); changed = updateDns(network, p.getInterfaceName(), dnses, ""); } } } else { try { mNetd.setDnsServersForInterface(Integer.toString(netType), NetworkUtils.makeStrings(dnses)); } catch (Exception e) { Slog.e(TAG, "exception setting dns servers: " + e); } // set per-pid dns for attached secondary nets List pids = mNetRequestersPids[netType]; for (int y=0; y< pids.size(); y++) { Loading Loading @@ -2686,7 +2701,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { // Apply DNS changes. boolean changed = false; synchronized (mDnsLock) { changed = updateDns("VPN", addresses, domains); changed = updateDns("VPN", "VPN", addresses, domains); mDnsOverridden = true; } if (changed) { Loading