Browse Source

Generate fronting address from meekFrontingAddressesRegex, if present.

Adam Kruger 10 years ago
parent
commit
3a75786c93
2 changed files with 22 additions and 9 deletions
  1. 1 0
      psiphon/serverEntry.go
  2. 21 9
      psiphon/tunnel.go

+ 1 - 0
psiphon/serverEntry.go

@@ -66,6 +66,7 @@ type ServerEntry struct {
 	MeekFrontingHost              string   `json:"meekFrontingHost"`
 	MeekFrontingDomain            string   `json:"meekFrontingDomain"`
 	MeekFrontingAddresses         []string `json:"meekFrontingAddresses"`
+	MeekFrontingAddressesRegex    string   `json:"meekFrontingAddressesRegex"`
 }
 
 // SupportsProtocol returns true if and only if the ServerEntry has

+ 21 - 9
psiphon/tunnel.go

@@ -32,6 +32,7 @@ import (
 
 	"github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/transferstats"
 	"golang.org/x/crypto/ssh"
+        "github.com/Psiphon-Inc/goregen"
 )
 
 // Tunneler specifies the interface required by components that use a tunnel.
@@ -350,17 +351,28 @@ func dialSsh(
 	frontingAddress := ""
 	if useFronting {
 
-		// Randomly select, for this connection attempt, one front address for
-		// fronting-capable servers.
+		if len(serverEntry.MeekFrontingAddressesRegex) > 0 {
 
-		if len(serverEntry.MeekFrontingAddresses) == 0 {
-			return nil, nil, ContextError(errors.New("MeekFrontingAddresses is empty"))
-		}
-		index, err := MakeSecureRandomInt(len(serverEntry.MeekFrontingAddresses))
-		if err != nil {
-			return nil, nil, ContextError(err)
+			// Generate a front address based on the regex.
+
+			frontingAddress, err = regen.Generate(serverEntry.MeekFrontingAddressesRegex)
+			if err != nil {
+				return nil, nil, ContextError(err)
+			}
+		} else {
+
+			// Randomly select, for this connection attempt, one front address for
+			// fronting-capable servers.
+
+			if len(serverEntry.MeekFrontingAddresses) == 0 {
+				return nil, nil, ContextError(errors.New("MeekFrontingAddresses is empty"))
+			}
+			index, err := MakeSecureRandomInt(len(serverEntry.MeekFrontingAddresses))
+			if err != nil {
+				return nil, nil, ContextError(err)
+			}
+			frontingAddress = serverEntry.MeekFrontingAddresses[index]
 		}
-		frontingAddress = serverEntry.MeekFrontingAddresses[index]
 	}
 	NoticeConnectingServer(
 		serverEntry.IpAddress,