diff --git a/common/net/sing.go b/common/net/sing.go index 72bfd972..df07bf98 100644 --- a/common/net/sing.go +++ b/common/net/sing.go @@ -24,6 +24,8 @@ var WriteBuffer = bufio.WriteBuffer type ReadWaitOptions = network.ReadWaitOptions var NewReadWaitOptions = network.NewReadWaitOptions +var CalculateFrontHeadroom = network.CalculateFrontHeadroom +var CalculateRearHeadroom = network.CalculateRearHeadroom type ReaderWithUpstream = network.ReaderWithUpstream type WithUpstreamReader = network.WithUpstreamReader diff --git a/transport/vless/vision/conn.go b/transport/vless/vision/conn.go index 4e62b153..a4d236c1 100644 --- a/transport/vless/vision/conn.go +++ b/transport/vless/vision/conn.go @@ -242,14 +242,26 @@ func (vc *Conn) WriteBuffer(buffer *buf.Buffer) (err error) { } func (vc *Conn) FrontHeadroom() int { + fontHeadroom := PaddingHeaderLen - uuid.Size if vc.readFilterUUID || vc.writeOnceUserUUID != nil { - return PaddingHeaderLen + fontHeadroom = PaddingHeaderLen } - return PaddingHeaderLen - uuid.Size + if vc.writeFilterApplicationData { // The writer may be replaced, add the required value for vc.netConn + if abs := N.CalculateFrontHeadroom(vc.netConn) - N.CalculateFrontHeadroom(vc.Conn); abs > 0 { + fontHeadroom += abs + } + } + return fontHeadroom } func (vc *Conn) RearHeadroom() int { - return 500 + 900 + rearHeadroom := 500 + 900 + if vc.writeFilterApplicationData { // The writer may be replaced, add the required value for vc.netConn + if abs := N.CalculateRearHeadroom(vc.netConn) - N.CalculateRearHeadroom(vc.Conn); abs > 0 { + rearHeadroom += abs + } + } + return rearHeadroom } func (vc *Conn) NeedHandshake() bool {