|
|
@@ -30,6 +30,7 @@ import (
|
|
|
"sync"
|
|
|
"time"
|
|
|
|
|
|
+ "github.com/Psiphon-Inc/goregen"
|
|
|
"github.com/Psiphon-Labs/psiphon-tunnel-core/psiphon/transferstats"
|
|
|
"golang.org/x/crypto/ssh"
|
|
|
)
|
|
|
@@ -349,18 +350,28 @@ func dialSsh(
|
|
|
|
|
|
frontingAddress := ""
|
|
|
if useFronting {
|
|
|
+ if len(serverEntry.MeekFrontingAddressesRegex) > 0 {
|
|
|
|
|
|
- // Randomly select, for this connection attempt, one front address for
|
|
|
- // fronting-capable servers.
|
|
|
+ // Generate a front address based on the regex.
|
|
|
|
|
|
- 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, 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,
|