Merge "Update to Diagnostic Callback flows for multilayer"
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user