package file import ( "github.com/miekg/coredns/middleware" "github.com/miekg/coredns/middleware/file/tree" "github.com/miekg/dns" ) type Transfer struct { Out bool In bool } type Zone struct { SOA *dns.SOA SIG []dns.RR name string *tree.Tree Peers []string Transfer *Transfer } // NewZone returns a new zone. func NewZone(name string) *Zone { return &Zone{name: dns.Fqdn(name), Tree: &tree.Tree{}, Transfer: &Transfer{}} } // Insert inserts r into z. func (z *Zone) Insert(r dns.RR) { z.Tree.Insert(r) } // Delete deletes r from z. func (z *Zone) Delete(r dns.RR) { z.Tree.Delete(r) } // It the transfer request allowed. func (z *Zone) TransferAllowed(state middleware.State) bool { if z.Transfer == nil { return false } return z.Transfer.Out } // All returns all records from the zone, the first record will be the SOA record, // otionally followed by all RRSIG(SOA)s. func (z *Zone) All() []dns.RR { records := []dns.RR{} allNodes := z.Tree.All() for _, a := range allNodes { records = append(records, a.All()...) } if len(z.SIG) > 0 { records = append(z.SIG, records...) } return append([]dns.RR{z.SOA}, records...) } // Apex function?