Merge "Disconnect VPN when the underlying network is lost"

This commit is contained in:
Chiachang Wang
2022-09-21 14:22:33 +00:00
committed by Gerrit Code Review

View File

@@ -3210,41 +3210,44 @@ public class Vpn {
return;
}
if (mSession != null && mMobikeEnabled) {
Log.d(
TAG,
"IKE Session has mobility. Delay handleSessionLost for losing network "
+ network
+ " on session with token "
+ mCurrentToken);
Log.d(TAG, "Schedule a delay handleSessionLost for losing network "
+ network
+ " on session with token "
+ mCurrentToken);
final int token = mCurrentToken;
// Delay the teardown in case a new network will be available soon. For example,
// during handover between two WiFi networks, Android will disconnect from the
// first WiFi and then connects to the second WiFi.
mScheduledHandleNetworkLostFuture =
mExecutor.schedule(
() -> {
if (isActiveToken(token)) {
handleSessionLost(null /* exception */, network);
} else {
Log.d(
TAG,
"Scheduled handleSessionLost fired for "
+ "obsolete token "
+ token);
final int token = mCurrentToken;
// Delay the teardown in case a new network will be available soon. For example,
// during handover between two WiFi networks, Android will disconnect from the
// first WiFi and then connects to the second WiFi.
mScheduledHandleNetworkLostFuture =
mExecutor.schedule(
() -> {
if (isActiveToken(token)) {
handleSessionLost(new IkeNetworkLostException(network),
network);
synchronized (Vpn.this) {
// Ignore stale runner.
if (mVpnRunner != this) return;
updateState(DetailedState.DISCONNECTED,
"Network lost");
}
} else {
Log.d(
TAG,
"Scheduled handleSessionLost fired for "
+ "obsolete token "
+ token);
}
// Reset mScheduledHandleNetworkLostFuture since it's
// already run on executor thread.
mScheduledHandleNetworkLostFuture = null;
},
NETWORK_LOST_TIMEOUT_MS,
TimeUnit.MILLISECONDS);
// Reset mScheduledHandleNetworkLostFuture since it's
// already run on executor thread.
mScheduledHandleNetworkLostFuture = null;
},
NETWORK_LOST_TIMEOUT_MS,
TimeUnit.MILLISECONDS);
} else {
Log.d(TAG, "Call handleSessionLost for losing network " + network);
handleSessionLost(null /* exception */, network);
}
}
private void cancelHandleNetworkLostTimeout() {