Something went wrong. Try again.
Cloudflare Tunnel client with NetBSD support
Something went wrong. Try again.
1.4 kB · 57 lines
Go
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758package socks
import ( "bufio" "fmt" "io")
// ConnectionHandler is the Serve method to handle connections// from a local TCP listener of the standard library (net.Listener)type ConnectionHandler interface { Serve(io.ReadWriter) error}
// StandardConnectionHandler is the base implementation of handling SOCKS5 requeststype StandardConnectionHandler struct { requestHandler RequestHandler authHandler AuthHandler}
// NewConnectionHandler creates a standard SOCKS5 connection handler// This process connections from a generic TCP listener from the standard libraryfunc NewConnectionHandler(requestHandler RequestHandler) ConnectionHandler { return &StandardConnectionHandler{ requestHandler: requestHandler, authHandler: NewAuthHandler(), }}
// Serve process new connection created after calling `Accept()` in the standard libraryfunc (h *StandardConnectionHandler) Serve(c io.ReadWriter) error { bufConn := bufio.NewReader(c)
// read the version byte version := []byte{0} if _, err := bufConn.Read(version); err != nil { return err }
// ensure compatibility if version[0] != socks5Version { return fmt.Errorf("Unsupported SOCKS version: %v", version) }
// handle auth if err := h.authHandler.Handle(bufConn, c); err != nil { return err }
// process command/request req, err := NewRequest(bufConn) if err != nil { return err }
return h.requestHandler.Handle(req, c)}