Loading core/java/android/net/ConnectivityManager.java +29 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.util.ArrayMap; Loading Loading @@ -2701,6 +2702,28 @@ public class ConnectivityManager { } } /** * Constant error codes used by ConnectivityService to communicate about failures and errors * across a Binder boundary. * @hide */ public interface Errors { static int TOO_MANY_REQUESTS = 1; } /** @hide */ public static class TooManyRequestsException extends RuntimeException {} private static RuntimeException convertServiceException(ServiceSpecificException e) { switch (e.errorCode) { case Errors.TOO_MANY_REQUESTS: return new TooManyRequestsException(); default: Log.w(TAG, "Unknown service error code " + e.errorCode); return new RuntimeException(e); } } private static final int BASE = Protocol.BASE_CONNECTIVITY_MANAGER; /** @hide */ public static final int CALLBACK_PRECHECK = BASE + 1; Loading Loading @@ -2892,6 +2915,8 @@ public class ConnectivityManager { } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (ServiceSpecificException e) { throw convertServiceException(e); } return request; } Loading Loading @@ -3177,6 +3202,8 @@ public class ConnectivityManager { mService.pendingRequestForNetwork(request.networkCapabilities, operation); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (ServiceSpecificException e) { throw convertServiceException(e); } } Loading Loading @@ -3279,6 +3306,8 @@ public class ConnectivityManager { mService.pendingListenForNetwork(request.networkCapabilities, operation); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (ServiceSpecificException e) { throw convertServiceException(e); } } Loading services/core/java/com/android/server/ConnectivityService.java +3 −1 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceSpecificException; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; Loading Loading @@ -4064,7 +4065,8 @@ public class ConnectivityService extends IConnectivityManager.Stub synchronized (mUidToNetworkRequestCount) { int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1; if (networkRequests >= MAX_NETWORK_REQUESTS_PER_UID) { throw new IllegalArgumentException("Too many NetworkRequests filed"); throw new ServiceSpecificException( ConnectivityManager.Errors.TOO_MANY_REQUESTS); } mUidToNetworkRequestCount.put(mUid, networkRequests); } Loading tests/net/java/android/net/ConnectivityManagerTest.java +38 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.PendingIntent; import android.net.ConnectivityManager; import android.net.NetworkCapabilities; import android.content.Context; Loading @@ -66,8 +67,6 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @RunWith(AndroidJUnit4.class) @SmallTest public class ConnectivityManagerTest { Loading Loading @@ -296,6 +295,43 @@ public class ConnectivityManagerTest { manager.requestNetwork(request, callback); } @Test public void testArgumentValidation() throws Exception { ConnectivityManager manager = new ConnectivityManager(mCtx, mService); NetworkRequest request = mock(NetworkRequest.class); NetworkCallback callback = mock(NetworkCallback.class); Handler handler = mock(Handler.class); NetworkCallback nullCallback = null; PendingIntent nullIntent = null; mustFail(() -> { manager.requestNetwork(null, callback); }); mustFail(() -> { manager.requestNetwork(request, nullCallback); }); mustFail(() -> { manager.requestNetwork(request, callback, null); }); mustFail(() -> { manager.requestNetwork(request, callback, -1); }); mustFail(() -> { manager.requestNetwork(request, nullIntent); }); mustFail(() -> { manager.registerNetworkCallback(null, callback, handler); }); mustFail(() -> { manager.registerNetworkCallback(request, null, handler); }); mustFail(() -> { manager.registerNetworkCallback(request, callback, null); }); mustFail(() -> { manager.registerNetworkCallback(request, nullIntent); }); mustFail(() -> { manager.registerDefaultNetworkCallback(null, handler); }); mustFail(() -> { manager.registerDefaultNetworkCallback(callback, null); }); mustFail(() -> { manager.unregisterNetworkCallback(nullCallback); }); mustFail(() -> { manager.unregisterNetworkCallback(nullIntent); }); mustFail(() -> { manager.releaseNetworkRequest(nullIntent); }); } static void mustFail(Runnable fn) { try { fn.run(); fail(); } catch (Exception expected) { } } static Message makeMessage(NetworkRequest req, int messageType) { Bundle bundle = new Bundle(); bundle.putParcelable(NetworkRequest.class.getSimpleName(), req); Loading tests/net/java/com/android/server/ConnectivityServiceTest.java +5 −4 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.PacketKeepalive; import android.net.ConnectivityManager.PacketKeepaliveCallback; import android.net.ConnectivityManager.TooManyRequestsException; import android.net.INetworkPolicyManager; import android.net.INetworkStatsService; import android.net.IpPrefix; Loading Loading @@ -2981,7 +2982,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallbacks.add(networkCallback); } fail("Registering " + MAX_REQUESTS + " NetworkRequests did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (NetworkCallback networkCallback : networkCallbacks) { mCm.unregisterNetworkCallback(networkCallback); } Loading @@ -2994,7 +2995,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallbacks.add(networkCallback); } fail("Registering " + MAX_REQUESTS + " NetworkCallbacks did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (NetworkCallback networkCallback : networkCallbacks) { mCm.unregisterNetworkCallback(networkCallback); } Loading @@ -3010,7 +3011,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { } fail("Registering " + MAX_REQUESTS + " PendingIntent NetworkRequests did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (PendingIntent pendingIntent : pendingIntents) { mCm.unregisterNetworkCallback(pendingIntent); } Loading @@ -3025,7 +3026,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { } fail("Registering " + MAX_REQUESTS + " PendingIntent NetworkCallbacks did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (PendingIntent pendingIntent : pendingIntents) { mCm.unregisterNetworkCallback(pendingIntent); } Loading Loading
core/java/android/net/ConnectivityManager.java +29 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.util.ArrayMap; Loading Loading @@ -2701,6 +2702,28 @@ public class ConnectivityManager { } } /** * Constant error codes used by ConnectivityService to communicate about failures and errors * across a Binder boundary. * @hide */ public interface Errors { static int TOO_MANY_REQUESTS = 1; } /** @hide */ public static class TooManyRequestsException extends RuntimeException {} private static RuntimeException convertServiceException(ServiceSpecificException e) { switch (e.errorCode) { case Errors.TOO_MANY_REQUESTS: return new TooManyRequestsException(); default: Log.w(TAG, "Unknown service error code " + e.errorCode); return new RuntimeException(e); } } private static final int BASE = Protocol.BASE_CONNECTIVITY_MANAGER; /** @hide */ public static final int CALLBACK_PRECHECK = BASE + 1; Loading Loading @@ -2892,6 +2915,8 @@ public class ConnectivityManager { } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (ServiceSpecificException e) { throw convertServiceException(e); } return request; } Loading Loading @@ -3177,6 +3202,8 @@ public class ConnectivityManager { mService.pendingRequestForNetwork(request.networkCapabilities, operation); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (ServiceSpecificException e) { throw convertServiceException(e); } } Loading Loading @@ -3279,6 +3306,8 @@ public class ConnectivityManager { mService.pendingListenForNetwork(request.networkCapabilities, operation); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } catch (ServiceSpecificException e) { throw convertServiceException(e); } } Loading
services/core/java/com/android/server/ConnectivityService.java +3 −1 Original line number Diff line number Diff line Loading @@ -98,6 +98,7 @@ import android.os.PowerManager; import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceSpecificException; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; Loading Loading @@ -4064,7 +4065,8 @@ public class ConnectivityService extends IConnectivityManager.Stub synchronized (mUidToNetworkRequestCount) { int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1; if (networkRequests >= MAX_NETWORK_REQUESTS_PER_UID) { throw new IllegalArgumentException("Too many NetworkRequests filed"); throw new ServiceSpecificException( ConnectivityManager.Errors.TOO_MANY_REQUESTS); } mUidToNetworkRequestCount.put(mUid, networkRequests); } Loading
tests/net/java/android/net/ConnectivityManagerTest.java +38 −2 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.PendingIntent; import android.net.ConnectivityManager; import android.net.NetworkCapabilities; import android.content.Context; Loading @@ -66,8 +67,6 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @RunWith(AndroidJUnit4.class) @SmallTest public class ConnectivityManagerTest { Loading Loading @@ -296,6 +295,43 @@ public class ConnectivityManagerTest { manager.requestNetwork(request, callback); } @Test public void testArgumentValidation() throws Exception { ConnectivityManager manager = new ConnectivityManager(mCtx, mService); NetworkRequest request = mock(NetworkRequest.class); NetworkCallback callback = mock(NetworkCallback.class); Handler handler = mock(Handler.class); NetworkCallback nullCallback = null; PendingIntent nullIntent = null; mustFail(() -> { manager.requestNetwork(null, callback); }); mustFail(() -> { manager.requestNetwork(request, nullCallback); }); mustFail(() -> { manager.requestNetwork(request, callback, null); }); mustFail(() -> { manager.requestNetwork(request, callback, -1); }); mustFail(() -> { manager.requestNetwork(request, nullIntent); }); mustFail(() -> { manager.registerNetworkCallback(null, callback, handler); }); mustFail(() -> { manager.registerNetworkCallback(request, null, handler); }); mustFail(() -> { manager.registerNetworkCallback(request, callback, null); }); mustFail(() -> { manager.registerNetworkCallback(request, nullIntent); }); mustFail(() -> { manager.registerDefaultNetworkCallback(null, handler); }); mustFail(() -> { manager.registerDefaultNetworkCallback(callback, null); }); mustFail(() -> { manager.unregisterNetworkCallback(nullCallback); }); mustFail(() -> { manager.unregisterNetworkCallback(nullIntent); }); mustFail(() -> { manager.releaseNetworkRequest(nullIntent); }); } static void mustFail(Runnable fn) { try { fn.run(); fail(); } catch (Exception expected) { } } static Message makeMessage(NetworkRequest req, int messageType) { Bundle bundle = new Bundle(); bundle.putParcelable(NetworkRequest.class.getSimpleName(), req); Loading
tests/net/java/com/android/server/ConnectivityServiceTest.java +5 −4 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.net.ConnectivityManager; import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.PacketKeepalive; import android.net.ConnectivityManager.PacketKeepaliveCallback; import android.net.ConnectivityManager.TooManyRequestsException; import android.net.INetworkPolicyManager; import android.net.INetworkStatsService; import android.net.IpPrefix; Loading Loading @@ -2981,7 +2982,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallbacks.add(networkCallback); } fail("Registering " + MAX_REQUESTS + " NetworkRequests did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (NetworkCallback networkCallback : networkCallbacks) { mCm.unregisterNetworkCallback(networkCallback); } Loading @@ -2994,7 +2995,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { networkCallbacks.add(networkCallback); } fail("Registering " + MAX_REQUESTS + " NetworkCallbacks did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (NetworkCallback networkCallback : networkCallbacks) { mCm.unregisterNetworkCallback(networkCallback); } Loading @@ -3010,7 +3011,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { } fail("Registering " + MAX_REQUESTS + " PendingIntent NetworkRequests did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (PendingIntent pendingIntent : pendingIntents) { mCm.unregisterNetworkCallback(pendingIntent); } Loading @@ -3025,7 +3026,7 @@ public class ConnectivityServiceTest extends AndroidTestCase { } fail("Registering " + MAX_REQUESTS + " PendingIntent NetworkCallbacks did not throw exception"); } catch (IllegalArgumentException expected) {} } catch (TooManyRequestsException expected) {} for (PendingIntent pendingIntent : pendingIntents) { mCm.unregisterNetworkCallback(pendingIntent); } Loading