diff --git a/component/sniffer/dispatcher.go b/component/sniffer/dispatcher.go index 5ca44f06a..88e710d75 100644 --- a/component/sniffer/dispatcher.go +++ b/component/sniffer/dispatcher.go @@ -2,6 +2,7 @@ package sniffer import ( "errors" + "github.com/Dreamacro/clash/constant/sniffer" "net" "net/netip" "strconv" @@ -28,7 +29,7 @@ type ( SnifferDispatcher struct { enable bool - sniffers []C.Sniffer + sniffers []sniffer.Sniffer foreDomain *trie.DomainTrie[bool] skipSNI *trie.DomainTrie[bool] @@ -136,7 +137,7 @@ func NewCloseSnifferDispatcher() (*SnifferDispatcher, error) { return &dispatcher, nil } -func NewSnifferDispatcher(needSniffer []C.SnifferType, forceDomain *trie.DomainTrie[bool], +func NewSnifferDispatcher(needSniffer []sniffer.Type, forceDomain *trie.DomainTrie[bool], skipSNI *trie.DomainTrie[bool], ports *[]utils.Range[uint16]) (*SnifferDispatcher, error) { dispatcher := SnifferDispatcher{ enable: true, @@ -158,9 +159,9 @@ func NewSnifferDispatcher(needSniffer []C.SnifferType, forceDomain *trie.DomainT return &dispatcher, nil } -func NewSniffer(name C.SnifferType) (C.Sniffer, error) { +func NewSniffer(name sniffer.Type) (sniffer.Sniffer, error) { switch name { - case C.TLS: + case sniffer.TLS: return &TLSSniffer{}, nil default: return nil, ErrorUnsupportedSniffer diff --git a/config/config.go b/config/config.go index 4a9ce1960..cca2bfb2e 100644 --- a/config/config.go +++ b/config/config.go @@ -4,6 +4,7 @@ import ( "container/list" "errors" "fmt" + "github.com/Dreamacro/clash/constant/sniffer" "github.com/Dreamacro/clash/listener/tun/ipstack/commons" "net" "net/netip" @@ -30,6 +31,7 @@ import ( "github.com/Dreamacro/clash/component/trie" C "github.com/Dreamacro/clash/constant" providerTypes "github.com/Dreamacro/clash/constant/provider" + snifferTypes "github.com/Dreamacro/clash/constant/sniffer" "github.com/Dreamacro/clash/dns" "github.com/Dreamacro/clash/log" T "github.com/Dreamacro/clash/tunnel" @@ -128,7 +130,7 @@ type IPTables struct { type Sniffer struct { Enable bool Force bool - Sniffers []C.SnifferType + Sniffers []sniffer.Type Reverses *trie.DomainTrie[bool] ForceDomain *trie.DomainTrie[bool] SkipSNI *trie.DomainTrie[bool] @@ -954,11 +956,11 @@ func parseSniffer(snifferRaw SnifferRaw) (*Sniffer, error) { sniffer.Ports = &ports - loadSniffer := make(map[C.SnifferType]struct{}) + loadSniffer := make(map[snifferTypes.Type]struct{}) for _, snifferName := range snifferRaw.Sniffing { find := false - for _, snifferType := range C.SnifferList { + for _, snifferType := range snifferTypes.List { if snifferType.String() == strings.ToUpper(snifferName) { find = true loadSniffer[snifferType] = struct{}{} diff --git a/constant/sniffer.go b/constant/sniffer/sniffer.go similarity index 52% rename from constant/sniffer.go rename to constant/sniffer/sniffer.go index 0592b87a4..8ab2d4965 100644 --- a/constant/sniffer.go +++ b/constant/sniffer/sniffer.go @@ -1,23 +1,25 @@ -package constant +package sniffer + +import "github.com/Dreamacro/clash/constant" type Sniffer interface { - SupportNetwork() NetWork + SupportNetwork() constant.NetWork SniffTCP(bytes []byte) (string, error) Protocol() string } const ( - TLS SnifferType = iota - HTTP SnifferType + TLS Type = iota + HTTP ) var ( - SnifferList = []SnifferType{TLS, HTTP} + List = []Type{TLS, HTTP} ) -type SnifferType int +type Type int -func (rt SnifferType) String() string { +func (rt Type) String() string { switch rt { case TLS: return "TLS"