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