From ed3168e9e35eb0f779dd6b86c842d4fbf5ac2932 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Wed, 23 Jan 2019 17:54:08 +0900 Subject: Stop depending on the ConnectivityService default request. This avoids the need to expose ConnectivityService implementation details as @SystemApi and the complexities that would be required to make NetworkCapabilities parcelable in stable AIDL. Bug: 112869080 Test: atest FrameworksNetTests NetworkStackTests Change-Id: Icd5d25b9b8e9b7a7d1899b000c92dc4976c3b3d7 --- .../com/android/server/connectivity/NetworkMonitor.java | 5 +---- .../core/java/com/android/server/ConnectivityService.java | 3 +-- .../net/java/android/net/shared/NetworkMonitorUtils.java | 14 +++++++++++--- .../java/com/android/server/ConnectivityServiceTest.java | 9 +++++++-- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java index a3d7852c9f4a..6b31b82ec3cc 100644 --- a/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java +++ b/packages/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java @@ -247,7 +247,6 @@ public class NetworkMonitor extends StateMachine { private final TelephonyManager mTelephonyManager; private final WifiManager mWifiManager; private final ConnectivityManager mCm; - private final NetworkRequest mDefaultRequest; private final IpConnectivityLog mMetricsLog; private final Dependencies mDependencies; @@ -336,7 +335,6 @@ public class NetworkMonitor extends StateMachine { mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); mCm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - mDefaultRequest = defaultRequest; // CHECKSTYLE:OFF IndentationCheck addState(mDefaultState); @@ -486,8 +484,7 @@ public class NetworkMonitor extends StateMachine { } private boolean isValidationRequired() { - return NetworkMonitorUtils.isValidationRequired( - mDefaultRequest.networkCapabilities, mNetworkCapabilities); + return NetworkMonitorUtils.isValidationRequired(mNetworkCapabilities); } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 00550d9c660e..7ba6ac9cdc73 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2640,8 +2640,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } private boolean networkRequiresValidation(NetworkAgentInfo nai) { - return isValidationRequired( - mDefaultRequest.networkCapabilities, nai.networkCapabilities); + return isValidationRequired(nai.networkCapabilities); } private void handleFreshlyValidatedNetwork(NetworkAgentInfo nai) { diff --git a/services/net/java/android/net/shared/NetworkMonitorUtils.java b/services/net/java/android/net/shared/NetworkMonitorUtils.java index 463cf2af2897..3d2a2de45539 100644 --- a/services/net/java/android/net/shared/NetworkMonitorUtils.java +++ b/services/net/java/android/net/shared/NetworkMonitorUtils.java @@ -16,6 +16,11 @@ package android.net.shared; +import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; +import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED; +import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN; +import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED; + import android.content.Context; import android.net.NetworkCapabilities; import android.provider.Settings; @@ -58,9 +63,12 @@ public class NetworkMonitorUtils { * @param dfltNetCap Default requested network capabilities. * @param nc Network capabilities of the network to test. */ - public static boolean isValidationRequired( - NetworkCapabilities dfltNetCap, NetworkCapabilities nc) { + public static boolean isValidationRequired(NetworkCapabilities nc) { // TODO: Consider requiring validation for DUN networks. - return dfltNetCap.satisfiedByNetworkCapabilities(nc); + return nc != null + && nc.hasCapability(NET_CAPABILITY_INTERNET) + && nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED) + && nc.hasCapability(NET_CAPABILITY_TRUSTED) + && nc.hasCapability(NET_CAPABILITY_NOT_VPN); } } diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index 1c264184db4c..dda44819e664 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -1508,6 +1508,12 @@ public class ConnectivityServiceTest { verifyActiveNetwork(TRANSPORT_WIFI); } + @Test + public void testRequiresValidation() { + assertTrue(NetworkMonitorUtils.isValidationRequired( + mCm.getDefaultRequest().networkCapabilities)); + } + enum CallbackState { NONE, AVAILABLE, @@ -4404,8 +4410,7 @@ public class ConnectivityServiceTest { mMockVpn.setUids(ranges); // VPN networks do not satisfy the default request and are automatically validated // by NetworkMonitor - assertFalse(NetworkMonitorUtils.isValidationRequired( - mCm.getDefaultRequest().networkCapabilities, vpnNetworkAgent.mNetworkCapabilities)); + assertFalse(NetworkMonitorUtils.isValidationRequired(vpnNetworkAgent.mNetworkCapabilities)); vpnNetworkAgent.setNetworkValid(); vpnNetworkAgent.connect(false); -- cgit v1.2.3-59-g8ed1b