Chore: use protobytes replace most of bytes.Buffer

This commit is contained in:
Dreamacro
2023-04-17 14:08:39 +08:00
parent df61a586c9
commit b7aade5e11
15 changed files with 244 additions and 236 deletions

View File

@ -1,7 +1,6 @@
package snell
import (
"encoding/binary"
"errors"
"fmt"
"io"
@ -83,22 +82,22 @@ func (s *Snell) Read(b []byte) (int, error) {
}
func WriteHeader(conn net.Conn, host string, port uint, version int) error {
buf := pool.GetBuffer()
defer pool.PutBuffer(buf)
buf.WriteByte(Version)
buf := pool.GetBytesBuffer()
defer pool.PutBytesBuffer(buf)
buf.PutUint8(Version)
if version == Version2 {
buf.WriteByte(CommandConnectV2)
buf.PutUint8(CommandConnectV2)
} else {
buf.WriteByte(CommandConnect)
buf.PutUint8(CommandConnect)
}
// clientID length & id
buf.WriteByte(0)
buf.PutUint8(0)
// host & port
buf.WriteByte(uint8(len(host)))
buf.WriteString(host)
binary.Write(buf, binary.BigEndian, uint16(port))
buf.PutUint8(uint8(len(host)))
buf.PutString(host)
buf.PutUint16be(uint16(port))
if _, err := conn.Write(buf.Bytes()); err != nil {
return err
@ -146,25 +145,25 @@ func PacketConn(conn net.Conn) net.PacketConn {
}
func writePacket(w io.Writer, socks5Addr, payload []byte) (int, error) {
buf := pool.GetBuffer()
defer pool.PutBuffer(buf)
buf := pool.GetBytesBuffer()
defer pool.PutBytesBuffer(buf)
// compose snell UDP address format (refer: icpz/snell-server-reversed)
// a brand new wheel to replace socks5 address format, well done Yachen
buf.WriteByte(CommondUDPForward)
buf.PutUint8(CommondUDPForward)
switch socks5Addr[0] {
case socks5.AtypDomainName:
hostLen := socks5Addr[1]
buf.Write(socks5Addr[1 : 1+1+hostLen+2])
buf.PutSlice(socks5Addr[1 : 1+1+hostLen+2])
case socks5.AtypIPv4:
buf.Write([]byte{0x00, 0x04})
buf.Write(socks5Addr[1 : 1+net.IPv4len+2])
buf.PutSlice([]byte{0x00, 0x04})
buf.PutSlice(socks5Addr[1 : 1+net.IPv4len+2])
case socks5.AtypIPv6:
buf.Write([]byte{0x00, 0x06})
buf.Write(socks5Addr[1 : 1+net.IPv6len+2])
buf.PutSlice([]byte{0x00, 0x06})
buf.PutSlice(socks5Addr[1 : 1+net.IPv6len+2])
}
buf.Write(payload)
buf.PutSlice(payload)
_, err := w.Write(buf.Bytes())
if err != nil {
return 0, err