diff --git a/infra/conf/cfgcommon/sniffer/sniffer.go b/infra/conf/cfgcommon/sniffer/sniffer.go new file mode 100644 index 000000000..9cf246c1b --- /dev/null +++ b/infra/conf/cfgcommon/sniffer/sniffer.go @@ -0,0 +1,42 @@ +package sniffer + +import ( + "github.com/v2fly/v2ray-core/v4/app/proxyman" + "github.com/v2fly/v2ray-core/v4/infra/conf/cfgcommon" + "strings" +) + +//go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen + +type SniffingConfig struct { + Enabled bool `json:"enabled"` + DestOverride *cfgcommon.StringList `json:"destOverride"` + MetadataOnly bool `json:"metadataOnly"` +} + +// Build implements Buildable. +func (c *SniffingConfig) Build() (*proxyman.SniffingConfig, error) { + var p []string + if c.DestOverride != nil { + for _, domainOverride := range *c.DestOverride { + switch strings.ToLower(domainOverride) { + case "http": + p = append(p, "http") + case "tls", "https", "ssl": + p = append(p, "tls") + case "fakedns": + p = append(p, "fakedns") + case "fakedns+others": + p = append(p, "fakedns+others") + default: + return nil, newError("unknown protocol: ", domainOverride) + } + } + } + + return &proxyman.SniffingConfig{ + Enabled: c.Enabled, + DestinationOverride: p, + MetadataOnly: c.MetadataOnly, + }, nil +} diff --git a/infra/conf/v4/v2ray.go b/infra/conf/v4/v2ray.go index 4ccd7c19a..306de1525 100644 --- a/infra/conf/v4/v2ray.go +++ b/infra/conf/v4/v2ray.go @@ -3,6 +3,7 @@ package v4 import ( "encoding/json" "github.com/v2fly/v2ray-core/v4/infra/conf/cfgcommon/loader" + "github.com/v2fly/v2ray-core/v4/infra/conf/cfgcommon/sniffer" "github.com/v2fly/v2ray-core/v4/infra/conf/synthetic/dns" "github.com/v2fly/v2ray-core/v4/infra/conf/synthetic/log" "github.com/v2fly/v2ray-core/v4/infra/conf/synthetic/router" @@ -57,39 +58,6 @@ func toProtocolList(s []string) ([]proxyman.KnownProtocols, error) { return kp, nil } -type SniffingConfig struct { - Enabled bool `json:"enabled"` - DestOverride *cfgcommon.StringList `json:"destOverride"` - MetadataOnly bool `json:"metadataOnly"` -} - -// Build implements Buildable. -func (c *SniffingConfig) Build() (*proxyman.SniffingConfig, error) { - var p []string - if c.DestOverride != nil { - for _, domainOverride := range *c.DestOverride { - switch strings.ToLower(domainOverride) { - case "http": - p = append(p, "http") - case "tls", "https", "ssl": - p = append(p, "tls") - case "fakedns": - p = append(p, "fakedns") - case "fakedns+others": - p = append(p, "fakedns+others") - default: - return nil, newError("unknown protocol: ", domainOverride) - } - } - } - - return &proxyman.SniffingConfig{ - Enabled: c.Enabled, - DestinationOverride: p, - MetadataOnly: c.MetadataOnly, - }, nil -} - type MuxConfig struct { Enabled bool `json:"enabled"` Concurrency int16 `json:"concurrency"` @@ -155,7 +123,7 @@ type InboundDetourConfig struct { Allocation *InboundDetourAllocationConfig `json:"allocate"` StreamSetting *StreamConfig `json:"streamSettings"` DomainOverride *cfgcommon.StringList `json:"domainOverride"` - SniffingConfig *SniffingConfig `json:"sniffing"` + SniffingConfig *sniffer.SniffingConfig `json:"sniffing"` } // Build implements Buildable.