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

Commit 716cef8b authored by James Mattis's avatar James Mattis
Browse files

Adding multilayered requests to NetworkRequestInfo

Updating NetworkRequestInfo for "multilayered requests" functionality so that
requests can support a network hierarchy. I.e., requests network
with capability A first and if not available, request network with
capability B. This CL is the first step in adding that support by
updating the request object from a single request to a collection.

Bug: 171991028
Test: atest FrameworksNetTests
atest NetworkStackTests
atest FrameworksNetIntegrationTests
atest NetworkStackIntegrationTests
atest CtsNetTestCasesLatestSdk

Change-Id: I64a124802986e4cf4aa7de158c6690fdf9851cb2
parent cce157aa
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -235,6 +235,7 @@ import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.ConcurrentModificationException;
import java.util.HashMap;
@@ -5358,7 +5359,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
     * Also used to notice when the calling process dies so we can self-expire
     */
    private class NetworkRequestInfo implements IBinder.DeathRecipient {
        final List<NetworkRequest> mRequests;
        final NetworkRequest request;

        // The network currently satisfying this request, or null if none. Must only be touched
        // on the handler thread. This only makes sense for network requests and not for listens,
        // as defined by NetworkRequest#isRequest(). For listens, this is always null.
@@ -5373,6 +5376,7 @@ public class ConnectivityService extends IConnectivityManager.Stub

        NetworkRequestInfo(NetworkRequest r, PendingIntent pi) {
            request = r;
            mRequests = initializeRequests(r);
            ensureNetworkRequestHasType(request);
            mPendingIntent = pi;
            messenger = null;
@@ -5386,6 +5390,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            super();
            messenger = m;
            request = r;
            mRequests = initializeRequests(r);
            ensureNetworkRequestHasType(request);
            mBinder = binder;
            mPid = getCallingPid();
@@ -5404,6 +5409,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
            this(r, null);
        }

        private List<NetworkRequest> initializeRequests(NetworkRequest r) {
            final ArrayList<NetworkRequest> tempRequests = new ArrayList<>();
            tempRequests.add(new NetworkRequest(r));
            return Collections.unmodifiableList(tempRequests);
        }


        private void enforceRequestCountLimit() {
            synchronized (mUidToNetworkRequestCount) {
                int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1;