From 60b84b216b4d047ed815c65afff282342a6fb2b7 Mon Sep 17 00:00:00 2001 From: James Mattis Date: Tue, 3 Nov 2020 15:54:33 -0800 Subject: [PATCH] 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 --- .../java/com/android/server/ConnectivityService.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index a992aa6c40..93825ca560 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -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 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 initializeRequests(NetworkRequest r) { + final ArrayList tempRequests = new ArrayList<>(); + tempRequests.add(new NetworkRequest(r)); + return Collections.unmodifiableList(tempRequests); + } + + private void enforceRequestCountLimit() { synchronized (mUidToNetworkRequestCount) { int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1;