builder.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. E "github.com/sagernet/sing/common/exceptions"
  9. )
  10. func New(ctx context.Context, router adapter.Router, logger log.ContextLogger, options option.Inbound) (adapter.Inbound, error) {
  11. if options.Type == "" {
  12. return nil, E.New("missing inbound type")
  13. }
  14. switch options.Type {
  15. case C.TypeTun:
  16. return NewTun(ctx, router, logger, options.Tag, options.TunOptions)
  17. case C.TypeRedirect:
  18. return NewRedirect(ctx, router, logger, options.Tag, options.RedirectOptions), nil
  19. case C.TypeTProxy:
  20. return NewTProxy(ctx, router, logger, options.Tag, options.TProxyOptions), nil
  21. case C.TypeDirect:
  22. return NewDirect(ctx, router, logger, options.Tag, options.DirectOptions), nil
  23. case C.TypeSocks:
  24. return NewSocks(ctx, router, logger, options.Tag, options.SocksOptions), nil
  25. case C.TypeHTTP:
  26. return NewHTTP(ctx, router, logger, options.Tag, options.HTTPOptions)
  27. case C.TypeMixed:
  28. return NewMixed(ctx, router, logger, options.Tag, options.MixedOptions), nil
  29. case C.TypeShadowsocks:
  30. return NewShadowsocks(ctx, router, logger, options.Tag, options.ShadowsocksOptions)
  31. case C.TypeVMess:
  32. return NewVMess(ctx, router, logger, options.Tag, options.VMessOptions)
  33. case C.TypeTrojan:
  34. return NewTrojan(ctx, router, logger, options.Tag, options.TrojanOptions)
  35. case C.TypeNaive:
  36. return NewNaive(ctx, router, logger, options.Tag, options.NaiveOptions)
  37. case C.TypeHysteria:
  38. return NewHysteria(ctx, router, logger, options.Tag, options.HysteriaOptions)
  39. default:
  40. return nil, E.New("unknown inbound type: ", options.Type)
  41. }
  42. }