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

Commit b849074c authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android (Google) Code Review
Browse files

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

parents 4dfe8695 d90c611a
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) {