Merge "[CS] Support "instant failure" from factories"
This commit is contained in:
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user