|
|
|
@ -11,6 +11,7 @@ import ( |
|
|
|
"time" |
|
|
|
|
|
|
|
"github.com/ginuerzh/gosocks5" |
|
|
|
"github.com/go-gost/bpool" |
|
|
|
"github.com/go-log/log" |
|
|
|
"github.com/shadowsocks/go-shadowsocks2/core" |
|
|
|
ss "github.com/shadowsocks/shadowsocks-go/shadowsocks" |
|
|
|
@ -61,8 +62,8 @@ func (c *shadowConnector) ConnectContext(ctx context.Context, conn net.Conn, net |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
rawaddr := sPool.Get().([]byte) |
|
|
|
defer sPool.Put(rawaddr) |
|
|
|
rawaddr := bpool.Get(smallBufferSize) |
|
|
|
defer bpool.Put(rawaddr) |
|
|
|
|
|
|
|
n, err := socksAddr.Encode(rawaddr) |
|
|
|
if err != nil { |
|
|
|
@ -340,8 +341,8 @@ func (h *shadowUDPHandler) transportPacket(conn, cc net.PacketConn) (err error) |
|
|
|
go func() { |
|
|
|
for { |
|
|
|
err := func() error { |
|
|
|
b := mPool.Get().([]byte) |
|
|
|
defer mPool.Put(b) |
|
|
|
b := bpool.Get(mediumBufferSize) |
|
|
|
defer bpool.Put(b) |
|
|
|
|
|
|
|
n, addr, err := conn.ReadFrom(b) |
|
|
|
if err != nil { |
|
|
|
@ -377,8 +378,8 @@ func (h *shadowUDPHandler) transportPacket(conn, cc net.PacketConn) (err error) |
|
|
|
go func() { |
|
|
|
for { |
|
|
|
err := func() error { |
|
|
|
b := mPool.Get().([]byte) |
|
|
|
defer mPool.Put(b) |
|
|
|
b := bpool.Get(mediumBufferSize) |
|
|
|
defer bpool.Put(b) |
|
|
|
|
|
|
|
n, addr, err := cc.ReadFrom(b) |
|
|
|
if err != nil { |
|
|
|
@ -452,8 +453,8 @@ func (h *shadowUDPHandler) transportUDP(conn net.Conn, cc net.PacketConn) error |
|
|
|
go func() { |
|
|
|
for { |
|
|
|
er := func() (err error) { |
|
|
|
b := mPool.Get().([]byte) |
|
|
|
defer mPool.Put(b) |
|
|
|
b := bpool.Get(mediumBufferSize) |
|
|
|
defer bpool.Put(b) |
|
|
|
|
|
|
|
n, addr, err := cc.ReadFrom(b) |
|
|
|
if err != nil { |
|
|
|
@ -514,8 +515,8 @@ type shadowUDPPacketConn struct { |
|
|
|
} |
|
|
|
|
|
|
|
func (c *shadowUDPPacketConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) { |
|
|
|
buf := mPool.Get().([]byte) |
|
|
|
defer mPool.Put(buf) |
|
|
|
buf := bpool.Get(mediumBufferSize) |
|
|
|
defer bpool.Put(buf) |
|
|
|
|
|
|
|
buf[0] = 0 |
|
|
|
buf[1] = 0 |
|
|
|
@ -553,8 +554,8 @@ func (c *shadowUDPPacketConn) WriteTo(b []byte, addr net.Addr) (n int, err error |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
buf := mPool.Get().([]byte) |
|
|
|
defer mPool.Put(buf) |
|
|
|
buf := bpool.Get(mediumBufferSize) |
|
|
|
defer bpool.Put(buf) |
|
|
|
|
|
|
|
copy(buf, rawaddr[:nn]) |
|
|
|
n = copy(buf[nn:], b) |
|
|
|
@ -611,8 +612,8 @@ func initShadowCipher(info *url.Userinfo) (cipher core.Cipher) { |
|
|
|
|
|
|
|
func readSocksAddr(r io.Reader) (*gosocks5.Addr, error) { |
|
|
|
addr := &gosocks5.Addr{} |
|
|
|
b := sPool.Get().([]byte) |
|
|
|
defer sPool.Put(b) |
|
|
|
b := bpool.Get(smallBufferSize) |
|
|
|
defer bpool.Put(b) |
|
|
|
|
|
|
|
_, err := io.ReadFull(r, b[:1]) |
|
|
|
if err != nil { |
|
|
|
|