feat(netxlite): support extracting the CNAME (#875)
* feat(netxlite): support extracting the CNAME Closes https://github.com/ooni/probe/issues/2225 * fix(netxlite): attempt to increase coverage and improve tests 1. dnsovergetaddrinfo: specify the behavior of a DNSResponse returned by this file to make it line with normal responses and write unit tests to make sure we adhere to expectations; 2. dnsoverudp: make sure we wait to deferred responses also w/o a custom context and post on a private channel and test that; 3. utls: recognize that we can actually write a test for NetConn and what needs to change when we'll use go1.19 by default will just be a cast that at that point can be removed.
This commit is contained in:
parent
da1c13e312
commit
cc24f28b9d
10 changed files with 390 additions and 39 deletions
|
|
@ -166,5 +166,19 @@ func (r *dnsResponse) DecodeNS() ([]*net.NS, error) {
|
|||
return out, nil
|
||||
}
|
||||
|
||||
// DecodeCNAME implements model.DNSResponse.DecodeCNAME.
|
||||
func (r *dnsResponse) DecodeCNAME() (string, error) {
|
||||
if err := r.rcodeToError(); err != nil {
|
||||
return "", err
|
||||
}
|
||||
for _, answer := range r.msg.Answer {
|
||||
switch avalue := answer.(type) {
|
||||
case *dns.CNAME:
|
||||
return avalue.Target, nil
|
||||
}
|
||||
}
|
||||
return "", ErrOODNSNoAnswer
|
||||
}
|
||||
|
||||
var _ model.DNSDecoder = &DNSDecoderMiekg{}
|
||||
var _ model.DNSResponse = &dnsResponse{}
|
||||
|
|
|
|||
Loading…
Reference in a new issue