Merge "Minor cleanups in VPN" am: 949e7c26dc am: 0c7aea93db
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2122292 Change-Id: I0e735420462a8effa7155e50d73ebd1227cc426c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -2712,8 +2712,8 @@ public class Vpn {
|
|||||||
*/
|
*/
|
||||||
@NonNull private final ScheduledThreadPoolExecutor mExecutor;
|
@NonNull private final ScheduledThreadPoolExecutor mExecutor;
|
||||||
|
|
||||||
@Nullable private ScheduledFuture<?> mScheduledHandleNetworkLostTimeout;
|
@Nullable private ScheduledFuture<?> mScheduledHandleNetworkLostFuture;
|
||||||
@Nullable private ScheduledFuture<?> mScheduledHandleRetryIkeSessionTimeout;
|
@Nullable private ScheduledFuture<?> mScheduledHandleRetryIkeSessionFuture;
|
||||||
|
|
||||||
/** Signal to ensure shutdown is honored even if a new Network is connected. */
|
/** Signal to ensure shutdown is honored even if a new Network is connected. */
|
||||||
private boolean mIsRunning = true;
|
private boolean mIsRunning = true;
|
||||||
@@ -2955,6 +2955,8 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
mTunnelIface.setUnderlyingNetwork(mIkeConnectionInfo.getNetwork());
|
||||||
|
|
||||||
// Transforms do not need to be persisted; the IkeSession will keep
|
// Transforms do not need to be persisted; the IkeSession will keep
|
||||||
// them alive for us
|
// them alive for us
|
||||||
mIpSecManager.applyTunnelModeTransform(mTunnelIface, direction, transform);
|
mIpSecManager.applyTunnelModeTransform(mTunnelIface, direction, transform);
|
||||||
@@ -3136,13 +3138,13 @@ public class Vpn {
|
|||||||
// If the default network is lost during the retry delay, the mActiveNetwork will be
|
// If the default network is lost during the retry delay, the mActiveNetwork will be
|
||||||
// null, and the new IKE session won't be established until there is a new default
|
// null, and the new IKE session won't be established until there is a new default
|
||||||
// network bringing up.
|
// network bringing up.
|
||||||
mScheduledHandleRetryIkeSessionTimeout =
|
mScheduledHandleRetryIkeSessionFuture =
|
||||||
mExecutor.schedule(() -> {
|
mExecutor.schedule(() -> {
|
||||||
startOrMigrateIkeSession(mActiveNetwork);
|
startOrMigrateIkeSession(mActiveNetwork);
|
||||||
|
|
||||||
// Reset mScheduledHandleRetryIkeSessionTimeout since it's already run on
|
// Reset mScheduledHandleRetryIkeSessionFuture since it's already run on
|
||||||
// executor thread.
|
// executor thread.
|
||||||
mScheduledHandleRetryIkeSessionTimeout = null;
|
mScheduledHandleRetryIkeSessionFuture = null;
|
||||||
}, retryDelay, TimeUnit.SECONDS);
|
}, retryDelay, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3185,12 +3187,10 @@ public class Vpn {
|
|||||||
mActiveNetwork = null;
|
mActiveNetwork = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mScheduledHandleNetworkLostTimeout != null
|
if (mScheduledHandleNetworkLostFuture != null) {
|
||||||
&& !mScheduledHandleNetworkLostTimeout.isCancelled()
|
|
||||||
&& !mScheduledHandleNetworkLostTimeout.isDone()) {
|
|
||||||
final IllegalStateException exception =
|
final IllegalStateException exception =
|
||||||
new IllegalStateException(
|
new IllegalStateException(
|
||||||
"Found a pending mScheduledHandleNetworkLostTimeout");
|
"Found a pending mScheduledHandleNetworkLostFuture");
|
||||||
Log.i(
|
Log.i(
|
||||||
TAG,
|
TAG,
|
||||||
"Unexpected error in onDefaultNetworkLost. Tear down session",
|
"Unexpected error in onDefaultNetworkLost. Tear down session",
|
||||||
@@ -3207,13 +3207,26 @@ public class Vpn {
|
|||||||
+ " on session with token "
|
+ " on session with token "
|
||||||
+ mCurrentToken);
|
+ mCurrentToken);
|
||||||
|
|
||||||
|
final int token = mCurrentToken;
|
||||||
// Delay the teardown in case a new network will be available soon. For example,
|
// 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
|
// during handover between two WiFi networks, Android will disconnect from the
|
||||||
// first WiFi and then connects to the second WiFi.
|
// first WiFi and then connects to the second WiFi.
|
||||||
mScheduledHandleNetworkLostTimeout =
|
mScheduledHandleNetworkLostFuture =
|
||||||
mExecutor.schedule(
|
mExecutor.schedule(
|
||||||
() -> {
|
() -> {
|
||||||
|
if (isActiveToken(token)) {
|
||||||
handleSessionLost(null, network);
|
handleSessionLost(null, network);
|
||||||
|
} 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,
|
NETWORK_LOST_TIMEOUT_MS,
|
||||||
TimeUnit.MILLISECONDS);
|
TimeUnit.MILLISECONDS);
|
||||||
@@ -3224,28 +3237,26 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void cancelHandleNetworkLostTimeout() {
|
private void cancelHandleNetworkLostTimeout() {
|
||||||
if (mScheduledHandleNetworkLostTimeout != null
|
if (mScheduledHandleNetworkLostFuture != null) {
|
||||||
&& !mScheduledHandleNetworkLostTimeout.isDone()) {
|
|
||||||
// It does not matter what to put in #cancel(boolean), because it is impossible
|
// It does not matter what to put in #cancel(boolean), because it is impossible
|
||||||
// that the task tracked by mScheduledHandleNetworkLostTimeout is
|
// that the task tracked by mScheduledHandleNetworkLostFuture is
|
||||||
// in-progress since both that task and onDefaultNetworkChanged are submitted to
|
// in-progress since both that task and onDefaultNetworkChanged are submitted to
|
||||||
// mExecutor who has only one thread.
|
// mExecutor who has only one thread.
|
||||||
Log.d(TAG, "Cancel the task for handling network lost timeout");
|
Log.d(TAG, "Cancel the task for handling network lost timeout");
|
||||||
mScheduledHandleNetworkLostTimeout.cancel(false /* mayInterruptIfRunning */);
|
mScheduledHandleNetworkLostFuture.cancel(false /* mayInterruptIfRunning */);
|
||||||
mScheduledHandleNetworkLostTimeout = null;
|
mScheduledHandleNetworkLostFuture = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelRetryNewIkeSessionFuture() {
|
private void cancelRetryNewIkeSessionFuture() {
|
||||||
if (mScheduledHandleRetryIkeSessionTimeout != null
|
if (mScheduledHandleRetryIkeSessionFuture != null) {
|
||||||
&& !mScheduledHandleRetryIkeSessionTimeout.isDone()) {
|
|
||||||
// It does not matter what to put in #cancel(boolean), because it is impossible
|
// It does not matter what to put in #cancel(boolean), because it is impossible
|
||||||
// that the task tracked by mScheduledHandleRetryIkeSessionTimeout is
|
// that the task tracked by mScheduledHandleRetryIkeSessionFuture is
|
||||||
// in-progress since both that task and onDefaultNetworkChanged are submitted to
|
// in-progress since both that task and onDefaultNetworkChanged are submitted to
|
||||||
// mExecutor who has only one thread.
|
// mExecutor who has only one thread.
|
||||||
Log.d(TAG, "Cancel the task for handling new ike session timeout");
|
Log.d(TAG, "Cancel the task for handling new ike session timeout");
|
||||||
mScheduledHandleRetryIkeSessionTimeout.cancel(false /* mayInterruptIfRunning */);
|
mScheduledHandleRetryIkeSessionFuture.cancel(false /* mayInterruptIfRunning */);
|
||||||
mScheduledHandleRetryIkeSessionTimeout = null;
|
mScheduledHandleRetryIkeSessionFuture = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3285,7 +3296,7 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void handleSessionLost(@Nullable Exception exception, @Nullable Network network) {
|
private void handleSessionLost(@Nullable Exception exception, @Nullable Network network) {
|
||||||
// Cancel mScheduledHandleNetworkLostTimeout if the session it is going to terminate is
|
// Cancel mScheduledHandleNetworkLostFuture if the session it is going to terminate is
|
||||||
// already terminated due to other failures.
|
// already terminated due to other failures.
|
||||||
cancelHandleNetworkLostTimeout();
|
cancelHandleNetworkLostTimeout();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user