From aac0d6a6a500a83df2040e378a1c6df3da58e78b Mon Sep 17 00:00:00 2001 From: Jesus <75259437+Jolymmiles@users.noreply.github.com> Date: Sat, 16 Aug 2025 03:07:33 +0400 Subject: [PATCH] VLESS inbound: Add option to set default `flow` (#5023) Closes https://github.com/XTLS/Xray-core/issues/4994 --- infra/conf/vless.go | 14 +++++++++++++- proxy/vless/vless.go | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/infra/conf/vless.go b/infra/conf/vless.go index 5d4ace6f..1a7341b3 100644 --- a/infra/conf/vless.go +++ b/infra/conf/vless.go @@ -32,12 +32,20 @@ type VLessInboundConfig struct { Clients []json.RawMessage `json:"clients"` Decryption string `json:"decryption"` Fallbacks []*VLessInboundFallback `json:"fallbacks"` + Flow string `json:"flow"` } // Build implements Buildable func (c *VLessInboundConfig) Build() (proto.Message, error) { config := new(inbound.Config) config.Clients = make([]*protocol.User, len(c.Clients)) + switch c.Flow { + case vless.None: + c.Flow = "" + case "", vless.XRV: + default: + return nil, errors.New(`VLESS "settings.flow" doesn't support "` + c.Flow + `" in this version`) + } for idx, rawUser := range c.Clients { user := new(protocol.User) if err := json.Unmarshal(rawUser, user); err != nil { @@ -55,7 +63,11 @@ func (c *VLessInboundConfig) Build() (proto.Message, error) { account.Id = u.String() switch account.Flow { - case "", vless.XRV: + case "": + account.Flow = c.Flow + case vless.None: + account.Flow = "" + case vless.XRV: default: return nil, errors.New(`VLESS clients: "flow" doesn't support "` + account.Flow + `" in this version`) } diff --git a/proxy/vless/vless.go b/proxy/vless/vless.go index ed63b641..bdebdca6 100644 --- a/proxy/vless/vless.go +++ b/proxy/vless/vless.go @@ -6,5 +6,6 @@ package vless const ( - XRV = "xtls-rprx-vision" + None = "none" + XRV = "xtls-rprx-vision" )