From 93cff1a576975d9375a47a0d3658a30d295878d8 Mon Sep 17 00:00:00 2001 From: mmmray <142015632+mmmray@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:20:12 +0200 Subject: [PATCH] Xmux: Value of 0 is treated the same as no value (#3835) It turns out that some panels like to set `"xmux": {"maxConnections": 0, "maxConcurrency": 0}`, and of course that fails now. To make their job easier, let's treat `0` the same as not setting the parameter. Again, I don't like that xray's defaults are hardcoded all over the place. I would have liked a different default value for Xmux in a future version, but it actually can't be done in practice because everybody just copypastes the defaults from the docs into their own sourcecode (and sometimes changes them silently to their own idea of a good default) --- infra/conf/transport_internet.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/infra/conf/transport_internet.go b/infra/conf/transport_internet.go index 9605d2a2..21cffc07 100644 --- a/infra/conf/transport_internet.go +++ b/infra/conf/transport_internet.go @@ -263,7 +263,7 @@ func (c *SplitHTTPConfig) Build() (proto.Message, error) { c.Host = c.Headers["Host"] } - if c.Xmux.MaxConnections != nil && c.Xmux.MaxConcurrency != nil { + if c.Xmux.MaxConnections != nil && c.Xmux.MaxConnections.To > 0 && c.Xmux.MaxConcurrency != nil && c.Xmux.MaxConcurrency.To > 0 { return nil, errors.New("maxConnections cannot be specified together with maxConcurrency") } @@ -779,19 +779,19 @@ func (c *SocketConfig) Build() (*internet.SocketConfig, error) { } type StreamConfig struct { - Network *TransportProtocol `json:"network"` - Security string `json:"security"` - TLSSettings *TLSConfig `json:"tlsSettings"` - REALITYSettings *REALITYConfig `json:"realitySettings"` - TCPSettings *TCPConfig `json:"tcpSettings"` - KCPSettings *KCPConfig `json:"kcpSettings"` - WSSettings *WebSocketConfig `json:"wsSettings"` - HTTPSettings *HTTPConfig `json:"httpSettings"` - SocketSettings *SocketConfig `json:"sockopt"` - GRPCConfig *GRPCConfig `json:"grpcSettings"` - GUNConfig *GRPCConfig `json:"gunSettings"` - HTTPUPGRADESettings *HttpUpgradeConfig `json:"httpupgradeSettings"` - SplitHTTPSettings *SplitHTTPConfig `json:"splithttpSettings"` + Network *TransportProtocol `json:"network"` + Security string `json:"security"` + TLSSettings *TLSConfig `json:"tlsSettings"` + REALITYSettings *REALITYConfig `json:"realitySettings"` + TCPSettings *TCPConfig `json:"tcpSettings"` + KCPSettings *KCPConfig `json:"kcpSettings"` + WSSettings *WebSocketConfig `json:"wsSettings"` + HTTPSettings *HTTPConfig `json:"httpSettings"` + SocketSettings *SocketConfig `json:"sockopt"` + GRPCConfig *GRPCConfig `json:"grpcSettings"` + GUNConfig *GRPCConfig `json:"gunSettings"` + HTTPUPGRADESettings *HttpUpgradeConfig `json:"httpupgradeSettings"` + SplitHTTPSettings *SplitHTTPConfig `json:"splithttpSettings"` } // Build implements Buildable.