rule_set.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package provider
  2. import (
  3. C "github.com/metacubex/mihomo/constant"
  4. P "github.com/metacubex/mihomo/constant/provider"
  5. "github.com/metacubex/mihomo/rules/common"
  6. )
  7. type RuleSet struct {
  8. *common.Base
  9. ruleProviderName string
  10. adapter string
  11. noResolveIP bool
  12. shouldFindProcess bool
  13. }
  14. func (rs *RuleSet) ShouldFindProcess() bool {
  15. if rs.shouldFindProcess {
  16. return true
  17. }
  18. if provider, ok := rs.getProvider(); ok {
  19. return provider.ShouldFindProcess()
  20. }
  21. return false
  22. }
  23. func (rs *RuleSet) RuleType() C.RuleType {
  24. return C.RuleSet
  25. }
  26. func (rs *RuleSet) Match(metadata *C.Metadata) (bool, string) {
  27. if provider, ok := rs.getProvider(); ok {
  28. return provider.Match(metadata), rs.adapter
  29. }
  30. return false, ""
  31. }
  32. func (rs *RuleSet) Adapter() string {
  33. return rs.adapter
  34. }
  35. func (rs *RuleSet) Payload() string {
  36. if provider, ok := rs.getProvider(); ok {
  37. return provider.Name()
  38. }
  39. return ""
  40. }
  41. func (rs *RuleSet) ShouldResolveIP() bool {
  42. if rs.noResolveIP {
  43. return false
  44. }
  45. if provider, ok := rs.getProvider(); ok {
  46. return provider.ShouldResolveIP()
  47. }
  48. return false
  49. }
  50. func (rs *RuleSet) ProviderNames() []string {
  51. return []string{rs.ruleProviderName}
  52. }
  53. func (rs *RuleSet) getProvider() (P.RuleProvider, bool) {
  54. pp, ok := tunnel.RuleProviders()[rs.ruleProviderName]
  55. return pp, ok
  56. }
  57. func NewRuleSet(ruleProviderName string, adapter string, noResolveIP bool) (*RuleSet, error) {
  58. rs := &RuleSet{
  59. Base: &common.Base{},
  60. ruleProviderName: ruleProviderName,
  61. adapter: adapter,
  62. noResolveIP: noResolveIP,
  63. }
  64. return rs, nil
  65. }