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
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 45b0f0a6..8a74f4c 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -2881,7 +2881,6 @@
                     ikeConfiguration.isIkeExtensionEnabled(
                             IkeSessionConfiguration.EXTENSION_TYPE_MOBIKE);
             onIkeConnectionInfoChanged(token, ikeConfiguration.getIkeSessionConnectionInfo());
-            mRetryCount = 0;
         }
 
         /**
@@ -2989,6 +2988,7 @@
                 }
 
                 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 @@
         }
 
         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