mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-07-03 10:18:42 +00:00
Chore: Use buf.NewWithSize() (#5941)
This commit is contained in:
@@ -244,11 +244,12 @@ type UDPReader struct {
|
|||||||
|
|
||||||
func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
|
func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
|
||||||
if r.firstMsg != nil {
|
if r.firstMsg != nil {
|
||||||
buffer := buf.New()
|
buffer := buf.NewWithSize(int32(len(r.firstMsg.Data)))
|
||||||
buffer.Write(r.firstMsg.Data)
|
buffer.Write(r.firstMsg.Data)
|
||||||
buffer.UDP = r.firstDest
|
buffer.UDP = r.firstDest
|
||||||
|
|
||||||
r.firstMsg = nil
|
r.firstMsg = nil
|
||||||
|
r.firstDest = nil
|
||||||
|
|
||||||
return buf.MultiBuffer{buffer}, nil
|
return buf.MultiBuffer{buffer}, nil
|
||||||
}
|
}
|
||||||
@@ -274,7 +275,7 @@ func (r *UDPReader) ReadMultiBuffer() (buf.MultiBuffer, error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer := buf.New()
|
buffer := buf.NewWithSize(int32(len(dfMsg.Data)))
|
||||||
buffer.Write(dfMsg.Data)
|
buffer.Write(dfMsg.Data)
|
||||||
buffer.UDP = &dest
|
buffer.UDP = &dest
|
||||||
|
|
||||||
|
|||||||
@@ -110,8 +110,7 @@ func (t *stackGVisor) Start() error {
|
|||||||
srcIP := net.IPAddress(id.RemoteAddress.AsSlice())
|
srcIP := net.IPAddress(id.RemoteAddress.AsSlice())
|
||||||
dstIP := net.IPAddress(id.LocalAddress.AsSlice())
|
dstIP := net.IPAddress(id.LocalAddress.AsSlice())
|
||||||
if srcIP == nil || dstIP == nil {
|
if srcIP == nil || dstIP == nil {
|
||||||
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " > invalid ip address ", id.RemoteAddress.AsSlice(), " ", id.LocalAddress.AsSlice())
|
panic(id)
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
src := net.UDPDestination(srcIP, net.Port(id.RemotePort))
|
src := net.UDPDestination(srcIP, net.Port(id.RemotePort))
|
||||||
dst := net.UDPDestination(dstIP, net.Port(id.LocalPort))
|
dst := net.UDPDestination(dstIP, net.Port(id.LocalPort))
|
||||||
|
|||||||
+10
-19
@@ -74,7 +74,7 @@ func (u *udpConnectionHandler) HandlePacket(src net.Destination, dst net.Destina
|
|||||||
dest: &dst,
|
dest: &dst,
|
||||||
}:
|
}:
|
||||||
default:
|
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) {
|
func (c *udpConn) ReadMultiBuffer() (buf.MultiBuffer, error) {
|
||||||
for {
|
e, ok := <-c.egress
|
||||||
e, ok := <-c.egress
|
if !ok {
|
||||||
if !ok {
|
return nil, io.EOF
|
||||||
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.UDP = e.dest
|
|
||||||
|
|
||||||
return buf.MultiBuffer{b}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
// Read packets from the connection
|
||||||
|
|||||||
+11
-21
@@ -192,8 +192,7 @@ func createGVisorTun(localAddresses []netip.Addr, mtu int, handler promiscuousMo
|
|||||||
srcIP := net.IPAddress(id.RemoteAddress.AsSlice())
|
srcIP := net.IPAddress(id.RemoteAddress.AsSlice())
|
||||||
dstIP := net.IPAddress(id.LocalAddress.AsSlice())
|
dstIP := net.IPAddress(id.LocalAddress.AsSlice())
|
||||||
if srcIP == nil || dstIP == nil {
|
if srcIP == nil || dstIP == nil {
|
||||||
errors.LogDebug(context.Background(), "drop udp with size ", len(data), " > invalid ip address ", id.RemoteAddress.AsSlice(), " ", id.LocalAddress.AsSlice())
|
panic(id)
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
src := net.UDPDestination(srcIP, net.Port(id.RemotePort))
|
src := net.UDPDestination(srcIP, net.Port(id.RemotePort))
|
||||||
dst := net.UDPDestination(dstIP, net.Port(id.LocalPort))
|
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,
|
dest: &dst,
|
||||||
}:
|
}:
|
||||||
default:
|
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) {
|
func (c *udpConn) ReadMultiBuffer() (buf.MultiBuffer, error) {
|
||||||
for {
|
q, ok := <-c.queue
|
||||||
q, ok := <-c.queue
|
if !ok {
|
||||||
if !ok {
|
return nil, io.EOF
|
||||||
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.UDP = q.dest
|
|
||||||
|
|
||||||
return buf.MultiBuffer{b}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
func (c *udpConn) Read(p []byte) (int, error) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
xbuf "github.com/xtls/xray-core/common/buf"
|
||||||
"github.com/xtls/xray-core/common/errors"
|
"github.com/xtls/xray-core/common/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -104,17 +105,22 @@ type headerSize interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type headerManagerConn struct {
|
type headerManagerConn struct {
|
||||||
sizes []int
|
sync.Mutex
|
||||||
conns []net.PacketConn
|
|
||||||
net.PacketConn
|
net.PacketConn
|
||||||
m sync.Mutex
|
|
||||||
|
sizes []int
|
||||||
|
conns []net.PacketConn
|
||||||
writeBuf [UDPSize]byte
|
writeBuf [UDPSize]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *headerManagerConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) {
|
func (c *headerManagerConn) ReadFrom(p []byte) (n int, addr net.Addr, err error) {
|
||||||
buf := p
|
buf := p
|
||||||
if len(buf) < UDPSize {
|
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)
|
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) {
|
func (c *headerManagerConn) WriteTo(p []byte, addr net.Addr) (n int, err error) {
|
||||||
c.m.Lock()
|
c.Lock()
|
||||||
defer c.m.Unlock()
|
defer c.Unlock()
|
||||||
|
|
||||||
sum := 0
|
sum := 0
|
||||||
for _, size := range c.sizes {
|
for _, size := range c.sizes {
|
||||||
|
|||||||
Reference in New Issue
Block a user