source.go 802 B

12345678910111213141516171819202122232425262728293031
  1. package script
  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/option"
  7. E "github.com/sagernet/sing/common/exceptions"
  8. "github.com/sagernet/sing/common/logger"
  9. "github.com/dop251/goja"
  10. )
  11. type Source interface {
  12. StartContext(ctx context.Context, startContext *adapter.HTTPStartContext) error
  13. PostStart() error
  14. Program() *goja.Program
  15. Close() error
  16. }
  17. func NewSource(ctx context.Context, logger logger.Logger, options option.Script) (Source, error) {
  18. switch options.Source {
  19. case C.ScriptSourceTypeLocal:
  20. return NewLocalSource(ctx, logger, options)
  21. case C.ScriptSourceTypeRemote:
  22. return NewRemoteSource(ctx, logger, options)
  23. default:
  24. return nil, E.New("unknown source type: ", options.Source)
  25. }
  26. }