Merge changes I7ea39b80,I6b9979f3 am: 310d1dac0d am: 3efc93af3d
Change-Id: If8cd7bd2c1fe4b698113eb761ed8e2b4f9580cf0
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user