Merge "Allow NetworkFactories to match any network specifier on a request" into mm-wireless-dev
This commit is contained in:
@ -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
|
||||
@ -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)) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -3678,6 +3678,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,
|
||||
|
@ -52,13 +52,16 @@ 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;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.util.Log;
|
||||
import android.util.LogPrinter;
|
||||
|
||||
@ -1291,6 +1294,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 };
|
||||
|
Reference in New Issue
Block a user