Loading core/java/android/net/NetworkCapabilities.java +15 −1 Original line number Diff line number Diff line Loading @@ -196,6 +196,19 @@ public final class NetworkCapabilities implements Parcelable { (1 << NET_CAPABILITY_VALIDATED) | (1 << NET_CAPABILITY_CAPTIVE_PORTAL); /** * Network specifier for factories which want to match any network specifier * (NS) in a request. Behavior: * <li>Empty NS in request matches any network factory NS</li> * <li>Empty NS in the network factory NS only matches a request with an * empty NS</li> * <li>"*" (this constant) NS in the network factory matches requests with * any NS</li> * * @hide */ public static final String MATCH_ALL_REQUESTS_NETWORK_SPECIFIER = "*"; /** * Network capabilities that are not allowed in NetworkRequests. This exists because the * NetworkFactory / NetworkAgent model does not deal well with the situation where a Loading Loading @@ -596,7 +609,8 @@ public final class NetworkCapabilities implements Parcelable { } private boolean satisfiedBySpecifier(NetworkCapabilities nc) { return (TextUtils.isEmpty(mNetworkSpecifier) || mNetworkSpecifier.equals(nc.mNetworkSpecifier)); mNetworkSpecifier.equals(nc.mNetworkSpecifier) || MATCH_ALL_REQUESTS_NETWORK_SPECIFIER.equals(nc.mNetworkSpecifier)); } private boolean equalsSpecifier(NetworkCapabilities nc) { if (TextUtils.isEmpty(mNetworkSpecifier)) { Loading core/java/android/net/NetworkRequest.java +4 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,10 @@ public class NetworkRequest implements Parcelable { * networks. */ public Builder setNetworkSpecifier(String networkSpecifier) { if (NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER.equals(networkSpecifier)) { throw new IllegalArgumentException("Invalid network specifier - must not be '" + NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER + "'"); } mNetworkCapabilities.setNetworkSpecifier(networkSpecifier); return this; } Loading services/core/java/com/android/server/ConnectivityService.java +6 −0 Original line number Diff line number Diff line Loading @@ -3800,6 +3800,12 @@ public class ConnectivityService extends IConnectivityManager.Stub throw new IllegalArgumentException("Bad timeout specified"); } if (NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER .equals(networkCapabilities.getNetworkSpecifier())) { throw new IllegalArgumentException("Invalid network specifier - must not be '" + NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER + "'"); } NetworkRequest networkRequest = new NetworkRequest(networkCapabilities, legacyType, nextNetworkRequestId()); NetworkRequestInfo nri = new NetworkRequestInfo(messenger, networkRequest, binder, Loading services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -52,10 +52,12 @@ import android.net.RouteInfo; import android.os.ConditionVariable; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.INetworkManagementService; import android.os.Looper; import android.os.Message; import android.os.MessageQueue; import android.os.Messenger; import android.os.MessageQueue.IdleHandler; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; Loading Loading @@ -1298,6 +1300,36 @@ public class ConnectivityServiceTest extends AndroidTestCase { validatedCallback.expectCallback(CallbackState.LOST); } @SmallTest public void testInvalidNetworkSpecifier() { boolean execptionCalled = true; try { NetworkRequest.Builder builder = new NetworkRequest.Builder(); builder.setNetworkSpecifier(MATCH_ALL_REQUESTS_NETWORK_SPECIFIER); execptionCalled = false; } catch (IllegalArgumentException e) { // do nothing - should get here } assertTrue("NetworkReqeuest builder with MATCH_ALL_REQUESTS_NETWORK_SPECIFIER", execptionCalled); try { NetworkCapabilities networkCapabilities = new NetworkCapabilities(); networkCapabilities.addTransportType(TRANSPORT_WIFI) .setNetworkSpecifier(NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER); mService.requestNetwork(networkCapabilities, null, 0, null, ConnectivityManager.TYPE_WIFI); execptionCalled = false; } catch (IllegalArgumentException e) { // do nothing - should get here } assertTrue("ConnectivityService requestNetwork with MATCH_ALL_REQUESTS_NETWORK_SPECIFIER", execptionCalled); } private static class TestKeepaliveCallback extends PacketKeepaliveCallback { public static enum CallbackType { ON_STARTED, ON_STOPPED, ON_ERROR }; Loading Loading
core/java/android/net/NetworkCapabilities.java +15 −1 Original line number Diff line number Diff line Loading @@ -196,6 +196,19 @@ public final class NetworkCapabilities implements Parcelable { (1 << NET_CAPABILITY_VALIDATED) | (1 << NET_CAPABILITY_CAPTIVE_PORTAL); /** * Network specifier for factories which want to match any network specifier * (NS) in a request. Behavior: * <li>Empty NS in request matches any network factory NS</li> * <li>Empty NS in the network factory NS only matches a request with an * empty NS</li> * <li>"*" (this constant) NS in the network factory matches requests with * any NS</li> * * @hide */ public static final String MATCH_ALL_REQUESTS_NETWORK_SPECIFIER = "*"; /** * Network capabilities that are not allowed in NetworkRequests. This exists because the * NetworkFactory / NetworkAgent model does not deal well with the situation where a Loading Loading @@ -596,7 +609,8 @@ public final class NetworkCapabilities implements Parcelable { } private boolean satisfiedBySpecifier(NetworkCapabilities nc) { return (TextUtils.isEmpty(mNetworkSpecifier) || mNetworkSpecifier.equals(nc.mNetworkSpecifier)); mNetworkSpecifier.equals(nc.mNetworkSpecifier) || MATCH_ALL_REQUESTS_NETWORK_SPECIFIER.equals(nc.mNetworkSpecifier)); } private boolean equalsSpecifier(NetworkCapabilities nc) { if (TextUtils.isEmpty(mNetworkSpecifier)) { Loading
core/java/android/net/NetworkRequest.java +4 −0 Original line number Diff line number Diff line Loading @@ -188,6 +188,10 @@ public class NetworkRequest implements Parcelable { * networks. */ public Builder setNetworkSpecifier(String networkSpecifier) { if (NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER.equals(networkSpecifier)) { throw new IllegalArgumentException("Invalid network specifier - must not be '" + NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER + "'"); } mNetworkCapabilities.setNetworkSpecifier(networkSpecifier); return this; } Loading
services/core/java/com/android/server/ConnectivityService.java +6 −0 Original line number Diff line number Diff line Loading @@ -3800,6 +3800,12 @@ public class ConnectivityService extends IConnectivityManager.Stub throw new IllegalArgumentException("Bad timeout specified"); } if (NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER .equals(networkCapabilities.getNetworkSpecifier())) { throw new IllegalArgumentException("Invalid network specifier - must not be '" + NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER + "'"); } NetworkRequest networkRequest = new NetworkRequest(networkCapabilities, legacyType, nextNetworkRequestId()); NetworkRequestInfo nri = new NetworkRequestInfo(messenger, networkRequest, binder, Loading
services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -52,10 +52,12 @@ import android.net.RouteInfo; import android.os.ConditionVariable; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; import android.os.INetworkManagementService; import android.os.Looper; import android.os.Message; import android.os.MessageQueue; import android.os.Messenger; import android.os.MessageQueue.IdleHandler; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; Loading Loading @@ -1298,6 +1300,36 @@ public class ConnectivityServiceTest extends AndroidTestCase { validatedCallback.expectCallback(CallbackState.LOST); } @SmallTest public void testInvalidNetworkSpecifier() { boolean execptionCalled = true; try { NetworkRequest.Builder builder = new NetworkRequest.Builder(); builder.setNetworkSpecifier(MATCH_ALL_REQUESTS_NETWORK_SPECIFIER); execptionCalled = false; } catch (IllegalArgumentException e) { // do nothing - should get here } assertTrue("NetworkReqeuest builder with MATCH_ALL_REQUESTS_NETWORK_SPECIFIER", execptionCalled); try { NetworkCapabilities networkCapabilities = new NetworkCapabilities(); networkCapabilities.addTransportType(TRANSPORT_WIFI) .setNetworkSpecifier(NetworkCapabilities.MATCH_ALL_REQUESTS_NETWORK_SPECIFIER); mService.requestNetwork(networkCapabilities, null, 0, null, ConnectivityManager.TYPE_WIFI); execptionCalled = false; } catch (IllegalArgumentException e) { // do nothing - should get here } assertTrue("ConnectivityService requestNetwork with MATCH_ALL_REQUESTS_NETWORK_SPECIFIER", execptionCalled); } private static class TestKeepaliveCallback extends PacketKeepaliveCallback { public static enum CallbackType { ON_STARTED, ON_STOPPED, ON_ERROR }; Loading