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