Skip to content

Commit 54910a7

Browse files
committed
add go mod support
1 parent 5baaf42 commit 54910a7

File tree

9 files changed

+92
-43
lines changed

9 files changed

+92
-43
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
gosocks5
22
========
33

4-
golang and SOCKSV5
4+
golang and SOCKSv5

client/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"net"
55
"time"
66

7-
"github.com/ginuerzh/gosocks5"
7+
"github.com/go-gost/gosocks5"
88
)
99

1010
// Dial connects to the SOCKS5 server.

client/selector.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"net"
55
"net/url"
66

7-
"github.com/ginuerzh/gosocks5"
7+
"github.com/go-gost/gosocks5"
88
)
99

1010
var (

examples/client.go examples/client/main.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,17 @@ import (
44
"flag"
55
"log"
66

7-
"github.com/ginuerzh/gosocks5"
7+
"github.com/go-gost/gosocks5"
88

9-
"github.com/ginuerzh/gosocks5/client"
9+
"github.com/go-gost/gosocks5/client"
1010
)
1111

1212
var (
1313
server string
1414
)
1515

1616
func init() {
17+
log.SetFlags(log.Lshortfile | log.LstdFlags)
1718
flag.StringVar(&server, "p", "", "SOCKS5 server address")
1819
flag.Parse()
1920
}

examples/server.go examples/server/main.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,20 @@ import (
55
"log"
66
"net"
77

8-
"github.com/ginuerzh/gosocks5/server"
8+
"github.com/go-gost/gosocks5/server"
99
)
1010

1111
var (
1212
laddr string
1313
)
1414

1515
func init() {
16+
log.SetFlags(log.Lshortfile | log.LstdFlags)
1617
flag.StringVar(&laddr, "l", ":1080", "SOCKS5 server address")
1718
flag.Parse()
1819
}
1920

2021
func main() {
21-
log.SetFlags(log.Lshortfile | log.LstdFlags)
22-
2322
ln, err := net.Listen("tcp", laddr)
2423
if err != nil {
2524
log.Fatal(err)

go.mod

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/go-gost/gosocks5
2+
3+
go 1.16

server/handler.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"strconv"
88
"sync"
99

10-
"github.com/ginuerzh/gosocks5"
10+
"github.com/go-gost/gosocks5"
1111
)
1212

1313
var (

server/selector.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"net"
55
"net/url"
66

7-
"github.com/ginuerzh/gosocks5"
7+
"github.com/go-gost/gosocks5"
88
)
99

1010
var (

socks5.go

+79-33
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ const (
3131

3232
const (
3333
CmdConnect uint8 = 1
34-
CmdBind = 2
35-
CmdUdp = 3
34+
CmdBind uint8 = 2
35+
CmdUdp uint8 = 3
3636
)
3737

3838
const (
3939
AddrIPv4 uint8 = 1
40-
AddrDomain = 3
41-
AddrIPv6 = 4
40+
AddrDomain uint8 = 3
41+
AddrIPv6 uint8 = 4
4242
)
4343

4444
const (
@@ -54,26 +54,33 @@ const (
5454
)
5555

5656
var (
57-
ErrBadVersion = errors.New("Bad version")
58-
ErrBadFormat = errors.New("Bad format")
59-
ErrBadAddrType = errors.New("Bad address type")
60-
ErrShortBuffer = errors.New("Short buffer")
61-
ErrBadMethod = errors.New("Bad method")
62-
ErrAuthFailure = errors.New("Auth failure")
57+
ErrBadVersion = errors.New("bad version")
58+
ErrBadFormat = errors.New("bad format")
59+
ErrBadAddrType = errors.New("bad address type")
60+
ErrShortBuffer = errors.New("short buffer")
61+
ErrBadMethod = errors.New("bad method")
62+
ErrAuthFailure = errors.New("auth failure")
63+
)
64+
65+
var (
66+
SmallPoolSize = 1024
67+
LargePoolSize = 16 * 1024
6368
)
6469

6570
// buffer pools
6671
var (
72+
// small buff pool
6773
sPool = sync.Pool{
6874
New: func() interface{} {
69-
return make([]byte, 576)
75+
return make([]byte, SmallPoolSize)
7076
},
71-
} // small buff pool
77+
}
78+
// large buff pool for udp
7279
lPool = sync.Pool{
7380
New: func() interface{} {
74-
return make([]byte, 64*1024+262)
81+
return make([]byte, LargePoolSize)
7582
},
76-
} // large buff pool for udp
83+
}
7784
)
7885

7986
/*
@@ -300,28 +307,67 @@ func NewAddr(sa string) (addr *Addr, err error) {
300307
return
301308
}
302309

303-
func (addr *Addr) Decode(b []byte) error {
310+
func (addr *Addr) ReadFrom(r io.Reader) (n int64, err error) {
311+
b := sPool.Get().([]byte)
312+
defer sPool.Put(b)
313+
314+
_, err = io.ReadFull(r, b[:1])
315+
if err != nil {
316+
return
317+
}
304318
addr.Type = b[0]
305-
pos := 1
319+
n++
320+
306321
switch addr.Type {
307322
case AddrIPv4:
308-
addr.Host = net.IP(b[pos : pos+net.IPv4len]).String()
309-
pos += net.IPv4len
323+
_, err = io.ReadFull(r, b[:net.IPv4len])
324+
addr.Host = net.IP(b[:net.IPv4len]).String()
325+
n += net.IPv4len
310326
case AddrIPv6:
311-
addr.Host = net.IP(b[pos : pos+net.IPv6len]).String()
312-
pos += net.IPv6len
327+
_, err = io.ReadFull(r, b[:net.IPv6len])
328+
addr.Host = net.IP(b[:net.IPv6len]).String()
329+
n += net.IPv6len
313330
case AddrDomain:
314-
addrlen := int(b[pos])
315-
pos++
316-
addr.Host = string(b[pos : pos+addrlen])
317-
pos += addrlen
331+
if _, err = io.ReadFull(r, b[:1]); err != nil {
332+
return
333+
}
334+
addrlen := int(b[0])
335+
n++
336+
337+
_, err = io.ReadFull(r, b[:addrlen])
338+
addr.Host = string(b[:addrlen])
339+
n += int64(addrlen)
318340
default:
319-
return ErrBadAddrType
341+
err = ErrBadAddrType
342+
return
343+
}
344+
if err != nil {
345+
return
320346
}
321347

322-
addr.Port = binary.BigEndian.Uint16(b[pos:])
348+
_, err = io.ReadFull(r, b[:2])
349+
addr.Port = binary.BigEndian.Uint16(b[:2])
350+
n += 2
323351

324-
return nil
352+
return
353+
}
354+
355+
func (addr *Addr) WriteTo(w io.Writer) (int64, error) {
356+
b := sPool.Get().([]byte)
357+
defer sPool.Put(b)
358+
359+
nn, err := addr.Encode(b)
360+
if err != nil {
361+
return int64(nn), err
362+
}
363+
364+
nn, err = w.Write(b)
365+
return int64(nn), err
366+
}
367+
368+
func (addr *Addr) Decode(b []byte) error {
369+
_, err := addr.ReadFrom(bytes.NewReader(b))
370+
return err
325371
}
326372

327373
func (addr *Addr) Encode(b []byte) (int, error) {
@@ -334,20 +380,20 @@ func (addr *Addr) Encode(b []byte) (int, error) {
334380
ip4 = net.IPv4zero.To4()
335381
}
336382
pos += copy(b[pos:], ip4)
337-
case AddrDomain:
338-
b[pos] = byte(len(addr.Host))
339-
pos++
340-
pos += copy(b[pos:], []byte(addr.Host))
341383
case AddrIPv6:
342384
ip16 := net.ParseIP(addr.Host).To16()
343385
if ip16 == nil {
344386
ip16 = net.IPv6zero.To16()
345387
}
346388
pos += copy(b[pos:], ip16)
389+
case AddrDomain:
390+
b[pos] = byte(len(addr.Host))
391+
pos++
392+
pos += copy(b[pos:], []byte(addr.Host))
347393
default:
348394
b[0] = AddrIPv4
349-
copy(b[pos:pos+4], net.IPv4zero.To4())
350-
pos += 4
395+
copy(b[pos:pos+net.IPv4len], net.IPv4zero.To4())
396+
pos += net.IPv4len
351397
}
352398
binary.BigEndian.PutUint16(b[pos:], addr.Port)
353399
pos += 2

0 commit comments

Comments
 (0)