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

Commit 47360635 authored by Paul Jensen's avatar Paul Jensen Committed by Android Git Automerger
Browse files

am 367eb2bb: am a11b5e34: Merge "Send updated NetworkAgent score to...

am 367eb2bb: am a11b5e34: Merge "Send updated NetworkAgent score to NetworkFactories when validated." into lmp-dev

* commit '367eb2bb':
  Send updated NetworkAgent score to NetworkFactories when validated.
parents 6846f598 367eb2bb
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