builder.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  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. F "github.com/sagernet/sing/common/format"
  10. )
  11. func New(router adapter.Router, logger log.Logger, index int, options option.Outbound) (adapter.Outbound, error) {
  12. if common.IsEmpty(options) {
  13. return nil, E.New("empty outbound config")
  14. }
  15. var tag string
  16. if options.Tag != "" {
  17. tag = options.Tag
  18. } else {
  19. tag = F.ToString(index)
  20. }
  21. outboundLogger := logger.WithPrefix(F.ToString("outbound/", options.Type, "[", tag, "]: "))
  22. switch options.Type {
  23. case C.TypeDirect:
  24. return NewDirect(router, outboundLogger, options.Tag, options.DirectOptions), nil
  25. case C.TypeSocks:
  26. return NewSocks(router, outboundLogger, options.Tag, options.SocksOptions)
  27. case C.TypeShadowsocks:
  28. return NewShadowsocks(router, outboundLogger, options.Tag, options.ShadowsocksOptions)
  29. default:
  30. return nil, E.New("unknown outbound type: ", options.Type)
  31. }
  32. }