builder.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. package inbound
  2. import (
  3. "context"
  4. "github.com/sagernet/sing-box/adapter"
  5. C "github.com/sagernet/sing-box/constant"
  6. "github.com/sagernet/sing-box/log"
  7. "github.com/sagernet/sing-box/option"
  8. "github.com/sagernet/sing/common"
  9. E "github.com/sagernet/sing/common/exceptions"
  10. )
  11. func New(ctx context.Context, router adapter.Router, logger log.ContextLogger, options option.Inbound) (adapter.Inbound, error) {
  12. if common.IsEmptyByEquals(options) {
  13. return nil, E.New("empty inbound config")
  14. }
  15. switch options.Type {
  16. case C.TypeDirect:
  17. return NewDirect(ctx, router, logger, options.Tag, options.DirectOptions), nil
  18. case C.TypeSocks:
  19. return NewSocks(ctx, router, logger, options.Tag, options.SocksOptions), nil
  20. case C.TypeHTTP:
  21. return NewHTTP(ctx, router, logger, options.Tag, options.HTTPOptions), nil
  22. case C.TypeMixed:
  23. return NewMixed(ctx, router, logger, options.Tag, options.MixedOptions), nil
  24. case C.TypeShadowsocks:
  25. return NewShadowsocks(ctx, router, logger, options.Tag, options.ShadowsocksOptions)
  26. case C.TypeTun:
  27. return NewTun(ctx, router, logger, options.Tag, options.TunOptions)
  28. default:
  29. return nil, E.New("unknown inbound type: ", options.Type)
  30. }
  31. }