diff --git a/transport/vless/conn.go b/transport/vless/conn.go index 02224892..180a9969 100644 --- a/transport/vless/conn.go +++ b/transport/vless/conn.go @@ -105,26 +105,20 @@ func (vc *Conn) sendRequest(p []byte) bool { } } - var buffer *buf.Buffer - if vc.IsXTLSVisionEnabled() { - buffer = buf.New() - defer buffer.Release() - } else { - requestLen := 1 // protocol version - requestLen += 16 // UUID - requestLen += 1 // addons length - requestLen += len(addonsBytes) - requestLen += 1 // command - if !vc.dst.Mux { - requestLen += 2 // port - requestLen += 1 // addr type - requestLen += len(vc.dst.Addr) - } - requestLen += len(p) - - buffer = buf.NewSize(requestLen) - defer buffer.Release() + requestLen := 1 // protocol version + requestLen += 16 // UUID + requestLen += 1 // addons length + requestLen += len(addonsBytes) + requestLen += 1 // command + if !vc.dst.Mux { + requestLen += 2 // port + requestLen += 1 // addr type + requestLen += len(vc.dst.Addr) } + requestLen += len(p) + + buffer := buf.NewSize(requestLen) + defer buffer.Release() buf.Must( buffer.WriteByte(Version), // protocol version @@ -182,10 +176,6 @@ func (vc *Conn) NeedHandshake() bool { return vc.needHandshake } -func (vc *Conn) IsXTLSVisionEnabled() bool { - return vc.addons != nil && vc.addons.Flow == XRV -} - // newConn return a Conn instance func newConn(conn net.Conn, client *Client, dst *DstAddr) (net.Conn, error) { c := &Conn{ diff --git a/transport/vless/vision/conn.go b/transport/vless/vision/conn.go index 56684808..a0e83f71 100644 --- a/transport/vless/vision/conn.go +++ b/transport/vless/vision/conn.go @@ -3,7 +3,6 @@ package vision import ( "bytes" "crypto/subtle" - gotls "crypto/tls" "encoding/binary" "errors" "fmt" @@ -12,7 +11,6 @@ import ( "github.com/metacubex/mihomo/common/buf" N "github.com/metacubex/mihomo/common/net" - tlsC "github.com/metacubex/mihomo/component/tls" "github.com/metacubex/mihomo/log" "github.com/gofrs/uuid/v5" @@ -181,17 +179,10 @@ func (vc *Conn) WriteBuffer(buffer *buf.Buffer) (err error) { buffer.Release() return err } - switch underlying := vc.tlsConn.(type) { - case *gotls.Conn: - if underlying.ConnectionState().Version != gotls.VersionTLS13 { - buffer.Release() - return ErrNotTLS13 - } - case *tlsC.UConn: - if underlying.ConnectionState().Version != tlsC.VersionTLS13 { - buffer.Release() - return ErrNotTLS13 - } + err = vc.checkTLSVersion() + if err != nil { + buffer.Release() + return err } vc.tlsConn = nil return nil diff --git a/transport/vless/vision/vision.go b/transport/vless/vision/vision.go index 00d0bf09..570a569c 100644 --- a/transport/vless/vision/vision.go +++ b/transport/vless/vision/vision.go @@ -67,3 +67,21 @@ func NewConn(conn connWithUpstream, userUUID *uuid.UUID) (*Conn, error) { c.rawInput = (*bytes.Buffer)(unsafe.Add(p, r.Offset)) return c, nil } + +func (vc *Conn) checkTLSVersion() error { + switch underlying := vc.tlsConn.(type) { + case *gotls.Conn: + if underlying.ConnectionState().Version != gotls.VersionTLS13 { + return ErrNotTLS13 + } + case *tlsC.Conn: + if underlying.ConnectionState().Version != tlsC.VersionTLS13 { + return ErrNotTLS13 + } + case *tlsC.UConn: + if underlying.ConnectionState().Version != tlsC.VersionTLS13 { + return ErrNotTLS13 + } + } + return nil +}