diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 3856b59..f7fd285 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,3 +13,5 @@ jobs: days-before-stale: 90 days-before-close: 5 exempt-issue-labels: "bug,enhancement" + exempt-pr-labels: "bug,enhancement" + \ No newline at end of file diff --git a/proxy/tproxy/tproxy.go b/proxy/tproxy/tproxy.go index 36ce390..e122bc7 100644 --- a/proxy/tproxy/tproxy.go +++ b/proxy/tproxy/tproxy.go @@ -10,8 +10,6 @@ import ( "golang.org/x/sys/unix" ) -const IPV6_RECVORIGDSTADDR = 0x4a - // ref: https://github.com/LiamHaworth/go-tproxy/blob/master/tproxy_udp.go // MIT License by @LiamHaworth @@ -65,7 +63,7 @@ func ReadFromUDP(conn *net.UDPConn, b []byte) (int, *net.UDPAddr, *net.UDPAddr, port := binary.BigEndian.Uint16(msg.Data[2:4]) return n, addr, &net.UDPAddr{IP: ip, Port: int(port)}, nil } - if msg.Header.Level == syscall.SOL_IPV6 && msg.Header.Type == IPV6_RECVORIGDSTADDR { + if msg.Header.Level == syscall.SOL_IPV6 && msg.Header.Type == unix.IPV6_RECVORIGDSTADDR { ip := net.IP(msg.Data[8:24]) port := binary.BigEndian.Uint16(msg.Data[2:4]) return n, addr, &net.UDPAddr{IP: ip, Port: int(port)}, nil diff --git a/proxy/vmess/chunk_size_parser.go b/proxy/vmess/size.go similarity index 80% rename from proxy/vmess/chunk_size_parser.go rename to proxy/vmess/size.go index e173a14..224acc7 100644 --- a/proxy/vmess/chunk_size_parser.go +++ b/proxy/vmess/size.go @@ -18,11 +18,13 @@ type ChunkSizeDecoder interface { Decode([]byte) (uint16, error) } +// ShakeSizeParser implements ChunkSizeEncoder & ChunkSizeDecoder. type ShakeSizeParser struct { shake sha3.ShakeHash buffer [2]byte } +// NewShakeSizeParser returns a new ShakeSizeParser. func NewShakeSizeParser(nonce []byte) *ShakeSizeParser { shake := sha3.NewShake128() shake.Write(nonce) @@ -31,6 +33,7 @@ func NewShakeSizeParser(nonce []byte) *ShakeSizeParser { } } +// SizeBytes implements ChunkSizeEncoder method. func (*ShakeSizeParser) SizeBytes() int32 { return 2 } @@ -40,12 +43,14 @@ func (s *ShakeSizeParser) next() uint16 { return binary.BigEndian.Uint16(s.buffer[:]) } +// Decode implements ChunkSizeDecoder method. func (s *ShakeSizeParser) Decode(b []byte) (uint16, error) { mask := s.next() size := binary.BigEndian.Uint16(b) return mask ^ size, nil } +// Encode implements ChunkSizeEncoder method. func (s *ShakeSizeParser) Encode(size uint16, b []byte) []byte { mask := s.next() binary.BigEndian.PutUint16(b, mask^size)