Update to sendAllRequestsToProvider for Multilayer

Updates to ConnectivityService.sendAllRequestsToProvider to support
Multilayer requests.

Bug: 175051182
Bug: 171991028
Test: atest FrameworksNetTests
atest FrameworksNetIntegrationTests
atest CtsNetTestCasesLatestSdk

Change-Id: Id7a6175cee28d2de1f6194cd0fc8c739d667427d
This commit is contained in:
James Mattis
2020-12-07 20:47:49 -08:00
parent 212df9eed2
commit f8b661d084

View File

@@ -6945,21 +6945,35 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
/** Sends all current NetworkRequests to the specified factory. */
private void sendAllRequestsToProvider(NetworkProviderInfo npi) {
private void sendAllRequestsToProvider(@NonNull final NetworkProviderInfo npi) {
ensureRunningOnConnectivityServiceThread();
for (NetworkRequestInfo nri : mNetworkRequests.values()) {
if (nri.request.isListen()) continue;
NetworkAgentInfo nai = nri.getSatisfier();
final int score;
final int serial;
if (nai != null) {
score = nai.getCurrentScore();
serial = nai.factorySerialNumber;
} else {
score = 0;
serial = NetworkProvider.ID_NONE;
for (final NetworkRequestInfo nri : getNrisFromGlobalRequests()) {
for (final NetworkRequest req : nri.mRequests) {
if (req.isListen() && nri.getActiveRequest() == req) {
break;
}
if (req.isListen()) {
continue;
}
// Only set the nai for the request it is satisfying.
final NetworkAgentInfo nai =
nri.getActiveRequest() == req ? nri.getSatisfier() : null;
final int score;
final int serial;
if (null != nai) {
score = nai.getCurrentScore();
serial = nai.factorySerialNumber;
} else {
score = 0;
serial = NetworkProvider.ID_NONE;
}
npi.requestNetwork(req, score, serial);
// For multilayer requests, don't send lower priority requests if a higher priority
// request is already satisfied.
if (null != nai) {
break;
}
}
npi.requestNetwork(nri.request, score, serial);
}
}