Merge "Integrate testNetworkService and Manager with Connectivity stack"
This commit is contained in:
@@ -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";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -220,4 +220,6 @@ interface IConnectivityManager
|
||||
|
||||
void registerTetheringEventCallback(ITetheringEventCallback callback, String callerPkg);
|
||||
void unregisterTetheringEventCallback(ITetheringEventCallback callback, String callerPkg);
|
||||
|
||||
IBinder startOrGetTestNetworkService();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user