socks.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package inbound
  2. import (
  3. "context"
  4. "net"
  5. "os"
  6. "github.com/sagernet/sing-box/adapter"
  7. C "github.com/sagernet/sing-box/constant"
  8. "github.com/sagernet/sing-box/log"
  9. "github.com/sagernet/sing-box/option"
  10. "github.com/sagernet/sing/common/auth"
  11. N "github.com/sagernet/sing/common/network"
  12. "github.com/sagernet/sing/protocol/socks"
  13. )
  14. var (
  15. _ adapter.Inbound = (*Socks)(nil)
  16. _ adapter.InjectableInbound = (*Socks)(nil)
  17. )
  18. type Socks struct {
  19. myInboundAdapter
  20. authenticator auth.Authenticator
  21. }
  22. func NewSocks(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.SocksInboundOptions) *Socks {
  23. inbound := &Socks{
  24. myInboundAdapter{
  25. protocol: C.TypeSocks,
  26. network: []string{N.NetworkTCP},
  27. ctx: ctx,
  28. router: router,
  29. logger: logger,
  30. tag: tag,
  31. listenOptions: options.ListenOptions,
  32. },
  33. auth.NewAuthenticator(options.Users),
  34. }
  35. inbound.connHandler = inbound
  36. return inbound
  37. }
  38. func (h *Socks) NewConnection(ctx context.Context, conn net.Conn, metadata adapter.InboundContext) error {
  39. return socks.HandleConnection(ctx, conn, h.authenticator, h.upstreamUserHandler(metadata), adapter.UpstreamMetadata(metadata))
  40. }
  41. func (h *Socks) NewPacketConnection(ctx context.Context, conn N.PacketConn, metadata adapter.InboundContext) error {
  42. return os.ErrInvalid
  43. }