Merge "[CS] Support "instant failure" from factories"

This commit is contained in:
Chalard Jean
2019-03-12 12:04:46 +00:00
committed by Gerrit Code Review
3 changed files with 99 additions and 12 deletions

View File

@@ -1073,7 +1073,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
handleRegisterNetworkRequest(new NetworkRequestInfo(
null, networkRequest, new Binder()));
} else {
handleReleaseNetworkRequest(networkRequest, Process.SYSTEM_UID);
handleReleaseNetworkRequest(networkRequest, Process.SYSTEM_UID,
/* callOnUnavailable */ false);
}
}
@@ -2701,11 +2702,25 @@ public class ConnectivityService extends IConnectivityManager.Stub
return true;
}
private boolean maybeHandleNetworkFactoryMessage(Message msg) {
switch (msg.what) {
default:
return false;
case android.net.NetworkFactory.EVENT_UNFULFILLABLE_REQUEST: {
handleReleaseNetworkRequest((NetworkRequest) msg.obj, msg.sendingUid,
/* callOnUnavailable */ true);
break;
}
}
return true;
}
@Override
public void handleMessage(Message msg) {
if (!maybeHandleAsyncChannelMessage(msg) &&
!maybeHandleNetworkMonitorMessage(msg) &&
!maybeHandleNetworkAgentInfoMessage(msg)) {
if (!maybeHandleAsyncChannelMessage(msg)
&& !maybeHandleNetworkMonitorMessage(msg)
&& !maybeHandleNetworkAgentInfoMessage(msg)
&& !maybeHandleNetworkFactoryMessage(msg)) {
maybeHandleNetworkAgentMessage(msg);
}
}
@@ -2870,6 +2885,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (mNetworkFactoryInfos.containsKey(msg.replyTo)) {
if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
if (VDBG) log("NetworkFactory connected");
// Finish setting up the full connection
mNetworkFactoryInfos.get(msg.replyTo).asyncChannel.sendMessage(
AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
// A network factory has connected. Send it all current NetworkRequests.
for (NetworkRequestInfo nri : mNetworkRequests.values()) {
if (nri.request.isListen()) continue;
@@ -3031,7 +3049,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (existingRequest != null) { // remove the existing request.
if (DBG) log("Replacing " + existingRequest.request + " with "
+ nri.request + " because their intents matched.");
handleReleaseNetworkRequest(existingRequest.request, getCallingUid());
handleReleaseNetworkRequest(existingRequest.request, getCallingUid(),
/* callOnUnavailable */ false);
}
handleRegisterNetworkRequest(nri);
}
@@ -3057,7 +3076,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
int callingUid) {
NetworkRequestInfo nri = findExistingNetworkRequestInfo(pendingIntent);
if (nri != null) {
handleReleaseNetworkRequest(nri.request, callingUid);
handleReleaseNetworkRequest(nri.request, callingUid, /* callOnUnavailable */ false);
}
}
@@ -3140,7 +3159,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
callCallbackForRequest(nri, null, ConnectivityManager.CALLBACK_UNAVAIL, 0);
}
private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) {
private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid,
boolean callOnUnavailable) {
final NetworkRequestInfo nri =
getNriForAppRequest(request, callingUid, "release NetworkRequest");
if (nri == null) {
@@ -3150,6 +3170,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
log("releasing " + nri.request + " (release request)");
}
handleRemoveNetworkRequest(nri);
if (callOnUnavailable) {
callCallbackForRequest(nri, null, ConnectivityManager.CALLBACK_UNAVAIL, 0);
}
}
private void handleRemoveNetworkRequest(final NetworkRequestInfo nri) {
@@ -3651,7 +3674,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
break;
}
case EVENT_RELEASE_NETWORK_REQUEST: {
handleReleaseNetworkRequest((NetworkRequest) msg.obj, msg.arg1);
handleReleaseNetworkRequest((NetworkRequest) msg.obj, msg.arg1,
/* callOnUnavailable */ false);
break;
}
case EVENT_SET_ACCEPT_UNVALIDATED: {