Parcourir la source

Add EstablishTunnelNoServersPausePeriod

Rod Hynes il y a 3 mois
Parent
commit
eb4d6421c6
2 fichiers modifiés avec 21 ajouts et 1 suppressions
  1. 2 0
      psiphon/common/parameters/parameters.go
  2. 19 1
      psiphon/controller.go

+ 2 - 0
psiphon/common/parameters/parameters.go

@@ -84,6 +84,7 @@ const (
 	EstablishTunnelTimeout                             = "EstablishTunnelTimeout"
 	EstablishTunnelWorkTime                            = "EstablishTunnelWorkTime"
 	EstablishTunnelPausePeriod                         = "EstablishTunnelPausePeriod"
+	EstablishTunnelNoServersPausePeriod                = "EstablishTunnelNoServersPausePeriod"
 	EstablishTunnelPausePeriodJitter                   = "EstablishTunnelPausePeriodJitter"
 	EstablishTunnelServerAffinityGracePeriod           = "EstablishTunnelServerAffinityGracePeriod"
 	StaggerConnectionWorkersPeriod                     = "StaggerConnectionWorkersPeriod"
@@ -603,6 +604,7 @@ var defaultParameters = map[string]struct {
 	EstablishTunnelTimeout:                   {value: 300 * time.Second, minimum: time.Duration(0)},
 	EstablishTunnelWorkTime:                  {value: 60 * time.Second, minimum: 1 * time.Second},
 	EstablishTunnelPausePeriod:               {value: 5 * time.Second, minimum: 1 * time.Millisecond},
+	EstablishTunnelNoServersPausePeriod:      {value: 500 * time.Millisecond, minimum: 1 * time.Millisecond},
 	EstablishTunnelPausePeriodJitter:         {value: 0.1, minimum: 0.0},
 	EstablishTunnelServerAffinityGracePeriod: {value: 1 * time.Second, minimum: time.Duration(0), flags: useNetworkLatencyMultiplier},
 	StaggerConnectionWorkersPeriod:           {value: time.Duration(0), minimum: time.Duration(0)},

+ 19 - 1
psiphon/controller.go

@@ -2599,8 +2599,26 @@ loop:
 		// be more rounds if required).
 
 		p := controller.config.GetParameters().Get()
+
+		pausePeriod := p.Duration(parameters.EstablishTunnelPausePeriod)
+		if controller.config.TargetServerEntry == "" &&
+			GetLastServerEntryCount() == 0 &&
+			((!controller.config.DisableRemoteServerListFetcher &&
+				(controller.config.RemoteServerListURLs != nil ||
+					controller.config.ObfuscatedServerListRootURLs != nil)) ||
+				!controller.config.DisableDSLFetcher) {
+
+			// Reduce/alter the wait time if the client has no server entries
+			// and at least one type of server list fetch is configured.
+			//
+			// As a future enhancement, check for an in-flight server list fetch,
+			// and stop waiting as soon as it's finished.
+
+			pausePeriod = p.Duration(parameters.EstablishTunnelNoServersPausePeriod)
+		}
+
 		timeout := prng.JitterDuration(
-			p.Duration(parameters.EstablishTunnelPausePeriod),
+			pausePeriod,
 			p.Float(parameters.EstablishTunnelPausePeriodJitter))
 		p.Close()