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

XHTTP transport: Fix "auto" mode with REALITY (#5638)

Fixes https://github.com/XTLS/Xray-core/issues/5635

BTW, fixes https://github.com/XTLS/Xray-core/issues/5631
Dmitrii Makhno 4 месяцев назад
Родитель
Сommit
a6ec3b6e70
2 измененных файлов с 9 добавлено и 7 удалено
  1. 3 2
      infra/conf/transport_internet.go
  2. 6 5
      transport/internet/splithttp/dialer.go

+ 3 - 2
infra/conf/transport_internet.go

@@ -314,6 +314,7 @@ func (c *SplitHTTPConfig) Build() (proto.Message, error) {
 	switch c.UplinkDataPlacement {
 	case "":
 		c.UplinkDataPlacement = "body"
+	case "body":
 	case "cookie", "header":
 		if c.Mode != "packet-up" {
 			return nil, errors.New("UplinkDataPlacement can be " + c.UplinkDataPlacement + " only in packet-up mode")
@@ -334,7 +335,7 @@ func (c *SplitHTTPConfig) Build() (proto.Message, error) {
 	switch c.SessionPlacement {
 	case "":
 		c.SessionPlacement = "path"
-	case "cookie", "header", "query":
+	case "path", "cookie", "header", "query":
 	default:
 		return nil, errors.New("unsupported session placement: " + c.SessionPlacement)
 	}
@@ -342,7 +343,7 @@ func (c *SplitHTTPConfig) Build() (proto.Message, error) {
 	switch c.SeqPlacement {
 	case "":
 		c.SeqPlacement = "path"
-	case "cookie", "header", "query":
+	case "path", "cookie", "header", "query":
 		if c.SessionPlacement == "path" {
 			return nil, errors.New("SeqPlacement must be path when SessionPlacement is path")
 		}

+ 6 - 5
transport/internet/splithttp/dialer.go

@@ -272,11 +272,6 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
 		requestURL.Host = dest.Address.String()
 	}
 
-	sessionId := ""
-	if transportConfiguration.Mode != "stream-one" {
-		sessionIdUuid := uuid.New()
-		sessionId = sessionIdUuid.String()
-	}
 	requestURL.Path = transportConfiguration.GetNormalizedPath()
 	requestURL.RawQuery = transportConfiguration.GetNormalizedQuery()
 
@@ -293,6 +288,12 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
 		}
 	}
 
+	sessionId := ""
+	if mode != "stream-one" {
+		sessionIdUuid := uuid.New()
+		sessionId = sessionIdUuid.String()
+	}
+
 	errors.LogInfo(ctx, fmt.Sprintf("XHTTP is dialing to %s, mode %s, HTTP version %s, host %s", dest, mode, httpVersion, requestURL.Host))
 
 	requestURL2 := requestURL