1package resolver
2
3import (
4	"github.com/0xERR0R/blocky/model"
5	"github.com/miekg/dns"
6)
7
8// IPv6DisablingResolver can drop all AAAA query (empty ANSWER with NOERROR)
9type IPv6DisablingResolver struct {
10	NextResolver
11	disableAAAA bool
12}
13
14func (r *IPv6DisablingResolver) Resolve(request *model.Request) (*model.Response, error) {
15	if r.disableAAAA && request.Req.Question[0].Qtype == dns.TypeAAAA {
16		response := new(dns.Msg)
17		response.SetRcode(request.Req, dns.RcodeSuccess)
18
19		return &model.Response{Res: response, RType: model.ResponseTypeRESOLVED}, nil
20	}
21
22	return r.next.Resolve(request)
23}
24
25func (r *IPv6DisablingResolver) Configuration() (result []string) {
26	if r.disableAAAA {
27		result = append(result, "drop AAAA")
28	} else {
29		result = append(result, "accept AAAA")
30	}
31
32	return
33}
34
35func NewIPv6Checker(disable bool) ChainedResolver {
36	return &IPv6DisablingResolver{disableAAAA: disable}
37}
38