diff --git a/common/badtls/read_wait_stub.go b/common/badtls/read_wait_stub.go index c5c9946f..372708ef 100644 --- a/common/badtls/read_wait_stub.go +++ b/common/badtls/read_wait_stub.go @@ -11,3 +11,7 @@ import ( func NewReadWaitConn(conn tls.Conn) (tls.Conn, error) { return nil, os.ErrInvalid } + +type ReadWaitConn struct { + tls.Conn +} diff --git a/transport/vless/vision.go b/transport/vless/vision.go index 6919ce81..4bc1c561 100644 --- a/transport/vless/vision.go +++ b/transport/vless/vision.go @@ -11,6 +11,7 @@ import ( "time" "unsafe" + "github.com/sagernet/sing-box/common/badtls" C "github.com/sagernet/sing-box/constant" "github.com/sagernet/sing/common" "github.com/sagernet/sing/common/buf" @@ -68,6 +69,9 @@ func NewVisionConn(conn net.Conn, tlsConn net.Conn, userUUID [16]byte, logger lo reflectPointer uintptr netConn net.Conn ) + if badtlsConn, ok := common.Cast[*badtls.ReadWaitConn](tlsConn); ok { + tlsConn = badtlsConn.Conn + } for _, tlsCreator := range tlsRegistry { loaded, netConn, reflectType, reflectPointer = tlsCreator(tlsConn) if loaded {