From fd5ac69a3580ce60c76f63bb259c861c9ae79235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Thu, 25 Aug 2022 11:50:32 +0800 Subject: [PATCH] Let vmess use zero instead of auto if TLS enabled --- outbound/vmess.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/outbound/vmess.go b/outbound/vmess.go index ec749616..79b28729 100644 --- a/outbound/vmess.go +++ b/outbound/vmess.go @@ -32,17 +32,6 @@ type VMess struct { } func NewVMess(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.VMessOutboundOptions) (*VMess, error) { - var clientOptions []vmess.ClientOption - if options.GlobalPadding { - clientOptions = append(clientOptions, vmess.ClientWithGlobalPadding()) - } - if options.AuthenticatedLength { - clientOptions = append(clientOptions, vmess.ClientWithAuthenticatedLength()) - } - client, err := vmess.NewClient(options.UUID, options.Security, options.AlterId, clientOptions...) - if err != nil { - return nil, err - } outbound := &VMess{ myOutboundAdapter: myOutboundAdapter{ protocol: C.TypeVMess, @@ -52,9 +41,9 @@ func NewVMess(ctx context.Context, router adapter.Router, logger log.ContextLogg tag: tag, }, dialer: dialer.NewOutbound(router, options.OutboundDialerOptions), - client: client, serverAddr: options.ServerOptions.Build(), } + var err error if options.TLS != nil { outbound.tlsConfig, err = dialer.TLSConfig(options.Server, common.PtrValueOrDefault(options.TLS)) if err != nil { @@ -71,6 +60,25 @@ func NewVMess(ctx context.Context, router adapter.Router, logger log.ContextLogg if err != nil { return nil, err } + var clientOptions []vmess.ClientOption + if options.GlobalPadding { + clientOptions = append(clientOptions, vmess.ClientWithGlobalPadding()) + } + if options.AuthenticatedLength { + clientOptions = append(clientOptions, vmess.ClientWithAuthenticatedLength()) + } + security := options.Security + if security == "" { + security = "auto" + } + if security == "auto" && outbound.tlsConfig != nil { + security = "zero" + } + client, err := vmess.NewClient(options.UUID, security, options.AlterId, clientOptions...) + if err != nil { + return nil, err + } + outbound.client = client return outbound, nil }