Use new Request struct for the Server api
parent
ae345732fa
commit
eb24bec29f
19
socks5.go
19
socks5.go
|
@ -132,14 +132,29 @@ func (s *Server) ServeConn(conn net.Conn) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Authenticate the connection
|
// Authenticate the connection
|
||||||
if err := s.authenticate(conn, bufConn); err != nil {
|
authContext, err := s.authenticate(conn, bufConn)
|
||||||
|
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.Printf("[ERR] socks: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
request, err := NewRequest(bufConn)
|
||||||
|
if err != nil {
|
||||||
|
if err == unrecognizedAddrType {
|
||||||
|
if err := sendReply(conn, addrTypeNotSupported, nil); err != nil {
|
||||||
|
return fmt.Errorf("Failed to send reply: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fmt.Errorf("Failed to read destination address: %v", err)
|
||||||
|
}
|
||||||
|
request.AuthContext = authContext
|
||||||
|
if client, ok := conn.RemoteAddr().(*net.TCPAddr); ok {
|
||||||
|
request.RemoteAddr = &AddrSpec{IP: client.IP, Port: client.Port}
|
||||||
|
}
|
||||||
|
|
||||||
// Process the client request
|
// Process the client request
|
||||||
if err := s.handleRequest(conn, bufConn); 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.Printf("[ERR] socks: %v", err)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -67,7 +67,7 @@ func TestSOCKS5_Connect(t *testing.T) {
|
||||||
// Connect, auth and connec to local
|
// Connect, auth and connec to local
|
||||||
req := bytes.NewBuffer(nil)
|
req := bytes.NewBuffer(nil)
|
||||||
req.Write([]byte{5})
|
req.Write([]byte{5})
|
||||||
req.Write([]byte{2, noAuth, userPassAuth})
|
req.Write([]byte{2, NoAuth, UserPassAuth})
|
||||||
req.Write([]byte{1, 3, 'f', 'o', 'o', 3, 'b', 'a', 'r'})
|
req.Write([]byte{1, 3, 'f', 'o', 'o', 3, 'b', 'a', 'r'})
|
||||||
req.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1})
|
req.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1})
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ func TestSOCKS5_Connect(t *testing.T) {
|
||||||
|
|
||||||
// Verify response
|
// Verify response
|
||||||
expected := []byte{
|
expected := []byte{
|
||||||
socks5Version, userPassAuth,
|
socks5Version, UserPassAuth,
|
||||||
1, authSuccess,
|
1, authSuccess,
|
||||||
5,
|
5,
|
||||||
0,
|
0,
|
||||||
|
|
Loading…
Reference in New Issue