builder.go 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. package outbound
  2. import (
  3. "github.com/sagernet/sing-box/adapter"
  4. C "github.com/sagernet/sing-box/constant"
  5. "github.com/sagernet/sing-box/log"
  6. "github.com/sagernet/sing-box/option"
  7. "github.com/sagernet/sing/common"
  8. E "github.com/sagernet/sing/common/exceptions"
  9. )
  10. func New(router adapter.Router, logger log.ContextLogger, options option.Outbound) (adapter.Outbound, error) {
  11. if common.IsEmpty(options) {
  12. return nil, E.New("empty outbound config")
  13. }
  14. switch options.Type {
  15. case C.TypeDirect:
  16. return NewDirect(router, logger, options.Tag, options.DirectOptions), nil
  17. case C.TypeBlock:
  18. return NewBlock(logger, options.Tag), nil
  19. case C.TypeSocks:
  20. return NewSocks(router, logger, options.Tag, options.SocksOptions)
  21. case C.TypeHTTP:
  22. return NewHTTP(router, logger, options.Tag, options.HTTPOptions), nil
  23. case C.TypeShadowsocks:
  24. return NewShadowsocks(router, logger, options.Tag, options.ShadowsocksOptions)
  25. case C.TypeVMess:
  26. return NewVMess(router, logger, options.Tag, options.VMessOptions)
  27. default:
  28. return nil, E.New("unknown outbound type: ", options.Type)
  29. }
  30. }