Fix VPN retry timer mechanism

This commit does:
- Skip the new retrying request when there is a pending retrying
  task. Otherwise, the mRetryCount will be increased unexpectedly
  before the current retrying task finishes its job.
- onChildOpened will call onSessionLost when MTU is invalid, and
  onChildOpened will be called after onIkeOpened, so if
  mRetryCount is reset in onIkeOpened, the mRetryCount will always
  start from 0.

Bug: 256776571
Test: atest FrameworksNetTests:VpnTest
      Manual test and check the log.
Change-Id: I396a3c279dc909f78c400cff1c31d77fe98cd7a6
This commit is contained in:
lucaslin
2022-11-02 17:28:30 +00:00
parent 88749cfd8f
commit 849bbda37d

View File

@@ -2881,7 +2881,6 @@ public class Vpn {
ikeConfiguration.isIkeExtensionEnabled(
IkeSessionConfiguration.EXTENSION_TYPE_MOBIKE);
onIkeConnectionInfoChanged(token, ikeConfiguration.getIkeSessionConnectionInfo());
mRetryCount = 0;
}
/**
@@ -2989,6 +2988,7 @@ public class Vpn {
}
doSendLinkProperties(networkAgent, lp);
mRetryCount = 0;
} catch (Exception e) {
Log.d(TAG, "Error in ChildOpened for token " + token, e);
onSessionLost(token, e);
@@ -3208,6 +3208,10 @@ public class Vpn {
}
private void scheduleRetryNewIkeSession() {
if (mScheduledHandleRetryIkeSessionFuture != null) {
Log.d(TAG, "There is a pending retrying task, skip the new retrying task");
return;
}
final long retryDelay = mDeps.getNextRetryDelaySeconds(mRetryCount++);
Log.d(TAG, "Retry new IKE session after " + retryDelay + " seconds.");
// If the default network is lost during the retry delay, the mActiveNetwork will be