diff options
| author | 2021-01-06 15:25:56 +0000 | |
|---|---|---|
| committer | 2021-01-06 15:25:56 +0000 | |
| commit | 3b75f7a8e9b70ea0af6b5fd5ebeeee3574d2f4dc (patch) | |
| tree | 305989bb483a5c82e3036953bca24218a3fbb728 | |
| parent | 91348d9f22baa85e8ba1054785e01506301c38b2 (diff) | |
| parent | 626c042a99e06b3cbafea348f74d8ef491a62712 (diff) | |
Merge "Update to Diagnostic Callback flows for multilayer"
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 4e75a9ed2167..13787768dc93 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -3597,8 +3597,8 @@ public class ConnectivityService extends IConnectivityManager.Stub private boolean isNetworkPotentialSatisfier( @NonNull final NetworkAgentInfo candidate, @NonNull final NetworkRequestInfo nri) { // listen requests won't keep up a network satisfying it. If this is not a multilayer - // request, we can return immediately. For multilayer requests, we have to check to see if - // any of the multilayer requests may have a potential satisfier. + // request, return immediately. For multilayer requests, check to see if any of the + // multilayer requests may have a potential satisfier. if (!nri.isMultilayerRequest() && nri.mRequests.get(0).isListen()) { return false; } @@ -8234,6 +8234,13 @@ public class ConnectivityService extends IConnectivityManager.Stub final IBinder iCb = cb.asBinder(); final NetworkRequestInfo nri = cbInfo.mRequestInfo; + // Connectivity Diagnostics are meant to be used with a single network request. It would be + // confusing for these networks to change when an NRI is satisfied in another layer. + if (nri.isMultilayerRequest()) { + throw new IllegalArgumentException("Connectivity Diagnostics do not support multilayer " + + "network requests."); + } + // This means that the client registered the same callback multiple times. Do // not override the previous entry, and exit silently. if (mConnectivityDiagnosticsCallbacks.containsKey(iCb)) { @@ -8260,7 +8267,8 @@ public class ConnectivityService extends IConnectivityManager.Stub synchronized (mNetworkForNetId) { for (int i = 0; i < mNetworkForNetId.size(); i++) { final NetworkAgentInfo nai = mNetworkForNetId.valueAt(i); - if (nai.satisfies(nri.request)) { + // Connectivity Diagnostics rejects multilayer requests at registration hence get(0) + if (nai.satisfies(nri.mRequests.get(0))) { matchingNetworks.add(nai); } } @@ -8388,7 +8396,8 @@ public class ConnectivityService extends IConnectivityManager.Stub mConnectivityDiagnosticsCallbacks.entrySet()) { final ConnectivityDiagnosticsCallbackInfo cbInfo = entry.getValue(); final NetworkRequestInfo nri = cbInfo.mRequestInfo; - if (nai.satisfies(nri.request)) { + // Connectivity Diagnostics rejects multilayer requests at registration hence get(0). + if (nai.satisfies(nri.mRequests.get(0))) { if (checkConnectivityDiagnosticsPermissions( nri.mPid, nri.mUid, nai, cbInfo.mCallingPackageName)) { results.add(entry.getValue().mCb); |