ソースを参照

Fix "missing port in address" gQUIC dial failure

Rod Hynes 2 年 前
コミット
91e2a902d8
2 ファイル変更13 行追加1 行削除
  1. 7 0
      psiphon/common/quic/gquic.go
  2. 6 1
      psiphon/common/quic/quic_test.go

+ 7 - 0
psiphon/common/quic/gquic.go

@@ -112,6 +112,13 @@ func gQUICDialContext(
 	quicSNIAddress string,
 	versionNumber uint32) (quicConnection, error) {
 
+	// The legacy gquic-go fork expects a port number in the SNI field
+	// (which is then stripped). Add a stub port value if none is present.
+	_, _, err := net.SplitHostPort(quicSNIAddress)
+	if err != nil {
+		quicSNIAddress = net.JoinHostPort(quicSNIAddress, "0")
+	}
+
 	quicConfig := &gquic.Config{
 		HandshakeTimeout: time.Duration(1<<63 - 1),
 		IdleTimeout:      CLIENT_IDLE_TIMEOUT,

+ 6 - 1
psiphon/common/quic/quic_test.go

@@ -188,11 +188,16 @@ func runQUIC(
 				}
 			}
 
+			quicSNIAddress, _, err := net.SplitHostPort(serverAddress)
+			if err != nil {
+				return errors.Trace(err)
+			}
+
 			conn, err := Dial(
 				ctx,
 				packetConn,
 				remoteAddr,
-				serverAddress,
+				quicSNIAddress,
 				quicVersion,
 				clientHelloSeed,
 				clientObfuscationKey,