use logger interface
This commit is contained in:
parent
5c0531b64d
commit
d86385b825
22
logger.go
Normal file
22
logger.go
Normal file
@ -0,0 +1,22 @@
|
||||
package socks5
|
||||
|
||||
import (
|
||||
"log"
|
||||
)
|
||||
|
||||
type Logger interface {
|
||||
Errorf(format string, arg ...interface{})
|
||||
}
|
||||
|
||||
// 标准输出
|
||||
type Std struct {
|
||||
*log.Logger
|
||||
}
|
||||
|
||||
func NewLogger(l *log.Logger) *Std {
|
||||
return &Std{l}
|
||||
}
|
||||
|
||||
func (sf Std) Errorf(format string, args ...interface{}) {
|
||||
sf.Logger.Printf("[E]: "+format, args...)
|
||||
}
|
@ -52,7 +52,7 @@ func TestRequest_Connect(t *testing.T) {
|
||||
s := &Server{config: &Config{
|
||||
Rules: PermitAll(),
|
||||
Resolver: DNSResolver{},
|
||||
Logger: log.New(os.Stdout, "", log.LstdFlags),
|
||||
Logger: NewLogger(log.New(os.Stdout, "socks5: ", log.LstdFlags)),
|
||||
}}
|
||||
|
||||
// Create the connect request
|
||||
@ -127,7 +127,7 @@ func TestRequest_Connect_RuleFail(t *testing.T) {
|
||||
s := &Server{config: &Config{
|
||||
Rules: PermitNone(),
|
||||
Resolver: DNSResolver{},
|
||||
Logger: log.New(os.Stdout, "", log.LstdFlags),
|
||||
Logger: NewLogger(log.New(os.Stdout, "socks5: ", log.LstdFlags)),
|
||||
}}
|
||||
|
||||
// Create the connect request
|
||||
|
17
socks5.go
17
socks5.go
@ -4,9 +4,9 @@ import (
|
||||
"bufio"
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -42,8 +42,8 @@ type Config struct {
|
||||
BindIP net.IP
|
||||
|
||||
// Logger can be used to provide a custom log target.
|
||||
// Defaults to stdout.
|
||||
Logger *log.Logger
|
||||
// Defaults to ioutil.Discard.
|
||||
Logger Logger
|
||||
|
||||
// Optional function for dialing out
|
||||
Dial func(ctx context.Context, network, addr string) (net.Conn, error)
|
||||
@ -79,7 +79,7 @@ func New(conf *Config) (*Server, error) {
|
||||
|
||||
// Ensure we have a log target
|
||||
if conf.Logger == nil {
|
||||
conf.Logger = log.New(os.Stdout, "", log.LstdFlags)
|
||||
conf.Logger = NewLogger(log.New(ioutil.Discard, "socks5: ", log.LstdFlags))
|
||||
}
|
||||
|
||||
server := &Server{
|
||||
@ -113,7 +113,6 @@ func (s *Server) Serve(l net.Listener) error {
|
||||
}
|
||||
go s.ServeConn(conn)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ServeConn is used to serve a single connection.
|
||||
@ -124,14 +123,14 @@ func (s *Server) ServeConn(conn net.Conn) error {
|
||||
// Read the version byte
|
||||
version := []byte{0}
|
||||
if _, err := bufConn.Read(version); err != nil {
|
||||
s.config.Logger.Printf("[ERR] socks: Failed to get version byte: %v", err)
|
||||
s.config.Logger.Errorf("[ERR] socks: Failed to get version byte: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Ensure we are compatible
|
||||
if version[0] != socks5Version {
|
||||
err := fmt.Errorf("Unsupported SOCKS version: %v", version)
|
||||
s.config.Logger.Printf("[ERR] socks: %v", err)
|
||||
s.config.Logger.Errorf("[ERR] socks: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -139,7 +138,7 @@ func (s *Server) ServeConn(conn net.Conn) error {
|
||||
authContext, err := s.authenticate(conn, bufConn)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("Failed to authenticate: %v", err)
|
||||
s.config.Logger.Printf("[ERR] socks: %v", err)
|
||||
s.config.Logger.Errorf("[ERR] socks: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -160,7 +159,7 @@ func (s *Server) ServeConn(conn net.Conn) error {
|
||||
// Process the client request
|
||||
if err := s.handleRequest(request, conn); err != nil {
|
||||
err = fmt.Errorf("Failed to handle request: %v", err)
|
||||
s.config.Logger.Printf("[ERR] socks: %v", err)
|
||||
s.config.Logger.Errorf("[ERR] socks: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ func TestSOCKS5_Connect(t *testing.T) {
|
||||
cator := UserPassAuthenticator{Credentials: creds}
|
||||
conf := &Config{
|
||||
AuthMethods: []Authenticator{cator},
|
||||
Logger: log.New(os.Stdout, "", log.LstdFlags),
|
||||
Logger: NewLogger(log.New(os.Stdout, "socks5: ", log.LstdFlags)),
|
||||
}
|
||||
serv, err := New(conf)
|
||||
if err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user