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

Commit 000865a2 authored by James Mattis's avatar James Mattis
Browse files

Allow a way to track the active request in an NRI

As we are now allowing for multi-layered requests in NetworkRequestInfo
(NRI), we need a way to track which of those requests ended up being
satisfied. This also includes updates to NetworkRequestInfo itself to
support multilayared requests.

Bug: 173146509
Bug: 171991028
Test: atest FrameworksNetTests
atest FrameworksNetIntegrationTests
atest CtsNetTestCasesLatestSdk
Change-Id: I7bb5a564769c90928871fe28de05195c9cfae6b5

Change-Id: Ibf37f94b53eb2e833821553e00d76fe38bfea266
parent ebc78a4c
Loading
Loading
Loading
Loading
+32 −5
Original line number Diff line number Diff line
@@ -5350,6 +5350,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
        }
    }

    private void ensureAllNetworkRequestsHaveType(List<NetworkRequest> requests) {
        for (int i = 0; i < requests.size(); i++) {
            ensureNetworkRequestHasType(requests.get(i));
        }
    }

    private void ensureNetworkRequestHasType(NetworkRequest request) {
        if (request.type == NetworkRequest.Type.NONE) {
            throw new IllegalArgumentException(
@@ -5380,7 +5386,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        NetworkRequestInfo(NetworkRequest r, PendingIntent pi) {
            request = r;
            mRequests = initializeRequests(r);
            ensureNetworkRequestHasType(request);
            ensureAllNetworkRequestsHaveType(mRequests);
            mPendingIntent = pi;
            messenger = null;
            mBinder = null;
@@ -5394,7 +5400,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            messenger = m;
            request = r;
            mRequests = initializeRequests(r);
            ensureNetworkRequestHasType(request);
            ensureAllNetworkRequestsHaveType(mRequests);
            mBinder = binder;
            mPid = getCallingPid();
            mUid = getCallingUid();
@@ -5418,6 +5424,19 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return Collections.unmodifiableList(tempRequests);
        }

        private NetworkRequest getSatisfiedRequest() {
            if (mSatisfier == null) {
                return null;
            }

            for (NetworkRequest req : mRequests) {
                if (mSatisfier.isSatisfyingRequest(req.requestId)) {
                    return req;
                }
            }

            return null;
        }

        private void enforceRequestCountLimit() {
            synchronized (mUidToNetworkRequestCount) {
@@ -5436,14 +5455,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
            }
        }

        @Override
        public void binderDied() {
            log("ConnectivityService NetworkRequestInfo binderDied(" +
                    request + ", " + mBinder + ")");
            releaseNetworkRequest(request);
                    mRequests + ", " + mBinder + ")");
            releaseNetworkRequest(mRequests);
        }

        @Override
        public String toString() {
            return "uid/pid:" + mUid + "/" + mPid + " " + request
            return "uid/pid:" + mUid + "/" + mPid + " " + mRequests
                    + (mPendingIntent == null ? "" : " to trigger " + mPendingIntent);
        }
    }
@@ -5763,6 +5784,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
        return mNextNetworkProviderId.getAndIncrement();
    }

    private void releaseNetworkRequest(List<NetworkRequest> networkRequests) {
        for (int i = 0; i < networkRequests.size(); i++) {
            releaseNetworkRequest(networkRequests.get(i));
        }
    }

    @Override
    public void releaseNetworkRequest(NetworkRequest networkRequest) {
        ensureNetworkRequestHasType(networkRequest);