From 5c73025b536a68f8af9ca5b8b1277803bdaa8d8a Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Thu, 28 Aug 2025 09:36:52 +0800 Subject: [PATCH] chore: change vless encryption code to our style --- transport/vless/encryption/common.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/transport/vless/encryption/common.go b/transport/vless/encryption/common.go index 53c9c51d..940deda1 100644 --- a/transport/vless/encryption/common.go +++ b/transport/vless/encryption/common.go @@ -10,19 +10,12 @@ import ( "io" "math/big" "net" - "strings" - "sync" "time" "github.com/metacubex/blake3" + "github.com/metacubex/mihomo/common/pool" ) -var OutBytesPool = sync.Pool{ - New: func() any { - return make([]byte, 5+8192+16) - }, -} - type CommonConn struct { net.Conn Client *ClientInstance @@ -46,8 +39,8 @@ func (c *CommonConn) Write(b []byte) (int, error) { if len(b) == 0 { return 0, nil } - outBytes := OutBytesPool.Get().([]byte) - defer OutBytesPool.Put(outBytes) + outBytes := pool.Get(5 + 8192 + 16) + defer pool.Put(outBytes) for n := 0; n < len(b); { b := b[n:] if len(b) > 8192 { @@ -107,7 +100,7 @@ func (c *CommonConn) Read(b []byte) (int, error) { } l, err := DecodeHeader(c.PeerInBytes[:5]) // l: 17~17000 if err != nil { - if c.Client != nil && strings.Contains(err.Error(), "invalid header: ") { // client's 0-RTT + if c.Client != nil && errors.Is(err, ErrInvalidHeader) { // client's 0-RTT c.Client.RWLock.Lock() if bytes.HasPrefix(c.UnitedKey, c.Client.PfsKey) { c.Client.Expire = time.Now() // expired @@ -200,13 +193,15 @@ func EncodeHeader(h []byte, l int) { h[4] = byte(l) } +var ErrInvalidHeader = errors.New("invalid header") + func DecodeHeader(h []byte) (l int, err error) { l = int(h[3])<<8 | int(h[4]) if h[0] != 23 || h[1] != 3 || h[2] != 3 { l = 0 } if l < 17 || l > 17000 { // TODO: TLSv1.3 max length - err = fmt.Errorf("invalid header: %v", h[:5]) // DO NOT CHANGE: relied by client's Read() + err = fmt.Errorf("%w: %v", ErrInvalidHeader, h[:5]) // DO NOT CHANGE: relied by client's Read() } return }