diff --git a/common/convert/converter.go b/common/convert/converter.go index 19886d25ee..f83b0aacc4 100644 --- a/common/convert/converter.go +++ b/common/convert/converter.go @@ -178,15 +178,23 @@ func ConvertsV2Ray(buf []byte) ([]map[string]any, error) { } switch network { - case "ws": + case "ws", "httpupgrade": headers := make(map[string]any) wsOpts := make(map[string]any) headers["User-Agent"] = RandUserAgent() + if host := query.Get("host"); host != "" { + headers["Host"] = host + } wsOpts["path"] = query.Get("path") wsOpts["headers"] = headers + if network == "httpupgrade" { + wsOpts["v2ray-http-upgrade"] = true + wsOpts["v2ray-http-upgrade-fast-open"] = true + } + trojan["ws-opts"] = wsOpts case "grpc": @@ -350,6 +358,7 @@ func ConvertsV2Ray(buf []byte) ([]map[string]any, error) { wsOpts["max-early-data"] = med wsOpts["early-data-header-name"] = "Sec-WebSocket-Protocol" case "httpupgrade": + wsOpts["v2ray-http-upgrade"] = true wsOpts["v2ray-http-upgrade-fast-open"] = true } query.Del("ed") @@ -443,10 +452,12 @@ func ConvertsV2Ray(buf []byte) ([]map[string]any, error) { } else if strings.Contains(pluginName, "v2ray-plugin") { ss["plugin"] = "v2ray-plugin" ss["plugin-opts"] = map[string]any{ - "mode": pluginInfo.Get("mode"), - "host": pluginInfo.Get("host"), - "path": pluginInfo.Get("path"), - "tls": strings.Contains(plugin, "tls"), + "mode": pluginInfo.Get("mode"), + "host": pluginInfo.Get("host"), + "path": pluginInfo.Get("path"), + "tls": strings.Contains(plugin, "tls"), + "mux": pluginInfo.Get("mux") != "0", + "v2ray-http-upgrade": strings.Contains(plugin, "httpupgrade"), } } } diff --git a/common/convert/v.go b/common/convert/v.go index 4102ab75e4..42b4936d48 100644 --- a/common/convert/v.go +++ b/common/convert/v.go @@ -118,6 +118,7 @@ func handleVShareLink(names map[string]int, url *url.URL, scheme string, proxy m wsOpts["max-early-data"] = med wsOpts["early-data-header-name"] = "Sec-WebSocket-Protocol" case "httpupgrade": + wsOpts["v2ray-http-upgrade"] = true wsOpts["v2ray-http-upgrade-fast-open"] = true } }