source.go 826 B

123456789101112131415161718192021222324252627282930313233
  1. //go:build with_script
  2. package script
  3. import (
  4. "context"
  5. "github.com/sagernet/sing-box/adapter"
  6. C "github.com/sagernet/sing-box/constant"
  7. "github.com/sagernet/sing-box/option"
  8. E "github.com/sagernet/sing/common/exceptions"
  9. "github.com/sagernet/sing/common/logger"
  10. "github.com/dop251/goja"
  11. )
  12. type Source interface {
  13. StartContext(ctx context.Context, startContext *adapter.HTTPStartContext) error
  14. PostStart() error
  15. Program() *goja.Program
  16. Close() error
  17. }
  18. func NewSource(ctx context.Context, logger logger.Logger, options option.Script) (Source, error) {
  19. switch options.Source {
  20. case C.ScriptSourceTypeLocal:
  21. return NewLocalSource(ctx, logger, options)
  22. case C.ScriptSourceTypeRemote:
  23. return NewRemoteSource(ctx, logger, options)
  24. default:
  25. return nil, E.New("unknown source type: ", options.Source)
  26. }
  27. }