blocky/resolver/filtering_resolver.go

37 lines
917 B
Go

package resolver
import (
"context"
"github.com/0xERR0R/blocky/config"
"github.com/0xERR0R/blocky/model"
"github.com/miekg/dns"
)
// FilteringResolver filters DNS queries (for example can drop all AAAA query)
// returns empty ANSWER with NOERROR
type FilteringResolver struct {
configurable[*config.Filtering]
NextResolver
typed
}
func NewFilteringResolver(cfg config.Filtering) *FilteringResolver {
return &FilteringResolver{
configurable: withConfig(&cfg),
typed: withType("filtering"),
}
}
func (r *FilteringResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error) {
qType := request.Req.Question[0].Qtype
if r.cfg.QueryTypes.Contains(dns.Type(qType)) {
response := new(dns.Msg)
response.SetRcode(request.Req, dns.RcodeSuccess)
return &model.Response{Res: response, RType: model.ResponseTypeFILTERED}, nil
}
return r.next.Resolve(ctx, request)
}