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_VALIDATED) |
|
||||||
(1 << NET_CAPABILITY_CAPTIVE_PORTAL);
|
(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
|
* Network capabilities that are not allowed in NetworkRequests. This exists because the
|
||||||
* NetworkFactory / NetworkAgent model does not deal well with the situation where a
|
* 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) {
|
private boolean satisfiedBySpecifier(NetworkCapabilities nc) {
|
||||||
return (TextUtils.isEmpty(mNetworkSpecifier) ||
|
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) {
|
private boolean equalsSpecifier(NetworkCapabilities nc) {
|
||||||
if (TextUtils.isEmpty(mNetworkSpecifier)) {
|
if (TextUtils.isEmpty(mNetworkSpecifier)) {
|
||||||
|
@ -188,6 +188,10 @@ public class NetworkRequest implements Parcelable {
|
|||||||
* networks.
|
* networks.
|
||||||
*/
|
*/
|
||||||
public Builder setNetworkSpecifier(String networkSpecifier) {
|
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);
|
mNetworkCapabilities.setNetworkSpecifier(networkSpecifier);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -3678,6 +3678,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
throw new IllegalArgumentException("Bad timeout specified");
|
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,
|
NetworkRequest networkRequest = new NetworkRequest(networkCapabilities, legacyType,
|
||||||
nextNetworkRequestId());
|
nextNetworkRequestId());
|
||||||
NetworkRequestInfo nri = new NetworkRequestInfo(messenger, networkRequest, binder,
|
NetworkRequestInfo nri = new NetworkRequestInfo(messenger, networkRequest, binder,
|
||||||
|
@ -52,13 +52,16 @@ import android.net.RouteInfo;
|
|||||||
import android.os.ConditionVariable;
|
import android.os.ConditionVariable;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
|
import android.os.IBinder;
|
||||||
import android.os.INetworkManagementService;
|
import android.os.INetworkManagementService;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.MessageQueue;
|
import android.os.MessageQueue;
|
||||||
|
import android.os.Messenger;
|
||||||
import android.os.MessageQueue.IdleHandler;
|
import android.os.MessageQueue.IdleHandler;
|
||||||
import android.test.AndroidTestCase;
|
import android.test.AndroidTestCase;
|
||||||
import android.test.suitebuilder.annotation.LargeTest;
|
import android.test.suitebuilder.annotation.LargeTest;
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.LogPrinter;
|
import android.util.LogPrinter;
|
||||||
|
|
||||||
@ -1291,6 +1294,36 @@ public class ConnectivityServiceTest extends AndroidTestCase {
|
|||||||
validatedCallback.expectCallback(CallbackState.LOST);
|
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 {
|
private static class TestKeepaliveCallback extends PacketKeepaliveCallback {
|
||||||
|
|
||||||
public static enum CallbackType { ON_STARTED, ON_STOPPED, ON_ERROR };
|
public static enum CallbackType { ON_STARTED, ON_STOPPED, ON_ERROR };
|
||||||
|
Reference in New Issue
Block a user