Просмотр исходного кода

Re-add unfronted fields and logs

Miro Kuratczyk 9 лет назад
Родитель
Сommit
640de4144a
1 измененных файлов с 33 добавлено и 19 удалено
  1. 33 19
      psiphon/server/psinet/psinet.go

+ 33 - 19
psiphon/server/psinet/psinet.go

@@ -50,11 +50,14 @@ type Database struct {
 }
 
 type Host struct {
-	DatacenterName string `json:"datacenter_name"`
-	Id             string `json:"id"`
-	IpAddress      string `json:"ip_address"`
-	IsTCS          bool   `json:"is_TCS"`
-	Region         string `json:"region"`
+	DatacenterName                   string `json:"datacenter_name"`
+	Id                               string `json:"id"`
+	IpAddress                        string `json:"ip_address"`
+	IsTCS                            bool   `json:"is_TCS"`
+	MeekCookieEncryptionPublicKey    string `json:"meek_cookie_encryption_public_key"`
+	MeekServerObfuscatedKey          string `json:"meek_server_obfuscated_key"`
+	MeekServerPort                   int    `json:"meek_server_port"`
+	Region                           string `json:"region"`
 }
 
 type Server struct {
@@ -394,18 +397,21 @@ func (db *Database) getEncodedServerEntry(server Server) string {
 
 	// Extended (new) entry fields are in a JSON string
 	var extendedConfig struct {
-		IpAddress            string
-		WebServerPort        string
-		WebServerSecret      string
-		WebServerCertificate string
-		SshPort              int
-		SshUsername          string
-		SshPassword          string
-		SshHostKey           string
-		SshObfuscatedPort    int
-		SshObfuscatedKey     string
-		Region               string
-		capabilities         []string
+		IpAddress                     string
+		WebServerPort                 string
+		WebServerSecret               string
+		WebServerCertificate          string
+		SshPort                       int
+		SshUsername                   string
+		SshPassword                   string
+		SshHostKey                    string
+		SshObfuscatedPort             int
+		SshObfuscatedKey              string
+		Region                        string
+		MeekCookieEncryptionPublicKey string
+		MeekObfuscatedKey             string
+		MeekServerPort                int
+		capabilities                  []string
 	}
 
 	// NOTE: also putting original values in extended config for easier parsing by new clients
@@ -433,8 +439,8 @@ func (db *Database) getEncodedServerEntry(server Server) string {
 	}
 
 	extendedConfig.SshObfuscatedPort = server.SshObfuscatedPort
-	// Use the latest alternate port
-	if len(server.AlternateSshObfuscatedPorts) > 0 {
+	// Use the latest alternate port unless tunneling through meek
+	if len(server.AlternateSshObfuscatedPorts) > 0 && !server.Capabilities["UNFRONTED-MEEK"] {
 		port, err := strconv.Atoi(server.AlternateSshObfuscatedPorts[len(server.AlternateSshObfuscatedPorts)-1])
 		if err == nil {
 			extendedConfig.SshObfuscatedPort = port
@@ -443,12 +449,20 @@ func (db *Database) getEncodedServerEntry(server Server) string {
 
 	extendedConfig.SshObfuscatedKey = server.SshObfuscatedKey
 	extendedConfig.Region = host.Region
+	extendedConfig.MeekCookieEncryptionPublicKey = host.MeekCookieEncryptionPublicKey
+	extendedConfig.MeekServerPort = host.MeekServerPort
+	extendedConfig.MeekObfuscatedKey = host.MeekServerObfuscatedKey
 
 	serverCapabilities := make(map[string]bool, 0)
 	for capability, enabled := range server.Capabilities {
 		serverCapabilities[capability] = enabled
 	}
 
+	if serverCapabilities["UNFRONTED-MEEK"] && host.MeekServerPort == 443 {
+		serverCapabilities["UNFRONTED-MEEK"] = false
+		serverCapabilities["UNFRONTED-MEEK-HTTPS"] = true
+	}
+
 	for capability, enabled := range serverCapabilities {
 		if enabled == true {
 			extendedConfig.capabilities = append(extendedConfig.capabilities, capability)