Merge "Allow NetworkFactories to match any network specifier on a request" into mm-wireless-dev

This commit is contained in:
Etan Cohen
2016-01-28 18:20:09 +00:00
committed by Android Partner Code Review
4 changed files with 58 additions and 1 deletions

View File

@ -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)) {

View File

@ -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;
}

View File

@ -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,

View File

@ -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 };