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

Commit a11b5e34 authored by Paul Jensen's avatar Paul Jensen Committed by Android (Google) Code Review
Browse files

Merge "Send updated NetworkAgent score to NetworkFactories when validated." into lmp-dev

parents 6eead851 c8b9a742
Loading
Loading
Loading
Loading
+39 −26
Original line number Diff line number Diff line
@@ -1792,6 +1792,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        return false;
    }

    private boolean isRequest(NetworkRequest request) {
        return mNetworkRequests.get(request).isRequest;
    }

    // must be stateless - things change under us.
    private class NetworkStateTrackerHandler extends Handler {
        public NetworkStateTrackerHandler(Looper looper) {
@@ -1908,8 +1912,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        if (valid) {
                            if (DBG) log("Validated " + nai.name());
                            final boolean previouslyValidated = nai.validated;
                            final int previousScore = nai.getCurrentScore();
                            nai.validated = true;
                            rematchNetworkAndRequests(nai, !previouslyValidated);
                            // If score has changed, rebroadcast to NetworkFactories. b/17726566
                            if (nai.getCurrentScore() != previousScore) {
                                sendUpdatedScoreToFactories(nai);
                            }
                        }
                        updateInetCondition(nai, valid);
                        // Let the NetworkAgent know the state of its network
@@ -2203,7 +2212,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        boolean keep = nai.isVPN();
                        for (int i = 0; i < nai.networkRequests.size() && !keep; i++) {
                            NetworkRequest r = nai.networkRequests.valueAt(i);
                            if (mNetworkRequests.get(r).isRequest) keep = true;
                            if (isRequest(r)) keep = true;
                        }
                        if (!keep) {
                            if (DBG) log("no live requests for " + nai.name() + "; disconnecting");
@@ -2487,6 +2496,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        if (nai == null) return;
        if (DBG) log("reportBadNetwork(" + nai.name() + ") by " + uid);
        synchronized (nai) {
            // Validating an uncreated network could result in a call to rematchNetworkAndRequests()
            // which isn't meant to work on uncreated networks.
            if (!nai.created) return;

            if (isNetworkBlocked(nai, uid)) return;

            nai.networkMonitor.sendMessage(NetworkMonitor.CMD_FORCE_REEVALUATION, uid);
@@ -3692,6 +3705,15 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        }
    }

    private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) {
        for (int i = 0; i < nai.networkRequests.size(); i++) {
            NetworkRequest nr = nai.networkRequests.valueAt(i);
            // Don't send listening requests to factories. b/17393458
            if (!isRequest(nr)) continue;
            sendUpdatedScoreToFactories(nr, nai.getCurrentScore());
        }
    }

    private void sendUpdatedScoreToFactories(NetworkRequest networkRequest, int score) {
        if (VDBG) log("sending new Min Network Score(" + score + "): " + networkRequest.toString());
        for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
@@ -3746,22 +3768,24 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        }
    }

    private void handleLingerComplete(NetworkAgentInfo oldNetwork) {
        if (oldNetwork == null) {
            loge("Unknown NetworkAgentInfo in handleLingerComplete");
            return;
        }
        if (DBG) {
            log("handleLingerComplete for " + oldNetwork.name());
            for (int i = 0; i < oldNetwork.networkRequests.size(); i++) {
                NetworkRequest nr = oldNetwork.networkRequests.valueAt(i);
    private void teardownUnneededNetwork(NetworkAgentInfo nai) {
        for (int i = 0; i < nai.networkRequests.size(); i++) {
            NetworkRequest nr = nai.networkRequests.valueAt(i);
            // Ignore listening requests.
                if (mNetworkRequests.get(nr).isRequest == false) continue;
            if (!isRequest(nr)) continue;
            loge("Dead network still had at least " + nr);
            break;
        }
        nai.asyncChannel.disconnect();
    }
        oldNetwork.asyncChannel.disconnect();

    private void handleLingerComplete(NetworkAgentInfo oldNetwork) {
        if (oldNetwork == null) {
            loge("Unknown NetworkAgentInfo in handleLingerComplete");
            return;
        }
        if (DBG) log("handleLingerComplete for " + oldNetwork.name());
        teardownUnneededNetwork(oldNetwork);
    }

    private void makeDefault(NetworkAgentInfo newNetwork) {
@@ -3898,7 +3922,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            for (int i = 0; i < nai.networkRequests.size() && teardown; i++) {
                NetworkRequest nr = nai.networkRequests.valueAt(i);
                try {
                if (mNetworkRequests.get(nr).isRequest) {
                if (isRequest(nr)) {
                    teardown = false;
                }
                } catch (Exception e) {
@@ -3961,14 +3985,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            // the lingering process so communication on that network is given time to wrap up.
            // TODO: Could teardown unvalidated networks when their NetworkCapabilities
            // satisfy no NetworkRequests.
            if (DBG && newNetwork.networkRequests.size() != 0) {
                loge("tearing down network with live requests:");
                for (int i=0; i < newNetwork.networkRequests.size(); i++) {
                    loge("  " + newNetwork.networkRequests.valueAt(i));
                }
            }
            if (DBG) log("Validated network turns out to be unwanted.  Tear it down.");
            newNetwork.asyncChannel.disconnect();
            teardownUnneededNetwork(newNetwork);
        }
    }

@@ -4097,12 +4115,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {

        if (nai.created) rematchAllNetworksAndRequests(nai, oldScore);

        for (int i = 0; i < nai.networkRequests.size(); i++) {
            NetworkRequest nr = nai.networkRequests.valueAt(i);
            // Don't send listening requests to factories. b/17393458
            if (mNetworkRequests.get(nr).isRequest == false) continue;
            sendUpdatedScoreToFactories(nr, score);
        }
        sendUpdatedScoreToFactories(nai);
    }

    // notify only this one new request of the current state