Merge "Update to Diagnostic Callback flows for multilayer"

This commit is contained in:
James Mattis
2021-01-06 15:25:56 +00:00
committed by Gerrit Code Review

View File

@@ -3597,8 +3597,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
private boolean isNetworkPotentialSatisfier( private boolean isNetworkPotentialSatisfier(
@NonNull final NetworkAgentInfo candidate, @NonNull final NetworkRequestInfo nri) { @NonNull final NetworkAgentInfo candidate, @NonNull final NetworkRequestInfo nri) {
// listen requests won't keep up a network satisfying it. If this is not a multilayer // 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 // request, return immediately. For multilayer requests, check to see if any of the
// any of the multilayer requests may have a potential satisfier. // multilayer requests may have a potential satisfier.
if (!nri.isMultilayerRequest() && nri.mRequests.get(0).isListen()) { if (!nri.isMultilayerRequest() && nri.mRequests.get(0).isListen()) {
return false; return false;
} }
@@ -8234,6 +8234,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
final IBinder iCb = cb.asBinder(); final IBinder iCb = cb.asBinder();
final NetworkRequestInfo nri = cbInfo.mRequestInfo; 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 // This means that the client registered the same callback multiple times. Do
// not override the previous entry, and exit silently. // not override the previous entry, and exit silently.
if (mConnectivityDiagnosticsCallbacks.containsKey(iCb)) { if (mConnectivityDiagnosticsCallbacks.containsKey(iCb)) {
@@ -8260,7 +8267,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
synchronized (mNetworkForNetId) { synchronized (mNetworkForNetId) {
for (int i = 0; i < mNetworkForNetId.size(); i++) { for (int i = 0; i < mNetworkForNetId.size(); i++) {
final NetworkAgentInfo nai = mNetworkForNetId.valueAt(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); matchingNetworks.add(nai);
} }
} }
@@ -8388,7 +8396,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
mConnectivityDiagnosticsCallbacks.entrySet()) { mConnectivityDiagnosticsCallbacks.entrySet()) {
final ConnectivityDiagnosticsCallbackInfo cbInfo = entry.getValue(); final ConnectivityDiagnosticsCallbackInfo cbInfo = entry.getValue();
final NetworkRequestInfo nri = cbInfo.mRequestInfo; 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( if (checkConnectivityDiagnosticsPermissions(
nri.mPid, nri.mUid, nai, cbInfo.mCallingPackageName)) { nri.mPid, nri.mUid, nai, cbInfo.mCallingPackageName)) {
results.add(entry.getValue().mCb); results.add(entry.getValue().mCb);