sniffer.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package sniffer
  2. import (
  3. "strings"
  4. "github.com/v2fly/v2ray-core/v4/app/proxyman"
  5. "github.com/v2fly/v2ray-core/v4/infra/conf/cfgcommon"
  6. )
  7. //go:generate go run github.com/v2fly/v2ray-core/v4/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 "fakedns":
  24. p = append(p, "fakedns")
  25. case "fakedns+others":
  26. p = append(p, "fakedns+others")
  27. default:
  28. return nil, newError("unknown protocol: ", domainOverride)
  29. }
  30. }
  31. }
  32. return &proxyman.SniffingConfig{
  33. Enabled: c.Enabled,
  34. DestinationOverride: p,
  35. MetadataOnly: c.MetadataOnly,
  36. }, nil
  37. }