Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 849bbda3 authored by lucaslin's avatar lucaslin
Browse files

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
parent 88749cfd
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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