sniffer.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package sniffer
  2. import (
  3. "strings"
  4. "github.com/v2fly/v2ray-core/v5/app/proxyman"
  5. "github.com/v2fly/v2ray-core/v5/infra/conf/cfgcommon"
  6. )
  7. //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
  8. type SniffingConfig struct {
  9. Enabled bool `json:"enabled"`
  10. DestOverride *cfgcommon.StringList `json:"destOverride"`
  11. MetadataOnly bool `json:"metadataOnly"`
  12. }
  13. // Build implements Buildable.
  14. func (c *SniffingConfig) Build() (*proxyman.SniffingConfig, error) {
  15. var p []string
  16. if c.DestOverride != nil {
  17. for _, domainOverride := range *c.DestOverride {
  18. switch strings.ToLower(domainOverride) {
  19. case "http":
  20. p = append(p, "http")
  21. case "tls", "https", "ssl":
  22. p = append(p, "tls")
  23. case "quic":
  24. p = append(p, "quic")
  25. case "fakedns":
  26. p = append(p, "fakedns")
  27. case "fakedns+others":
  28. p = append(p, "fakedns+others")
  29. default:
  30. return nil, newError("unknown protocol: ", domainOverride)
  31. }
  32. }
  33. }
  34. return &proxyman.SniffingConfig{
  35. Enabled: c.Enabled,
  36. DestinationOverride: p,
  37. MetadataOnly: c.MetadataOnly,
  38. }, nil
  39. }