forked from coredns/coredns
-
Notifications
You must be signed in to change notification settings - Fork 0
/
truncated.go
29 lines (25 loc) · 902 Bytes
/
truncated.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package forward
import (
"github.com/coredns/coredns/request"
"github.com/miekg/dns"
)
// truncated looks at the error and if truncated return a nil errror
// and a possible reconstructed dns message if that was nil.
func truncated(state request.Request, ret *dns.Msg, err error) (*dns.Msg, error) {
// If you query for instance ANY isc.org; you get a truncated query back which miekg/dns fails to unpack
// because the RRs are not finished. The returned message can be useful or useless. Return the original
// query with some header bits set that they should retry with TCP.
if err != dns.ErrTruncated {
return ret, err
}
// We may or may not have something sensible... if not reassemble something to send to the client.
m := ret
if ret == nil {
m = new(dns.Msg)
m.SetReply(state.Req)
m.Truncated = true
m.Authoritative = true
m.Rcode = dns.RcodeSuccess
}
return m, nil
}