change []byte bufpool to *[]byte

This commit is contained in:
ginuerzh
2022-01-06 09:50:37 +08:00
parent 3b48c4acfb
commit f45dc93e92
16 changed files with 98 additions and 86 deletions

View File

@ -116,14 +116,14 @@ func (h *dnsHandler) Handle(ctx context.Context, conn net.Conn) {
b := bufpool.Get(4096)
defer bufpool.Put(b)
n, err := conn.Read(b)
n, err := conn.Read(*b)
if err != nil {
h.logger.Error(err)
return
}
h.logger.Info("read data: ", n)
reply, err := h.exchange(ctx, b[:n])
reply, err := h.exchange(ctx, (*b)[:n])
if err != nil {
return
}

View File

@ -52,7 +52,7 @@ func (r *UDPRelay) Run() (err error) {
b := bufpool.Get(bufSize)
defer bufpool.Put(b)
n, raddr, err := r.pc1.ReadFrom(b)
n, raddr, err := r.pc1.ReadFrom(*b)
if err != nil {
return err
}
@ -64,7 +64,7 @@ func (r *UDPRelay) Run() (err error) {
return nil
}
if _, err := r.pc2.WriteTo(b[:n], raddr); err != nil {
if _, err := r.pc2.WriteTo((*b)[:n], raddr); err != nil {
return err
}
@ -90,7 +90,7 @@ func (r *UDPRelay) Run() (err error) {
b := bufpool.Get(bufSize)
defer bufpool.Put(b)
n, raddr, err := r.pc2.ReadFrom(b)
n, raddr, err := r.pc2.ReadFrom(*b)
if err != nil {
return err
}
@ -102,7 +102,7 @@ func (r *UDPRelay) Run() (err error) {
return nil
}
if _, err := r.pc1.WriteTo(b[:n], raddr); err != nil {
if _, err := r.pc1.WriteTo((*b)[:n], raddr); err != nil {
return err
}

View File

@ -196,7 +196,7 @@ func (h *relayHandler) tunnelServerUDP(tunnel, c net.PacketConn) (err error) {
b := bufpool.Get(bufSize)
defer bufpool.Put(b)
n, raddr, err := tunnel.ReadFrom(b)
n, raddr, err := tunnel.ReadFrom(*b)
if err != nil {
return err
}
@ -206,7 +206,7 @@ func (h *relayHandler) tunnelServerUDP(tunnel, c net.PacketConn) (err error) {
return nil
}
if _, err := c.WriteTo(b[:n], raddr); err != nil {
if _, err := c.WriteTo((*b)[:n], raddr); err != nil {
return err
}
@ -229,7 +229,7 @@ func (h *relayHandler) tunnelServerUDP(tunnel, c net.PacketConn) (err error) {
b := bufpool.Get(bufSize)
defer bufpool.Put(b)
n, raddr, err := c.ReadFrom(b)
n, raddr, err := c.ReadFrom(*b)
if err != nil {
return err
}
@ -239,7 +239,7 @@ func (h *relayHandler) tunnelServerUDP(tunnel, c net.PacketConn) (err error) {
return nil
}
if _, err := tunnel.WriteTo(b[:n], raddr); err != nil {
if _, err := tunnel.WriteTo((*b)[:n], raddr); err != nil {
return err
}
h.logger.Debugf("%s <<< %s data: %d",

View File

@ -120,13 +120,13 @@ func (h *sniHandler) Handle(ctx context.Context, conn net.Conn) {
buf := bufpool.Get(int(length) + dissector.RecordHeaderLen)
defer bufpool.Put(buf)
if _, err := io.ReadFull(conn, buf[dissector.RecordHeaderLen:]); err != nil {
if _, err := io.ReadFull(conn, (*buf)[dissector.RecordHeaderLen:]); err != nil {
h.logger.Error(err)
return
}
copy(buf, hdr[:])
copy(*buf, hdr[:])
buf, host, err := h.decodeHost(bytes.NewReader(buf))
opaque, host, err := h.decodeHost(bytes.NewReader(*buf))
if err != nil {
h.logger.Error(err)
return
@ -149,7 +149,7 @@ func (h *sniHandler) Handle(ctx context.Context, conn net.Conn) {
}
defer cc.Close()
if _, err := cc.Write(buf); err != nil {
if _, err := cc.Write(opaque); err != nil {
h.logger.Error(err)
return
}

View File

@ -128,7 +128,7 @@ func (h *ssuHandler) relayPacket(pc1, pc2 net.PacketConn) (err error) {
b := bufpool.Get(bufSize)
defer bufpool.Put(b)
n, addr, err := pc1.ReadFrom(b)
n, addr, err := pc1.ReadFrom(*b)
if err != nil {
return err
}
@ -138,7 +138,7 @@ func (h *ssuHandler) relayPacket(pc1, pc2 net.PacketConn) (err error) {
return nil
}
if _, err = pc2.WriteTo(b[:n], addr); err != nil {
if _, err = pc2.WriteTo((*b)[:n], addr); err != nil {
return err
}
@ -160,7 +160,7 @@ func (h *ssuHandler) relayPacket(pc1, pc2 net.PacketConn) (err error) {
b := bufpool.Get(bufSize)
defer bufpool.Put(b)
n, raddr, err := pc2.ReadFrom(b)
n, raddr, err := pc2.ReadFrom(*b)
if err != nil {
return err
}
@ -170,7 +170,7 @@ func (h *ssuHandler) relayPacket(pc1, pc2 net.PacketConn) (err error) {
return nil
}
if _, err = pc1.WriteTo(b[:n], raddr); err != nil {
if _, err = pc1.WriteTo((*b)[:n], raddr); err != nil {
return err
}

View File

@ -192,7 +192,7 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr
b := bufpool.Get(h.md.bufferSize)
defer bufpool.Put(b)
n, err := tap.Read(b)
n, err := tap.Read(*b)
if err != nil {
select {
case h.exit <- struct{}{}:
@ -201,22 +201,22 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr
return err
}
src := waterutil.MACSource(b[:n])
dst := waterutil.MACDestination(b[:n])
eType := etherType(waterutil.MACEthertype(b[:n]))
src := waterutil.MACSource((*b)[:n])
dst := waterutil.MACDestination((*b)[:n])
eType := etherType(waterutil.MACEthertype((*b)[:n]))
h.logger.Debugf("%s >> %s %s %d", src, dst, eType, n)
// client side, deliver frame directly.
if raddr != nil {
_, err := conn.WriteTo(b[:n], raddr)
_, err := conn.WriteTo((*b)[:n], raddr)
return err
}
// server side, broadcast.
if waterutil.IsBroadcast(dst) {
go h.routes.Range(func(k, v interface{}) bool {
conn.WriteTo(b[:n], v.(net.Addr))
conn.WriteTo((*b)[:n], v.(net.Addr))
return true
})
return nil
@ -231,7 +231,7 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr
return nil
}
if _, err := conn.WriteTo(b[:n], addr); err != nil {
if _, err := conn.WriteTo((*b)[:n], addr); err != nil {
return err
}
@ -251,21 +251,21 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr
b := bufpool.Get(h.md.bufferSize)
defer bufpool.Put(b)
n, addr, err := conn.ReadFrom(b)
n, addr, err := conn.ReadFrom(*b)
if err != nil &&
err != shadowaead.ErrShortPacket {
return err
}
src := waterutil.MACSource(b[:n])
dst := waterutil.MACDestination(b[:n])
eType := etherType(waterutil.MACEthertype(b[:n]))
src := waterutil.MACSource((*b)[:n])
dst := waterutil.MACDestination((*b)[:n])
eType := etherType(waterutil.MACEthertype((*b)[:n]))
h.logger.Debugf("%s >> %s %s %d", src, dst, eType, n)
// client side, deliver frame to tap device.
if raddr != nil {
_, err := tap.Write(b[:n])
_, err := tap.Write((*b)[:n])
return err
}
@ -284,7 +284,7 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr
if waterutil.IsBroadcast(dst) {
go h.routes.Range(func(k, v interface{}) bool {
if k.(tapRouteKey) != rkey {
conn.WriteTo(b[:n], v.(net.Addr))
conn.WriteTo((*b)[:n], v.(net.Addr))
}
return true
})
@ -292,11 +292,11 @@ func (h *tapHandler) transport(tap net.Conn, conn net.PacketConn, raddr net.Addr
if v, ok := h.routes.Load(hwAddrToTapRouteKey(dst)); ok {
h.logger.Debugf("find route: %s -> %s", dst, v)
_, err := conn.WriteTo(b[:n], v.(net.Addr))
_, err := conn.WriteTo((*b)[:n], v.(net.Addr))
return err
}
if _, err := tap.Write(b[:n]); err != nil {
if _, err := tap.Write((*b)[:n]); err != nil {
select {
case h.exit <- struct{}{}:
default:

View File

@ -29,7 +29,7 @@ func copyBuffer(dst io.Writer, src io.Reader) error {
buf := bufpool.Get(16 * 1024)
defer bufpool.Put(buf)
_, err := io.CopyBuffer(dst, src, buf)
_, err := io.CopyBuffer(dst, src, *buf)
return err
}

View File

@ -193,7 +193,7 @@ func (h *tunHandler) transport(tun net.Conn, conn net.PacketConn, raddr net.Addr
b := bufpool.Get(h.md.bufferSize)
defer bufpool.Put(b)
n, err := tun.Read(b)
n, err := tun.Read(*b)
if err != nil {
select {
case h.exit <- struct{}{}:
@ -203,19 +203,19 @@ func (h *tunHandler) transport(tun net.Conn, conn net.PacketConn, raddr net.Addr
}
var src, dst net.IP
if waterutil.IsIPv4(b[:n]) {
header, err := ipv4.ParseHeader(b[:n])
if waterutil.IsIPv4((*b)[:n]) {
header, err := ipv4.ParseHeader((*b)[:n])
if err != nil {
h.logger.Error(err)
return nil
}
h.logger.Debugf("%s >> %s %-4s %d/%-4d %-4x %d",
header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol(b[:n])),
header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol((*b)[:n])),
header.Len, header.TotalLen, header.ID, header.Flags)
src, dst = header.Src, header.Dst
} else if waterutil.IsIPv6(b[:n]) {
header, err := ipv6.ParseHeader(b[:n])
} else if waterutil.IsIPv6((*b)[:n]) {
header, err := ipv6.ParseHeader((*b)[:n])
if err != nil {
h.logger.Warn(err)
return nil
@ -233,7 +233,7 @@ func (h *tunHandler) transport(tun net.Conn, conn net.PacketConn, raddr net.Addr
// client side, deliver packet directly.
if raddr != nil {
_, err := conn.WriteTo(b[:n], raddr)
_, err := conn.WriteTo((*b)[:n], raddr)
return err
}
@ -245,7 +245,7 @@ func (h *tunHandler) transport(tun net.Conn, conn net.PacketConn, raddr net.Addr
h.logger.Debugf("find route: %s -> %s", dst, addr)
if _, err := conn.WriteTo(b[:n], addr); err != nil {
if _, err := conn.WriteTo((*b)[:n], addr); err != nil {
return err
}
return nil
@ -264,27 +264,27 @@ func (h *tunHandler) transport(tun net.Conn, conn net.PacketConn, raddr net.Addr
b := bufpool.Get(h.md.bufferSize)
defer bufpool.Put(b)
n, addr, err := conn.ReadFrom(b)
n, addr, err := conn.ReadFrom(*b)
if err != nil &&
err != shadowaead.ErrShortPacket {
return err
}
var src, dst net.IP
if waterutil.IsIPv4(b[:n]) {
header, err := ipv4.ParseHeader(b[:n])
if waterutil.IsIPv4((*b)[:n]) {
header, err := ipv4.ParseHeader((*b)[:n])
if err != nil {
h.logger.Warn(err)
return nil
}
h.logger.Debugf("%s >> %s %-4s %d/%-4d %-4x %d",
header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol(b[:n])),
header.Src, header.Dst, ipProtocol(waterutil.IPv4Protocol((*b)[:n])),
header.Len, header.TotalLen, header.ID, header.Flags)
src, dst = header.Src, header.Dst
} else if waterutil.IsIPv6(b[:n]) {
header, err := ipv6.ParseHeader(b[:n])
} else if waterutil.IsIPv6((*b)[:n]) {
header, err := ipv6.ParseHeader((*b)[:n])
if err != nil {
h.logger.Warn(err)
return nil
@ -303,7 +303,7 @@ func (h *tunHandler) transport(tun net.Conn, conn net.PacketConn, raddr net.Addr
// client side, deliver packet to tun device.
if raddr != nil {
_, err := tun.Write(b[:n])
_, err := tun.Write((*b)[:n])
return err
}
@ -321,11 +321,11 @@ func (h *tunHandler) transport(tun net.Conn, conn net.PacketConn, raddr net.Addr
if addr := h.findRouteFor(dst); addr != nil {
h.logger.Debugf("find route: %s -> %s", dst, addr)
_, err := conn.WriteTo(b[:n], addr)
_, err := conn.WriteTo((*b)[:n], addr)
return err
}
if _, err := tun.Write(b[:n]); err != nil {
if _, err := tun.Write((*b)[:n]); err != nil {
select {
case h.exit <- struct{}{}:
default: