rule_item_adguard.go 895 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package rule
  2. import (
  3. "strings"
  4. "github.com/sagernet/sing-box/adapter"
  5. "github.com/sagernet/sing/common/domain"
  6. )
  7. var _ RuleItem = (*AdGuardDomainItem)(nil)
  8. type AdGuardDomainItem struct {
  9. matcher *domain.AdGuardMatcher
  10. }
  11. func NewAdGuardDomainItem(ruleLines []string) *AdGuardDomainItem {
  12. return &AdGuardDomainItem{
  13. domain.NewAdGuardMatcher(ruleLines),
  14. }
  15. }
  16. func NewRawAdGuardDomainItem(matcher *domain.AdGuardMatcher) *AdGuardDomainItem {
  17. return &AdGuardDomainItem{
  18. matcher,
  19. }
  20. }
  21. func (r *AdGuardDomainItem) Match(metadata *adapter.InboundContext) bool {
  22. var domainHost string
  23. if metadata.Domain != "" {
  24. domainHost = metadata.Domain
  25. } else {
  26. domainHost = metadata.Destination.Fqdn
  27. }
  28. if domainHost == "" {
  29. return false
  30. }
  31. return r.matcher.Match(strings.ToLower(domainHost))
  32. }
  33. func (r *AdGuardDomainItem) String() string {
  34. return "!adguard_domain_rules=<binary>"
  35. }