-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathsocks5_server.go
More file actions
49 lines (42 loc) · 1.11 KB
/
Copy pathsocks5_server.go
File metadata and controls
49 lines (42 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package gohpts
import (
"context"
"fmt"
"net"
"strings"
"time"
"github.com/wzshiming/socks5"
)
var _ socksServer = &socks5.Server{}
type socksServer interface {
ServeConn(conn net.Conn)
}
type sockLogger struct {
nocolor bool
json bool
}
func (l sockLogger) Println(a ...any) {
if l.json {
fmt.Printf("{\"level\":\"error\",\"time\":\"%s\",\"message\":\"%s\"}\n",
time.Now().Format(time.RFC3339), strings.TrimRight(fmt.Sprint(a...), "\n"))
} else {
ts := colorizeTimestamp(time.Now(), l.nocolor)
msg := colorizeErrMessage(fmt.Sprint(a...), l.nocolor)
if strings.Contains(msg, "broken pipe") || strings.Contains(msg, "connection reset") {
return
}
fmt.Printf("%s %s %s\n", ts, colorizeErr(l.nocolor), msg)
}
}
func newSOCKS5Server(
dial func(ctx context.Context, network string, address string) (net.Conn, error),
packetDial func(ctx context.Context, network string, address string) (net.PacketConn, error),
logger sockLogger,
) *socks5.Server {
return &socks5.Server{
ProxyDial: dial,
ProxyListenPacket: packetDial,
BytesPool: bytesPool,
Logger: logger,
}
}