summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author James Mattis <jmattis@google.com> 2021-01-06 15:45:01 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-01-06 15:45:01 +0000
commitea848623c96b0c74d9554d6b0885577fee9c926a (patch)
tree283dc491e20354255f51027771a283341266f817
parent2652fbdaf19a14e608534ad1a7a4b443056d17fb (diff)
parent3b75f7a8e9b70ea0af6b5fd5ebeeee3574d2f4dc (diff)
Merge "Update to Diagnostic Callback flows for multilayer" am: 3b75f7a8e9
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1510596 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I2eb635ce32e4df1d0d0e78ff7398790d2f3fdc7e
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java17
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);