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
This commit is contained in:
James Mattis
2020-11-03 15:54:33 -08:00
parent 9869d309a6
commit 60b84b216b

View File

@@ -235,6 +235,7 @@ import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.ConcurrentModificationException; import java.util.ConcurrentModificationException;
import java.util.HashMap; 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 * Also used to notice when the calling process dies so we can self-expire
*/ */
private class NetworkRequestInfo implements IBinder.DeathRecipient { private class NetworkRequestInfo implements IBinder.DeathRecipient {
final List<NetworkRequest> mRequests;
final NetworkRequest request; final NetworkRequest request;
// The network currently satisfying this request, or null if none. Must only be touched // 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, // 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. // 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) { NetworkRequestInfo(NetworkRequest r, PendingIntent pi) {
request = r; request = r;
mRequests = initializeRequests(r);
ensureNetworkRequestHasType(request); ensureNetworkRequestHasType(request);
mPendingIntent = pi; mPendingIntent = pi;
messenger = null; messenger = null;
@@ -5386,6 +5390,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
super(); super();
messenger = m; messenger = m;
request = r; request = r;
mRequests = initializeRequests(r);
ensureNetworkRequestHasType(request); ensureNetworkRequestHasType(request);
mBinder = binder; mBinder = binder;
mPid = getCallingPid(); mPid = getCallingPid();
@@ -5404,6 +5409,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
this(r, null); 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() { private void enforceRequestCountLimit() {
synchronized (mUidToNetworkRequestCount) { synchronized (mUidToNetworkRequestCount) {
int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1; int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1;