mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-01-08 16:38:21 +08:00
29 lines
740 B
Go
29 lines
740 B
Go
|
package dnsresolver
|
||
|
|
||
|
// dnsCache implements a very simple DNS cache.
|
||
|
// It caches the entire answer (i.e. all TXT records), filtering
|
||
|
// out the non-SPF answers is done at a higher layer.
|
||
|
// At this time the only rtype is "TXT". Eventually we'll need
|
||
|
// to cache A/AAAA/CNAME records to to CNAME flattening.
|
||
|
type dnsCache map[string]map[string][]string // map[fqdn]map[rtype] -> answers
|
||
|
|
||
|
func (c dnsCache) get(label, rtype string) ([]string, bool) {
|
||
|
v1, ok := c[label]
|
||
|
if !ok {
|
||
|
return nil, false
|
||
|
}
|
||
|
v2, ok := v1[rtype]
|
||
|
if !ok {
|
||
|
return nil, false
|
||
|
}
|
||
|
return v2, true
|
||
|
}
|
||
|
|
||
|
func (c dnsCache) put(label, rtype string, answers []string) {
|
||
|
_, ok := c[label]
|
||
|
if !ok {
|
||
|
c[label] = make(map[string][]string)
|
||
|
}
|
||
|
c[label][rtype] = answers
|
||
|
}
|