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  }