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

Commit 016ac0a9 authored by Benedict Wong's avatar Benedict Wong Committed by android-build-merger
Browse files

Merge "Integrate testNetworkService and Manager with Connectivity stack"

am: b86c3255

Change-Id: I571e583d896841c814efe58b8c0875fa9cd3873c
parents 842fd65f b86c3255
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -234,6 +234,7 @@ package android.content {
    method public android.os.UserHandle getUser();
    method public int getUserId();
    method public void setAutofillCompatibilityEnabled(boolean);
    field public static final String TEST_NETWORK_SERVICE = "test_network";
  }

}
+26 −0
Original line number Diff line number Diff line
@@ -84,11 +84,13 @@ import android.net.IEthernetManager;
import android.net.IIpMemoryStore;
import android.net.IIpSecService;
import android.net.INetworkPolicyManager;
import android.net.ITestNetworkManager;
import android.net.IpMemoryStore;
import android.net.IpSecManager;
import android.net.NetworkPolicyManager;
import android.net.NetworkScoreManager;
import android.net.NetworkWatchlistManager;
import android.net.TestNetworkManager;
import android.net.lowpan.ILowpanManager;
import android.net.lowpan.LowpanManager;
import android.net.nsd.INsdManager;
@@ -126,6 +128,7 @@ import android.os.IUserManager;
import android.os.IncidentManager;
import android.os.PowerManager;
import android.os.RecoverySystem;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.ServiceManager.ServiceNotFoundException;
import android.os.SystemUpdateManager;
@@ -315,6 +318,29 @@ final class SystemServiceRegistry {
                return new IpSecManager(ctx, service);
            }});

        registerService(
                Context.TEST_NETWORK_SERVICE,
                TestNetworkManager.class,
                new StaticApplicationContextServiceFetcher<TestNetworkManager>() {
                    @Override
                    public TestNetworkManager createService(Context context)
                            throws ServiceNotFoundException {
                        IBinder csBinder =
                                ServiceManager.getServiceOrThrow(Context.CONNECTIVITY_SERVICE);
                        IConnectivityManager csMgr =
                                IConnectivityManager.Stub.asInterface(csBinder);

                        final IBinder tnBinder;
                        try {
                            tnBinder = csMgr.startOrGetTestNetworkService();
                        } catch (RemoteException e) {
                            throw new ServiceNotFoundException(Context.TEST_NETWORK_SERVICE);
                        }
                        ITestNetworkManager tnMgr = ITestNetworkManager.Stub.asInterface(tnBinder);
                        return new TestNetworkManager(context, tnMgr);
                    }
                });

        registerService(Context.COUNTRY_DETECTOR, CountryDetector.class,
                new StaticServiceFetcher<CountryDetector>() {
            @Override
+10 −0
Original line number Diff line number Diff line
@@ -3016,6 +3016,7 @@ public abstract class Context {
            CONNECTIVITY_SERVICE,
            //@hide: IP_MEMORY_STORE_SERVICE,
            IPSEC_SERVICE,
            TEST_NETWORK_SERVICE,
            //@hide: UPDATE_LOCK_SERVICE,
            //@hide: NETWORKMANAGEMENT_SERVICE,
            NETWORK_STATS_SERVICE,
@@ -3537,6 +3538,15 @@ public abstract class Context {
     */
    public static final String IPSEC_SERVICE = "ipsec";

    /**
     * Use with {@link #getSystemService(String)} to retrieve a {@link
     * android.net.TestNetworkManager} for building TUNs and limited-use Networks
     *
     * @see #getSystemService(String)
     * @hide
     */
    @TestApi public static final String TEST_NETWORK_SERVICE = "test_network";

    /**
     * Use with {@link #getSystemService(String)} to retrieve a {@link
     * android.os.IUpdateLock} for managing runtime sequences that
+2 −0
Original line number Diff line number Diff line
@@ -220,4 +220,6 @@ interface IConnectivityManager

    void registerTetheringEventCallback(ITetheringEventCallback callback, String callerPkg);
    void unregisterTetheringEventCallback(ITetheringEventCallback callback, String callerPkg);

    IBinder startOrGetTestNetworkService();
}
+27 −0
Original line number Diff line number Diff line
@@ -300,6 +300,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private INetworkPolicyManager mPolicyManager;
    private NetworkPolicyManagerInternal mPolicyManagerInternal;

    /**
     * TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple
     * instances.
     */
    @GuardedBy("mTNSLock")
    private TestNetworkService mTNS;

    private final Object mTNSLock = new Object();

    private String mCurrentTcpBufferSizes;

    private static final SparseArray<String> sMagicDecoderRing = MessageUtils.findMessageNames(
@@ -6959,4 +6968,22 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return vpn != null && vpn.getLockdown();
        }
    }

    /**
     * Returns a IBinder to a TestNetworkService. Will be lazily created as needed.
     *
     * <p>The TestNetworkService must be run in the system server due to TUN creation.
     */
    @Override
    public IBinder startOrGetTestNetworkService() {
        synchronized (mTNSLock) {
            TestNetworkService.enforceTestNetworkPermissions(mContext);

            if (mTNS == null) {
                mTNS = new TestNetworkService(mContext, mNMS);
            }

            return mTNS;
        }
    }
}