Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd0858ba authored by Etan Cohen's avatar Etan Cohen Committed by Android Partner Code Review
Browse files

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

parents a3fc54f0 ddb9ef03
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -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)) {
+4 −0
Original line number Diff line number Diff line
@@ -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;
        }
+6 −0
Original line number Diff line number Diff line
@@ -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,
+33 −0
Original line number Diff line number Diff line
@@ -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 };