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