Merge "Improve the code of handleSessionLost()" am: 4c7e8dc8a9

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2114433

Change-Id: I51f0a02cc3f8188c126145e8bb4fcb015e07c8c6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Lucas Lin
2022-06-24 19:18:01 +00:00
committed by Automerger Merge Worker

View File

@@ -3301,8 +3301,13 @@ public class Vpn {
cancelHandleNetworkLostTimeout(); cancelHandleNetworkLostTimeout();
synchronized (Vpn.this) { synchronized (Vpn.this) {
String category = null;
int errorClass = -1;
int errorCode = -1;
if (exception instanceof IkeProtocolException) { if (exception instanceof IkeProtocolException) {
final IkeProtocolException ikeException = (IkeProtocolException) exception; final IkeProtocolException ikeException = (IkeProtocolException) exception;
category = VpnManager.CATEGORY_EVENT_IKE_ERROR;
errorCode = ikeException.getErrorType();
switch (ikeException.getErrorType()) { switch (ikeException.getErrorType()) {
case IkeProtocolException.ERROR_TYPE_NO_PROPOSAL_CHOSEN: // Fallthrough case IkeProtocolException.ERROR_TYPE_NO_PROPOSAL_CHOSEN: // Fallthrough
@@ -3312,105 +3317,53 @@ public class Vpn {
case IkeProtocolException.ERROR_TYPE_FAILED_CP_REQUIRED: // Fallthrough case IkeProtocolException.ERROR_TYPE_FAILED_CP_REQUIRED: // Fallthrough
case IkeProtocolException.ERROR_TYPE_TS_UNACCEPTABLE: case IkeProtocolException.ERROR_TYPE_TS_UNACCEPTABLE:
// All the above failures are configuration errors, and are terminal // All the above failures are configuration errors, and are terminal
// TODO(b/230548427): Remove SDK check once VPN related stuff are errorClass = VpnManager.ERROR_CLASS_NOT_RECOVERABLE;
// decoupled from ConnectivityServiceTest. break;
if (SdkLevel.isAtLeastT()) {
sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_IKE_ERROR,
VpnManager.ERROR_CLASS_NOT_RECOVERABLE,
ikeException.getErrorType(),
getPackage(), mSessionKey, makeVpnProfileStateLocked(),
network,
getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
mUnderlyingNetworkCapabilities),
getRedactedLinkPropertiesOfUnderlyingNetwork(
mUnderlyingLinkProperties));
}
markFailedAndDisconnect(exception);
return;
// All other cases possibly recoverable. // All other cases possibly recoverable.
default: default:
// All the above failures are configuration errors, and are terminal // All the above failures are configuration errors, and are terminal
// TODO(b/230548427): Remove SDK check once VPN related stuff are errorClass = VpnManager.ERROR_CLASS_RECOVERABLE;
// decoupled from ConnectivityServiceTest.
if (SdkLevel.isAtLeastT()) {
sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_IKE_ERROR,
VpnManager.ERROR_CLASS_RECOVERABLE,
ikeException.getErrorType(),
getPackage(), mSessionKey, makeVpnProfileStateLocked(),
network,
getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
mUnderlyingNetworkCapabilities),
getRedactedLinkPropertiesOfUnderlyingNetwork(
mUnderlyingLinkProperties));
}
} }
} else if (exception instanceof IllegalArgumentException) { } else if (exception instanceof IllegalArgumentException) {
// Failed to build IKE/ChildSessionParams; fatal profile configuration error // Failed to build IKE/ChildSessionParams; fatal profile configuration error
markFailedAndDisconnect(exception); markFailedAndDisconnect(exception);
return; return;
} else if (exception instanceof IkeNetworkLostException) { } else if (exception instanceof IkeNetworkLostException) {
// TODO(b/230548427): Remove SDK check once VPN related stuff are category = VpnManager.CATEGORY_EVENT_NETWORK_ERROR;
// decoupled from ConnectivityServiceTest. errorClass = VpnManager.ERROR_CLASS_RECOVERABLE;
if (SdkLevel.isAtLeastT()) { errorCode = VpnManager.ERROR_CODE_NETWORK_LOST;
sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
VpnManager.ERROR_CLASS_RECOVERABLE,
VpnManager.ERROR_CODE_NETWORK_LOST,
getPackage(), mSessionKey, makeVpnProfileStateLocked(),
network,
getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
mUnderlyingNetworkCapabilities),
getRedactedLinkPropertiesOfUnderlyingNetwork(
mUnderlyingLinkProperties));
}
} else if (exception instanceof IkeNonProtocolException) { } else if (exception instanceof IkeNonProtocolException) {
category = VpnManager.CATEGORY_EVENT_NETWORK_ERROR;
errorClass = VpnManager.ERROR_CLASS_RECOVERABLE;
if (exception.getCause() instanceof UnknownHostException) { if (exception.getCause() instanceof UnknownHostException) {
// TODO(b/230548427): Remove SDK check once VPN related stuff are errorCode = VpnManager.ERROR_CODE_NETWORK_UNKNOWN_HOST;
// decoupled from ConnectivityServiceTest.
if (SdkLevel.isAtLeastT()) {
sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
VpnManager.ERROR_CLASS_RECOVERABLE,
VpnManager.ERROR_CODE_NETWORK_UNKNOWN_HOST,
getPackage(), mSessionKey, makeVpnProfileStateLocked(),
network,
getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
mUnderlyingNetworkCapabilities),
getRedactedLinkPropertiesOfUnderlyingNetwork(
mUnderlyingLinkProperties));
}
} else if (exception.getCause() instanceof IkeTimeoutException) { } else if (exception.getCause() instanceof IkeTimeoutException) {
// TODO(b/230548427): Remove SDK check once VPN related stuff are errorCode = VpnManager.ERROR_CODE_NETWORK_PROTOCOL_TIMEOUT;
// decoupled from ConnectivityServiceTest.
if (SdkLevel.isAtLeastT()) {
sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
VpnManager.ERROR_CLASS_RECOVERABLE,
VpnManager.ERROR_CODE_NETWORK_PROTOCOL_TIMEOUT,
getPackage(), mSessionKey, makeVpnProfileStateLocked(),
network,
getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
mUnderlyingNetworkCapabilities),
getRedactedLinkPropertiesOfUnderlyingNetwork(
mUnderlyingLinkProperties));
}
} else if (exception.getCause() instanceof IOException) { } else if (exception.getCause() instanceof IOException) {
// TODO(b/230548427): Remove SDK check once VPN related stuff are errorCode = VpnManager.ERROR_CODE_NETWORK_IO;
// decoupled from ConnectivityServiceTest.
if (SdkLevel.isAtLeastT()) {
sendEventToVpnManagerApp(VpnManager.CATEGORY_EVENT_NETWORK_ERROR,
VpnManager.ERROR_CLASS_RECOVERABLE,
VpnManager.ERROR_CODE_NETWORK_IO,
getPackage(), mSessionKey, makeVpnProfileStateLocked(),
network,
getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
mUnderlyingNetworkCapabilities),
getRedactedLinkPropertiesOfUnderlyingNetwork(
mUnderlyingLinkProperties));
}
} }
} else if (exception != null) { } else if (exception != null) {
Log.wtf(TAG, "onSessionLost: exception = " + exception); Log.wtf(TAG, "onSessionLost: exception = " + exception);
} }
scheduleRetryNewIkeSession(); // TODO(b/230548427): Remove SDK check once VPN related stuff are
// decoupled from ConnectivityServiceTest.
if (SdkLevel.isAtLeastT() && category != null) {
sendEventToVpnManagerApp(category, errorClass, errorCode,
getPackage(), mSessionKey, makeVpnProfileStateLocked(),
mActiveNetwork,
getRedactedNetworkCapabilitiesOfUnderlyingNetwork(
mUnderlyingNetworkCapabilities),
getRedactedLinkPropertiesOfUnderlyingNetwork(
mUnderlyingLinkProperties));
}
if (errorClass == VpnManager.ERROR_CLASS_NOT_RECOVERABLE) {
markFailedAndDisconnect(exception);
return;
} else {
scheduleRetryNewIkeSession();
}
} }
mUnderlyingNetworkCapabilities = null; mUnderlyingNetworkCapabilities = null;