builder.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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/experimental/libbox/platform"
  7. "github.com/sagernet/sing-box/log"
  8. "github.com/sagernet/sing-box/option"
  9. E "github.com/sagernet/sing/common/exceptions"
  10. )
  11. func New(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.Inbound, platformInterface platform.Interface) (adapter.Inbound, error) {
  12. if options.Type == "" {
  13. return nil, E.New("missing inbound type")
  14. }
  15. switch options.Type {
  16. case C.TypeTun:
  17. return NewTun(ctx, router, logger, tag, options.TunOptions, platformInterface)
  18. case C.TypeRedirect:
  19. return NewRedirect(ctx, router, logger, tag, options.RedirectOptions), nil
  20. case C.TypeTProxy:
  21. return NewTProxy(ctx, router, logger, tag, options.TProxyOptions), nil
  22. case C.TypeDirect:
  23. return NewDirect(ctx, router, logger, tag, options.DirectOptions), nil
  24. case C.TypeSOCKS:
  25. return NewSocks(ctx, router, logger, tag, options.SocksOptions), nil
  26. case C.TypeHTTP:
  27. return NewHTTP(ctx, router, logger, tag, options.HTTPOptions)
  28. case C.TypeMixed:
  29. return NewMixed(ctx, router, logger, tag, options.MixedOptions), nil
  30. case C.TypeShadowsocks:
  31. return NewShadowsocks(ctx, router, logger, tag, options.ShadowsocksOptions)
  32. case C.TypeVMess:
  33. return NewVMess(ctx, router, logger, tag, options.VMessOptions)
  34. case C.TypeTrojan:
  35. return NewTrojan(ctx, router, logger, tag, options.TrojanOptions)
  36. case C.TypeNaive:
  37. return NewNaive(ctx, router, logger, tag, options.NaiveOptions)
  38. case C.TypeHysteria:
  39. return NewHysteria(ctx, router, logger, tag, options.HysteriaOptions)
  40. case C.TypeShadowTLS:
  41. return NewShadowTLS(ctx, router, logger, tag, options.ShadowTLSOptions)
  42. case C.TypeVLESS:
  43. return NewVLESS(ctx, router, logger, tag, options.VLESSOptions)
  44. case C.TypeTUIC:
  45. return NewTUIC(ctx, router, logger, tag, options.TUICOptions)
  46. case C.TypeHysteria2:
  47. return NewHysteria2(ctx, router, logger, tag, options.Hysteria2Options)
  48. default:
  49. return nil, E.New("unknown inbound type: ", options.Type)
  50. }
  51. }