fix: reshaping buffer maybe too long in vision

This commit is contained in:
wwqgtxx
2025-09-14 12:17:50 +08:00
parent cea29e2615
commit f02766a765
2 changed files with 17 additions and 9 deletions

View File

@@ -47,15 +47,21 @@ func ApplyPadding(buffer *buf.Buffer, command byte, userUUID *[]byte, paddingTLS
const xrayBufSize = 8192
func (vc *Conn) ReshapeBuffer(buffer *buf.Buffer) []*buf.Buffer {
if buffer.Len() <= xrayBufSize-PaddingHeaderLen {
const bufferLimit = xrayBufSize - PaddingHeaderLen
if buffer.Len() < bufferLimit {
return []*buf.Buffer{buffer}
}
cutAt := bytes.LastIndex(buffer.Bytes(), tlsApplicationDataStart)
if cutAt == -1 {
cutAt = xrayBufSize / 2
options := N.NewReadWaitOptions(nil, vc)
var buffers []*buf.Buffer
for buffer.Len() >= bufferLimit {
cutAt := bytes.LastIndex(buffer.Bytes(), tlsApplicationDataStart)
if cutAt < 21 || cutAt > bufferLimit {
cutAt = xrayBufSize / 2
}
buffer2 := options.NewBuffer() // ensure the new buffer can send used in vc.WriteBuffer
buf.Must(buf.Error(buffer2.ReadFullFrom(buffer, cutAt)))
buffers = append(buffers, buffer2)
}
buffer2 := N.NewReadWaitOptions(nil, vc).NewBuffer() // ensure the new buffer can send used in vc.WriteBuffer
buffer2.Write(buffer.From(cutAt))
buffer.Truncate(cutAt)
return []*buf.Buffer{buffer, buffer2}
buffers = append(buffers, buffer)
return buffers
}

View File

@@ -1,4 +1,6 @@
// Package vision implements VLESS flow `xtls-rprx-vision` introduced by Xray-core.
//
// same logic as https://github.com/XTLS/Xray-core/blob/v25.9.11/proxy/proxy.go
package vision
import (
@@ -27,7 +29,7 @@ func NewConn(conn net.Conn, tlsConn net.Conn, userUUID uuid.UUID) (*Conn, error)
ExtendedWriter: N.NewExtendedWriter(conn),
Conn: conn,
userUUID: userUUID,
packetsToFilter: 6,
packetsToFilter: 8,
readProcess: true,
readFilterUUID: true,
writeFilterApplicationData: true,