Stop using NetworkFactory in connectivity code.

Bug: 138306002
Test: builds, boots
Test: atest FrameworksNetTests
Change-Id: I6b9979f343108c0c077abd86ae1c21e5ece0cccc
This commit is contained in:
Lorenzo Colitti
2020-01-10 00:40:28 +09:00
parent 0e82d1c50d
commit a86fae785a
5 changed files with 83 additions and 87 deletions

View File

@@ -3121,8 +3121,6 @@ public class ConnectivityManager {
@RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
public int registerNetworkProvider(@NonNull NetworkProvider provider) { public int registerNetworkProvider(@NonNull NetworkProvider provider) {
if (provider.getProviderId() != NetworkProvider.ID_NONE) { if (provider.getProviderId() != NetworkProvider.ID_NONE) {
// TODO: Provide a better method for checking this by moving NetworkFactory.SerialNumber
// out of NetworkFactory.
throw new IllegalStateException("NetworkProviders can only be registered once"); throw new IllegalStateException("NetworkProviders can only be registered once");
} }
@@ -3176,8 +3174,7 @@ public class ConnectivityManager {
@RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp, public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp,
NetworkCapabilities nc, int score, NetworkMisc misc) { NetworkCapabilities nc, int score, NetworkMisc misc) {
return registerNetworkAgent(messenger, ni, lp, nc, score, misc, return registerNetworkAgent(messenger, ni, lp, nc, score, misc, NetworkProvider.ID_NONE);
NetworkFactory.SerialNumber.NONE);
} }
/** /**
@@ -3187,10 +3184,9 @@ public class ConnectivityManager {
*/ */
@RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp, public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp,
NetworkCapabilities nc, int score, NetworkMisc misc, int factorySerialNumber) { NetworkCapabilities nc, int score, NetworkMisc misc, int providerId) {
try { try {
return mService.registerNetworkAgent(messenger, ni, lp, nc, score, misc, return mService.registerNetworkAgent(messenger, ni, lp, nc, score, misc, providerId);
factorySerialNumber);
} catch (RemoteException e) { } catch (RemoteException e) {
throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer();
} }

View File

@@ -58,7 +58,7 @@ public abstract class NetworkAgent extends Handler {
private static final long BW_REFRESH_MIN_WIN_MS = 500; private static final long BW_REFRESH_MIN_WIN_MS = 500;
private boolean mPollLceScheduled = false; private boolean mPollLceScheduled = false;
private AtomicBoolean mPollLcePending = new AtomicBoolean(false); private AtomicBoolean mPollLcePending = new AtomicBoolean(false);
public final int mFactorySerialNumber; public final int mProviderId;
private static final int BASE = Protocol.BASE_NETWORK_AGENT; private static final int BASE = Protocol.BASE_NETWORK_AGENT;
@@ -219,25 +219,25 @@ public abstract class NetworkAgent extends Handler {
// the entire tree. // the entire tree.
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni, public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score) { NetworkCapabilities nc, LinkProperties lp, int score) {
this(looper, context, logTag, ni, nc, lp, score, null, NetworkFactory.SerialNumber.NONE); this(looper, context, logTag, ni, nc, lp, score, null, NetworkProvider.ID_NONE);
} }
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni, public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc) { NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc) {
this(looper, context, logTag, ni, nc, lp, score, misc, NetworkFactory.SerialNumber.NONE); this(looper, context, logTag, ni, nc, lp, score, misc, NetworkProvider.ID_NONE);
} }
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni, public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score, int factorySerialNumber) { NetworkCapabilities nc, LinkProperties lp, int score, int providerId) {
this(looper, context, logTag, ni, nc, lp, score, null, factorySerialNumber); this(looper, context, logTag, ni, nc, lp, score, null, providerId);
} }
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni, public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc, NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc,
int factorySerialNumber) { int providerId) {
super(looper); super(looper);
LOG_TAG = logTag; LOG_TAG = logTag;
mContext = context; mContext = context;
mFactorySerialNumber = factorySerialNumber; mProviderId = providerId;
if (ni == null || nc == null || lp == null) { if (ni == null || nc == null || lp == null) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
@@ -246,8 +246,7 @@ public abstract class NetworkAgent extends Handler {
ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService( ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
Context.CONNECTIVITY_SERVICE); Context.CONNECTIVITY_SERVICE);
netId = cm.registerNetworkAgent(new Messenger(this), new NetworkInfo(ni), netId = cm.registerNetworkAgent(new Messenger(this), new NetworkInfo(ni),
new LinkProperties(lp), new NetworkCapabilities(nc), score, misc, new LinkProperties(lp), new NetworkCapabilities(nc), score, misc, providerId);
factorySerialNumber);
} }
@Override @Override

View File

@@ -366,10 +366,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
private static final int EVENT_PROXY_HAS_CHANGED = 16; private static final int EVENT_PROXY_HAS_CHANGED = 16;
/** /**
* used internally when registering NetworkFactories * used internally when registering NetworkProviders
* obj = NetworkFactoryInfo * obj = NetworkProviderInfo
*/ */
private static final int EVENT_REGISTER_NETWORK_FACTORY = 17; private static final int EVENT_REGISTER_NETWORK_PROVIDER = 17;
/** /**
* used internally when registering NetworkAgents * used internally when registering NetworkAgents
@@ -405,10 +405,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
private static final int EVENT_RELEASE_NETWORK_REQUEST = 22; private static final int EVENT_RELEASE_NETWORK_REQUEST = 22;
/** /**
* used internally when registering NetworkFactories * used internally when registering NetworkProviders
* obj = Messenger * obj = Messenger
*/ */
private static final int EVENT_UNREGISTER_NETWORK_FACTORY = 23; private static final int EVENT_UNREGISTER_NETWORK_PROVIDER = 23;
/** /**
* used internally to expire a wakelock when transitioning * used internally to expire a wakelock when transitioning
@@ -2387,9 +2387,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
return; return;
} }
pw.print("NetworkFactories for:"); pw.print("NetworkProviders for:");
for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) { for (NetworkProviderInfo npi : mNetworkProviderInfos.values()) {
pw.print(" " + nfi.name); pw.print(" " + npi.name);
} }
pw.println(); pw.println();
pw.println(); pw.println();
@@ -2720,7 +2720,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
nai.lastValidated = valid; nai.lastValidated = valid;
nai.everValidated |= valid; nai.everValidated |= valid;
updateCapabilities(oldScore, nai, nai.networkCapabilities); updateCapabilities(oldScore, nai, nai.networkCapabilities);
// If score has changed, rebroadcast to NetworkFactories. b/17726566 // If score has changed, rebroadcast to NetworkProviders. b/17726566
if (oldScore != nai.getCurrentScore()) sendUpdatedScoreToFactories(nai); if (oldScore != nai.getCurrentScore()) sendUpdatedScoreToFactories(nai);
if (valid) { if (valid) {
handleFreshlyValidatedNetwork(nai); handleFreshlyValidatedNetwork(nai);
@@ -2835,6 +2835,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
return true; return true;
} }
// TODO: delete when direct use of registerNetworkFactory is no longer supported.
private boolean maybeHandleNetworkFactoryMessage(Message msg) { private boolean maybeHandleNetworkFactoryMessage(Message msg) {
switch (msg.what) { switch (msg.what) {
default: default:
@@ -3024,16 +3025,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
private void handleAsyncChannelHalfConnect(Message msg) { private void handleAsyncChannelHalfConnect(Message msg) {
ensureRunningOnConnectivityServiceThread(); ensureRunningOnConnectivityServiceThread();
final AsyncChannel ac = (AsyncChannel) msg.obj; final AsyncChannel ac = (AsyncChannel) msg.obj;
if (mNetworkFactoryInfos.containsKey(msg.replyTo)) { if (mNetworkProviderInfos.containsKey(msg.replyTo)) {
if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
if (VDBG) log("NetworkFactory connected"); if (VDBG) log("NetworkFactory connected");
// Finish setting up the full connection // Finish setting up the full connection
NetworkFactoryInfo nfi = mNetworkFactoryInfos.get(msg.replyTo); NetworkProviderInfo npi = mNetworkProviderInfos.get(msg.replyTo);
nfi.completeConnection(); npi.completeConnection();
sendAllRequestsToFactory(nfi); sendAllRequestsToProvider(npi);
} else { } else {
loge("Error connecting NetworkFactory"); loge("Error connecting NetworkFactory");
mNetworkFactoryInfos.remove(msg.obj); mNetworkProviderInfos.remove(msg.obj);
} }
} else if (mNetworkAgentInfos.containsKey(msg.replyTo)) { } else if (mNetworkAgentInfos.containsKey(msg.replyTo)) {
if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
@@ -3065,8 +3066,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (nai != null) { if (nai != null) {
disconnectAndDestroyNetwork(nai); disconnectAndDestroyNetwork(nai);
} else { } else {
NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(msg.replyTo); NetworkProviderInfo npi = mNetworkProviderInfos.remove(msg.replyTo);
if (DBG && nfi != null) log("unregisterNetworkFactory for " + nfi.name); if (DBG && npi != null) log("unregisterNetworkFactory for " + npi.name);
} }
} }
@@ -3149,7 +3150,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// ip[6]tables to flush routes and remove the incoming packet mark rule, so do it // ip[6]tables to flush routes and remove the incoming packet mark rule, so do it
// after we've rematched networks with requests which should make a potential // after we've rematched networks with requests which should make a potential
// fallback network the default or requested a new network from the // fallback network the default or requested a new network from the
// NetworkFactories, so network traffic isn't interrupted for an unnecessarily // NetworkProviders, so network traffic isn't interrupted for an unnecessarily
// long time. // long time.
destroyNativeNetwork(nai); destroyNativeNetwork(nai);
mDnsManager.removeNetwork(nai.network); mDnsManager.removeNetwork(nai.network);
@@ -3412,8 +3413,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
} }
for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) { for (NetworkProviderInfo npi : mNetworkProviderInfos.values()) {
nfi.cancelRequest(nri.request); npi.cancelRequest(nri.request);
} }
} else { } else {
// listens don't have a singular affectedNetwork. Check all networks to see // listens don't have a singular affectedNetwork. Check all networks to see
@@ -3848,12 +3849,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
handleApplyDefaultProxy((ProxyInfo)msg.obj); handleApplyDefaultProxy((ProxyInfo)msg.obj);
break; break;
} }
case EVENT_REGISTER_NETWORK_FACTORY: { case EVENT_REGISTER_NETWORK_PROVIDER: {
handleRegisterNetworkFactory((NetworkFactoryInfo)msg.obj); handleRegisterNetworkProvider((NetworkProviderInfo) msg.obj);
break; break;
} }
case EVENT_UNREGISTER_NETWORK_FACTORY: { case EVENT_UNREGISTER_NETWORK_PROVIDER: {
handleUnregisterNetworkFactory((Messenger)msg.obj); handleUnregisterNetworkProvider((Messenger) msg.obj);
break; break;
} }
case EVENT_REGISTER_NETWORK_AGENT: { case EVENT_REGISTER_NETWORK_AGENT: {
@@ -4898,7 +4899,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
}; };
private final HashMap<Messenger, NetworkFactoryInfo> mNetworkFactoryInfos = new HashMap<>(); private final HashMap<Messenger, NetworkProviderInfo> mNetworkProviderInfos = new HashMap<>();
private final HashMap<NetworkRequest, NetworkRequestInfo> mNetworkRequests = new HashMap<>(); private final HashMap<NetworkRequest, NetworkRequestInfo> mNetworkRequests = new HashMap<>();
private static final int MAX_NETWORK_REQUESTS_PER_UID = 100; private static final int MAX_NETWORK_REQUESTS_PER_UID = 100;
@@ -4906,18 +4907,18 @@ public class ConnectivityService extends IConnectivityManager.Stub
@GuardedBy("mUidToNetworkRequestCount") @GuardedBy("mUidToNetworkRequestCount")
private final SparseIntArray mUidToNetworkRequestCount = new SparseIntArray(); private final SparseIntArray mUidToNetworkRequestCount = new SparseIntArray();
private static class NetworkFactoryInfo { private static class NetworkProviderInfo {
public final String name; public final String name;
public final Messenger messenger; public final Messenger messenger;
private final AsyncChannel mAsyncChannel; private final AsyncChannel mAsyncChannel;
private final IBinder.DeathRecipient mDeathRecipient; private final IBinder.DeathRecipient mDeathRecipient;
public final int factorySerialNumber; public final int providerId;
NetworkFactoryInfo(String name, Messenger messenger, AsyncChannel asyncChannel, NetworkProviderInfo(String name, Messenger messenger, AsyncChannel asyncChannel,
int factorySerialNumber, IBinder.DeathRecipient deathRecipient) { int providerId, IBinder.DeathRecipient deathRecipient) {
this.name = name; this.name = name;
this.messenger = messenger; this.messenger = messenger;
this.factorySerialNumber = factorySerialNumber; this.providerId = providerId;
mAsyncChannel = asyncChannel; mAsyncChannel = asyncChannel;
mDeathRecipient = deathRecipient; mDeathRecipient = deathRecipient;
@@ -4935,17 +4936,17 @@ public class ConnectivityService extends IConnectivityManager.Stub
messenger.send(Message.obtain(null /* handler */, what, arg1, arg2, obj)); messenger.send(Message.obtain(null /* handler */, what, arg1, arg2, obj));
} catch (RemoteException e) { } catch (RemoteException e) {
// Remote process died. Ignore; the death recipient will remove this // Remote process died. Ignore; the death recipient will remove this
// NetworkFactoryInfo from mNetworkFactoryInfos. // NetworkProviderInfo from mNetworkProviderInfos.
} }
} }
void requestNetwork(NetworkRequest request, int score, int servingSerialNumber) { void requestNetwork(NetworkRequest request, int score, int servingProviderId) {
if (isLegacyNetworkFactory()) { if (isLegacyNetworkFactory()) {
mAsyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score, mAsyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score,
servingSerialNumber, request); servingProviderId, request);
} else { } else {
sendMessageToNetworkProvider(NetworkProvider.CMD_REQUEST_NETWORK, score, sendMessageToNetworkProvider(NetworkProvider.CMD_REQUEST_NETWORK, score,
servingSerialNumber, request); servingProviderId, request);
} }
} }
@@ -5358,45 +5359,45 @@ public class ConnectivityService extends IConnectivityManager.Stub
@Override @Override
public int registerNetworkFactory(Messenger messenger, String name) { public int registerNetworkFactory(Messenger messenger, String name) {
enforceNetworkFactoryPermission(); enforceNetworkFactoryPermission();
NetworkFactoryInfo nfi = new NetworkFactoryInfo(name, messenger, new AsyncChannel(), NetworkProviderInfo npi = new NetworkProviderInfo(name, messenger, new AsyncChannel(),
nextNetworkProviderId(), null /* deathRecipient */); nextNetworkProviderId(), null /* deathRecipient */);
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_FACTORY, nfi)); mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_PROVIDER, npi));
return nfi.factorySerialNumber; return npi.providerId;
} }
private void handleRegisterNetworkFactory(NetworkFactoryInfo nfi) { private void handleRegisterNetworkProvider(NetworkProviderInfo npi) {
if (mNetworkFactoryInfos.containsKey(nfi.messenger)) { if (mNetworkProviderInfos.containsKey(npi.messenger)) {
// Avoid creating duplicates. even if an app makes a direct AIDL call. // Avoid creating duplicates. even if an app makes a direct AIDL call.
// This will never happen if an app calls ConnectivityManager#registerNetworkProvider, // This will never happen if an app calls ConnectivityManager#registerNetworkProvider,
// as that will throw if a duplicate provider is registered. // as that will throw if a duplicate provider is registered.
Slog.e(TAG, "Attempt to register existing NetworkFactoryInfo " Slog.e(TAG, "Attempt to register existing NetworkProviderInfo "
+ mNetworkFactoryInfos.get(nfi.messenger).name); + mNetworkProviderInfos.get(npi.messenger).name);
return; return;
} }
if (DBG) log("Got NetworkFactory Messenger for " + nfi.name); if (DBG) log("Got NetworkProvider Messenger for " + npi.name);
mNetworkFactoryInfos.put(nfi.messenger, nfi); mNetworkProviderInfos.put(npi.messenger, npi);
nfi.connect(mContext, mTrackerHandler); npi.connect(mContext, mTrackerHandler);
if (!nfi.isLegacyNetworkFactory()) { if (!npi.isLegacyNetworkFactory()) {
// Legacy NetworkFactories get their requests when their AsyncChannel connects. // Legacy NetworkFactories get their requests when their AsyncChannel connects.
sendAllRequestsToFactory(nfi); sendAllRequestsToProvider(npi);
} }
} }
@Override @Override
public int registerNetworkProvider(Messenger messenger, String name) { public int registerNetworkProvider(Messenger messenger, String name) {
enforceNetworkFactoryPermission(); enforceNetworkFactoryPermission();
NetworkFactoryInfo nfi = new NetworkFactoryInfo(name, messenger, NetworkProviderInfo npi = new NetworkProviderInfo(name, messenger,
null /* asyncChannel */, nextNetworkProviderId(), null /* asyncChannel */, nextNetworkProviderId(),
() -> unregisterNetworkProvider(messenger)); () -> unregisterNetworkProvider(messenger));
mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_FACTORY, nfi)); mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_PROVIDER, npi));
return nfi.factorySerialNumber; return npi.providerId;
} }
@Override @Override
public void unregisterNetworkProvider(Messenger messenger) { public void unregisterNetworkProvider(Messenger messenger) {
enforceNetworkFactoryPermission(); enforceNetworkFactoryPermission();
mHandler.sendMessage(mHandler.obtainMessage(EVENT_UNREGISTER_NETWORK_FACTORY, messenger)); mHandler.sendMessage(mHandler.obtainMessage(EVENT_UNREGISTER_NETWORK_PROVIDER, messenger));
} }
@Override @Override
@@ -5404,13 +5405,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
unregisterNetworkProvider(messenger); unregisterNetworkProvider(messenger);
} }
private void handleUnregisterNetworkFactory(Messenger messenger) { private void handleUnregisterNetworkProvider(Messenger messenger) {
NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(messenger); NetworkProviderInfo npi = mNetworkProviderInfos.remove(messenger);
if (nfi == null) { if (npi == null) {
loge("Failed to find Messenger in unregisterNetworkFactory"); loge("Failed to find Messenger in unregisterNetworkProvider");
return; return;
} }
if (DBG) log("unregisterNetworkFactory for " + nfi.name); if (DBG) log("unregisterNetworkProvider for " + npi.name);
} }
@Override @Override
@@ -5484,7 +5485,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
LinkProperties linkProperties, NetworkCapabilities networkCapabilities, LinkProperties linkProperties, NetworkCapabilities networkCapabilities,
int currentScore, NetworkMisc networkMisc) { int currentScore, NetworkMisc networkMisc) {
return registerNetworkAgent(messenger, networkInfo, linkProperties, networkCapabilities, return registerNetworkAgent(messenger, networkInfo, linkProperties, networkCapabilities,
currentScore, networkMisc, NetworkFactory.SerialNumber.NONE); currentScore, networkMisc, NetworkProvider.ID_NONE);
} }
/** /**
@@ -5500,11 +5501,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
* @param currentScore the initial score of the network. See * @param currentScore the initial score of the network. See
* {@link NetworkAgentInfo#getCurrentScore}. * {@link NetworkAgentInfo#getCurrentScore}.
* @param networkMisc metadata about the network. This is never updated. * @param networkMisc metadata about the network. This is never updated.
* @param factorySerialNumber the serial number of the factory owning this NetworkAgent. * @param providerId the ID of the provider owning this NetworkAgent.
*/ */
public int registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo, public int registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo,
LinkProperties linkProperties, NetworkCapabilities networkCapabilities, LinkProperties linkProperties, NetworkCapabilities networkCapabilities,
int currentScore, NetworkMisc networkMisc, int factorySerialNumber) { int currentScore, NetworkMisc networkMisc, int providerId) {
enforceNetworkFactoryPermission(); enforceNetworkFactoryPermission();
LinkProperties lp = new LinkProperties(linkProperties); LinkProperties lp = new LinkProperties(linkProperties);
@@ -5517,7 +5518,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
final NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(), final NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
new Network(mNetIdManager.reserveNetId()), new NetworkInfo(networkInfo), lp, nc, new Network(mNetIdManager.reserveNetId()), new NetworkInfo(networkInfo), lp, nc,
ns, mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd, ns, mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd,
mDnsResolver, mNMS, factorySerialNumber); mDnsResolver, mNMS, providerId);
// Make sure the network capabilities reflect what the agent info says. // Make sure the network capabilities reflect what the agent info says.
nai.getAndSetNetworkCapabilities(mixInCapabilities(nai, nc)); nai.getAndSetNetworkCapabilities(mixInCapabilities(nai, nc));
final String extraInfo = networkInfo.getExtraInfo(); final String extraInfo = networkInfo.getExtraInfo();
@@ -5796,7 +5797,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// Once a NetworkAgent is connected, complain if some immutable capabilities are removed. // Once a NetworkAgent is connected, complain if some immutable capabilities are removed.
// Don't complain for VPNs since they're not driven by requests and there is no risk of // Don't complain for VPNs since they're not driven by requests and there is no risk of
// causing a connect/teardown loop. // causing a connect/teardown loop.
// TODO: remove this altogether and make it the responsibility of the NetworkFactories to // TODO: remove this altogether and make it the responsibility of the NetworkProviders to
// avoid connect/teardown loops. // avoid connect/teardown loops.
if (nai.everConnected && if (nai.everConnected &&
!nai.isVPN() && !nai.isVPN() &&
@@ -6036,13 +6037,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (VDBG || DDBG){ if (VDBG || DDBG){
log("sending new Min Network Score(" + score + "): " + networkRequest.toString()); log("sending new Min Network Score(" + score + "): " + networkRequest.toString());
} }
for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) { for (NetworkProviderInfo npi : mNetworkProviderInfos.values()) {
nfi.requestNetwork(networkRequest, score, serial); npi.requestNetwork(networkRequest, score, serial);
} }
} }
/** Sends all current NetworkRequests to the specified factory. */ /** Sends all current NetworkRequests to the specified factory. */
private void sendAllRequestsToFactory(NetworkFactoryInfo nfi) { private void sendAllRequestsToProvider(NetworkProviderInfo npi) {
ensureRunningOnConnectivityServiceThread(); ensureRunningOnConnectivityServiceThread();
for (NetworkRequestInfo nri : mNetworkRequests.values()) { for (NetworkRequestInfo nri : mNetworkRequests.values()) {
if (nri.request.isListen()) continue; if (nri.request.isListen()) continue;
@@ -6054,9 +6055,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
serial = nai.factorySerialNumber; serial = nai.factorySerialNumber;
} else { } else {
score = 0; score = 0;
serial = NetworkFactory.SerialNumber.NONE; serial = NetworkProvider.ID_NONE;
} }
nfi.requestNetwork(nri.request, score, serial); npi.requestNetwork(nri.request, score, serial);
} }
} }
@@ -6337,11 +6338,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
Slog.wtf(TAG, "BUG: " + newSatisfier.name() + " already has " + nri.request); Slog.wtf(TAG, "BUG: " + newSatisfier.name() + " already has " + nri.request);
} }
addedRequests.add(nri); addedRequests.add(nri);
// Tell NetworkFactories about the new score, so they can stop // Tell NetworkProviders about the new score, so they can stop
// trying to connect if they know they cannot match it. // trying to connect if they know they cannot match it.
// TODO - this could get expensive if we have a lot of requests for this // TODO - this could get expensive if we have a lot of requests for this
// network. Think about if there is a way to reduce this. Push // network. Think about if there is a way to reduce this. Push
// netid->request mapping to each factory? // netid->request mapping to each provider?
sendUpdatedScoreToFactories(nri.request, newSatisfier); sendUpdatedScoreToFactories(nri.request, newSatisfier);
if (isDefaultRequest(nri)) { if (isDefaultRequest(nri)) {
isNewDefault = true; isNewDefault = true;
@@ -6370,7 +6371,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
} else { } else {
Slog.wtf(TAG, "BUG: Removing request " + nri.request.requestId + " from " + Slog.wtf(TAG, "BUG: Removing request " + nri.request.requestId + " from " +
newNetwork.name() + newNetwork.name() +
" without updating mSatisfier or factories!"); " without updating mSatisfier or providers!");
} }
// TODO: Technically, sending CALLBACK_LOST here is // TODO: Technically, sending CALLBACK_LOST here is
// incorrect if there is a replacement network currently // incorrect if there is a replacement network currently

View File

@@ -36,9 +36,9 @@ import android.net.LinkProperties;
import android.net.Network; import android.net.Network;
import android.net.NetworkAgent; import android.net.NetworkAgent;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkFactory;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.NetworkMisc; import android.net.NetworkMisc;
import android.net.NetworkProvider;
import android.net.NetworkSpecifier; import android.net.NetworkSpecifier;
import android.net.SocketKeepalive; import android.net.SocketKeepalive;
import android.net.UidRange; import android.net.UidRange;
@@ -114,7 +114,7 @@ public class NetworkAgentWrapper implements TestableNetworkCallback.HasNetwork {
public InstrumentedNetworkAgent(NetworkAgentWrapper wrapper, LinkProperties lp) { public InstrumentedNetworkAgent(NetworkAgentWrapper wrapper, LinkProperties lp) {
super(wrapper.mHandlerThread.getLooper(), wrapper.mContext, wrapper.mLogTag, super(wrapper.mHandlerThread.getLooper(), wrapper.mContext, wrapper.mLogTag,
wrapper.mNetworkInfo, wrapper.mNetworkCapabilities, lp, wrapper.mScore, wrapper.mNetworkInfo, wrapper.mNetworkCapabilities, lp, wrapper.mScore,
new NetworkMisc(), NetworkFactory.SerialNumber.NONE); new NetworkMisc(), NetworkProvider.ID_NONE);
mWrapper = wrapper; mWrapper = wrapper;
} }

View File

@@ -36,9 +36,9 @@ import android.net.IDnsResolver;
import android.net.INetd; import android.net.INetd;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkFactory;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.net.NetworkMisc; import android.net.NetworkMisc;
import android.net.NetworkProvider;
import android.net.NetworkScore; import android.net.NetworkScore;
import android.os.INetworkManagementService; import android.os.INetworkManagementService;
import android.text.format.DateUtils; import android.text.format.DateUtils;
@@ -359,7 +359,7 @@ public class LingerMonitorTest {
ns.putIntExtension(NetworkScore.LEGACY_SCORE, 50); ns.putIntExtension(NetworkScore.LEGACY_SCORE, 50);
NetworkAgentInfo nai = new NetworkAgentInfo(null, null, new Network(netId), info, null, NetworkAgentInfo nai = new NetworkAgentInfo(null, null, new Network(netId), info, null,
caps, ns, mCtx, null, mMisc, mConnService, mNetd, mDnsResolver, mNMS, caps, ns, mCtx, null, mMisc, mConnService, mNetd, mDnsResolver, mNMS,
NetworkFactory.SerialNumber.NONE); NetworkProvider.ID_NONE);
nai.everValidated = true; nai.everValidated = true;
return nai; return nai;
} }