Chore: Use buf.NewWithSize() (#5941)

This commit is contained in:
LjhAUMEM
2026-04-15 20:11:51 +08:00
committed by GitHub
parent 7c56b7beea
commit 5c3d639c09
5 changed files with 37 additions and 50 deletions

View File

@@ -244,11 +244,12 @@ type UDPReader struct {
func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
if r.firstMsg != nil {
buffer := buf.New()
buffer := buf.NewWithSize(int32(len(r.firstMsg.Data)))
buffer.Write(r.firstMsg.Data)
buffer.UDP = r.firstDest
r.firstMsg = nil
r.firstDest = nil
return buf.MultiBuffer{buffer}, nil
}
@@ -274,7 +275,7 @@ func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
continue
}
buffer := buf.New()
buffer := buf.NewWithSize(int32(len(dfMsg.Data)))
buffer.Write(dfMsg.Data)
buffer.UDP = &dest

View File

@@ -110,8 +110,7 @@ func (t *stackGVisor) Start() error {
srcIP := net.IPAddress(id.RemoteAddress.AsSlice())
dstIP := net.IPAddress(id.LocalAddress.AsSlice())
if srcIP == nil || dstIP == nil {
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " > invalid ip address ", id.RemoteAddress.AsSlice(), " ", id.LocalAddress.AsSlice())
return true
panic(id)
}
src := net.UDPDestination(srcIP, net.Port(id.RemotePort))
dst := net.UDPDestination(dstIP, net.Port(id.LocalPort))

View File

@@ -74,7 +74,7 @@ func (u *udpConnectionHandler) HandlePacket(src net.Destination, dst net.Destina
dest: &dst,
}:
default:
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " to ", dst.NetAddr(), " original ", conn.dst.NetAddr(), " > queue full")
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " to ", dst.NetAddr(), " original ", conn.dst.NetAddr(), " > queue full 2")
}
}
@@ -98,25 +98,16 @@ type udpConn struct {
}
func (c *udpConn) ReadMultiBuffer() (buf.MultiBuffer, error) {
for {
e, ok := <-c.egress
if !ok {
return nil, io.EOF
}
b := buf.New()
_, err := b.Write(e.data)
if err != nil {
errors.LogDebugInner(context.Background(), err, "drop udp with size ", len(e.data), " to ", e.dest.NetAddr(), " original ", c.dst.NetAddr())
b.Release()
continue
}
b := buf.NewWithSize(int32(len(e.data)))
b.Write(e.data)
b.UDP = e.dest
return buf.MultiBuffer{b}, nil
}
}
// Read packets from the connection

View File

@@ -192,8 +192,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo
srcIP := net.IPAddress(id.RemoteAddress.AsSlice())
dstIP := net.IPAddress(id.LocalAddress.AsSlice())
if srcIP == nil || dstIP == nil {
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " > invalid ip address ", id.RemoteAddress.AsSlice(), " ", id.LocalAddress.AsSlice())
return true
panic(id)
}
src := net.UDPDestination(srcIP, net.Port(id.RemotePort))
dst := net.UDPDestination(dstIP, net.Port(id.LocalPort))
@@ -256,7 +255,7 @@ func (m *udpManager) feed(src net.Destination, dst net.Destination, data []byte)
dest: &dst,
}:
default:
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " to ", dst.NetAddr(), " original ", uc.dst.NetAddr(), " > queue full")
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " to ", dst.NetAddr(), " original ", uc.dst.NetAddr(), " > queue full 2")
}
}
@@ -346,25 +345,16 @@ type udpConn struct {
}
func (c *udpConn) ReadMultiBuffer() (buf.MultiBuffer, error) {
for {
q, ok := <-c.queue
if !ok {
return nil, io.EOF
}
b := buf.New()
_, err := b.Write(q.p)
if err != nil {
errors.LogDebugInner(context.Background(), err, "drop udp with size ", len(q.p), " to ", q.dest.NetAddr(), " original ", c.dst.NetAddr())
b.Release()
continue
}
b := buf.NewWithSize(int32(len(q.p)))
b.Write(q.p)
b.UDP = q.dest
return buf.MultiBuffer{b}, nil
}
}
func (c *udpConn) Read(p []byte) (int, error) {

View File

@@ -5,6 +5,7 @@ import (
"net"
"sync"
xbuf "github.com/xtls/xray-core/common/buf"
"github.com/xtls/xray-core/common/errors"
)
@@ -104,17 +105,22 @@ type headerSize interface {
}
type headerManagerConn struct {
sync.Mutex
net.PacketConn
sizes []int
conns []net.PacketConn
net.PacketConn
m sync.Mutex
writeBuf [UDPSize]byte
}
func (c *headerManagerConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) {
buf := p
if len(buf) < UDPSize {
buf = make([]byte, UDPSize)
b := xbuf.NewWithSize(UDPSize)
defer b.Release()
b.Resize(0, UDPSize)
buf = b.Bytes()
}
n, addr, err = c.PacketConn.ReadFrom(buf)
@@ -153,8 +159,8 @@ func (c *headerManagerConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)
}
func (c *headerManagerConn) WriteTo(p []byte, addr net.Addr) (n int, err error) {
c.m.Lock()
defer c.m.Unlock()
c.Lock()
defer c.Unlock()
sum := 0
for _, size := range c.sizes {