Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 511ecc8c authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android Git Automerger
Browse files

am b849074c: Merge "Tell the resolver what protocols to use." into ics-factoryrom

* commit 'b849074c':
  Tell the resolver what protocols to use.
parents 006dc043 b849074c
Loading
Loading
Loading
Loading
+45 −6
Original line number Diff line number Diff line
@@ -1974,7 +1974,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    Integer pid = (Integer)pids.get(j);
                    if (pid.intValue() == myPid) {
                        Collection<InetAddress> dnses = p.getDnses();
                        writePidDns(dnses, myPid);
                        String proto = determineProto(p);
                        writePidDns(dnses, myPid, proto);
                        if (doBump) {
                            bumpDns();
                        }
@@ -1984,6 +1985,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
           }
        }
        // nothing found - delete
        if (SystemProperties.get("net.dnsproto." + myPid).length() != 0) {
            SystemProperties.set("net.dnsproto." + myPid, "");
        }
        for (int i = 1; ; i++) {
            String prop = "net.dns" + i + "." + myPid;
            if (SystemProperties.get(prop).length() == 0) {
@@ -1997,7 +2001,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
    }

    // return true if results in a change
    private boolean writePidDns(Collection <InetAddress> dnses, int pid) {
    private boolean writePidDns(Collection <InetAddress> dnses, int pid, String proto) {
        int j = 1;
        boolean changed = false;
        for (InetAddress dns : dnses) {
@@ -2007,6 +2011,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                SystemProperties.set("net.dns" + j++ + "." + pid, dns.getHostAddress());
            }
        }
        if (dnses.size() > 0 && (changed || !proto.equals(SystemProperties.get("net.dnsproto." +
                pid)))) {
            changed = true;
            SystemProperties.set("net.dnsproto." + pid, proto);
        }
        return changed;
    }

@@ -2037,7 +2046,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {

    // Caller must grab mDnsLock.
    private boolean updateDns(String network, String iface,
            Collection<InetAddress> dnses, String domains) {
            Collection<InetAddress> dnses, String domains, String proto) {
        boolean changed = false;
        int last = 0;
        if (dnses.size() == 0 && mDefaultDns != null) {
@@ -2073,6 +2082,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        }
        mNumDnsEntries = last;

        if (changed || !proto.equals(SystemProperties.get("net.dnsproto"))) {
            changed = true;
            SystemProperties.set("net.dnsproto", proto);
        }

        if (changed) {
            try {
                mNetd.setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses));
@@ -2096,11 +2110,14 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            if (p == null) return;
            Collection<InetAddress> dnses = p.getDnses();
            boolean changed = false;
            String proto = determineProto(p);

            if (mNetConfigs[netType].isDefault()) {
                String network = nt.getNetworkInfo().getTypeName();
                synchronized (mDnsLock) {
                    if (!mDnsOverridden) {
                        changed = updateDns(network, p.getInterfaceName(), dnses, "");
                        changed = updateDns(network, p.getInterfaceName(), dnses, "",
                                proto);
                    }
                }
            } else {
@@ -2114,13 +2131,35 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                List pids = mNetRequestersPids[netType];
                for (int y=0; y< pids.size(); y++) {
                    Integer pid = (Integer)pids.get(y);
                    changed = writePidDns(dnses, pid.intValue());
                    changed = writePidDns(dnses, pid.intValue(), proto);
                }
            }
            if (changed) bumpDns();
        }
    }

    private String determineProto(LinkProperties p) {
        boolean v4 = false;
        boolean v6 = false;
        for (RouteInfo r : p.getRoutes()) {
            if (r.getDestination().getAddress() instanceof Inet6Address) {
                v6 = true;
            } else {
                v4 = true;
            }
        }
        // secondary connections often don't have routes and we infer routes
        // to the dns servers.  Look at the dns addrs too
        for (InetAddress i : p.getDnses()) {
            if (i instanceof Inet6Address) {
                v6 = true;
            } else {
                v4 = true;
            }
        }
        return (v4 ? "v4" : "") + (v6 ? "v6" : "");
    }

    private int getRestoreDefaultNetworkDelay(int networkType) {
        String restoreDefaultNetworkDelayStr = SystemProperties.get(
                NETWORK_RESTORE_DELAY_PROP_NAME);
@@ -2842,7 +2881,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            // Apply DNS changes.
            boolean changed = false;
            synchronized (mDnsLock) {
                changed = updateDns("VPN", "VPN", addresses, domains);
                changed = updateDns("VPN", "VPN", addresses, domains, "v4");
                mDnsOverridden = true;
            }
            if (changed) {