diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/blocklist/blocklist.go | 14 | ||||
| -rw-r--r-- | internal/server/handler.go | 8 |
2 files changed, 9 insertions, 13 deletions
diff --git a/internal/blocklist/blocklist.go b/internal/blocklist/blocklist.go index 364c492..f6e0592 100644 --- a/internal/blocklist/blocklist.go +++ b/internal/blocklist/blocklist.go @@ -94,16 +94,16 @@ func (b *Blocklist) parseRule(line string, blocked, exceptions *trie) bool { return false } func (b *Blocklist) load(scanner *bufio.Scanner) error { - blocked := newTrie() - exceptions := newTrie() - var n int32 + b.mu.Lock() + defer b.mu.Unlock() + var n int32 for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if line == "" || line[0] == '#' || line[0] == '!' { continue } - if b.parseRule(line, blocked, exceptions) { + if b.parseRule(line, b.blocked, b.exceptions) { n++ } } @@ -111,11 +111,7 @@ func (b *Blocklist) load(scanner *bufio.Scanner) error { return err } - b.mu.Lock() - b.blocked = blocked - b.exceptions = exceptions - b.mu.Unlock() - atomic.StoreInt32(&b.TotalRules, n) + b.TotalRules += n return nil } func (b *Blocklist) LoadURL(url string) error { diff --git a/internal/server/handler.go b/internal/server/handler.go index e996270..5f873d4 100644 --- a/internal/server/handler.go +++ b/internal/server/handler.go @@ -43,6 +43,10 @@ func (s *Server) buildResponse(req *dns.Msg) (*dns.Msg, bool) { } q := req.Question[0] + if s.blocklist != nil && s.blocklist.IsBlocked(q.Name) { + return s.blockedResponse(req), true + } + if s.cache != nil { key := cache.Key{Name: q.Name, Qtype: q.Qtype, Class: q.Qclass} if cached, ok := s.cache.Get(key); ok { @@ -51,10 +55,6 @@ func (s *Server) buildResponse(req *dns.Msg) (*dns.Msg, bool) { } } - if s.blocklist != nil && s.blocklist.IsBlocked(q.Name) { - return s.blockedResponse(req), true - } - ctx, cancel := context.WithTimeout(s.baseCtx, 10*time.Second) defer cancel() |
