Files
routedns/blocklistdb-multi.go
Frank Olbricht 654fd43c83 Return PTR records for hosts file blocklists (#115)
* Return PTR records for hosts file blocklists

* Undo testing changes in example file
2020-12-29 18:19:26 -07:00

45 lines
868 B
Go

package rdns
import (
"net"
"github.com/miekg/dns"
)
// MultiDB wraps multiple blocklist DBs and performs queries over all of them.
type MultiDB struct {
dbs []BlocklistDB
}
var _ BlocklistDB = MultiDB{}
// NewMultiDB returns a new instance of a wrapper for blocklists
func NewMultiDB(dbs ...BlocklistDB) (MultiDB, error) {
return MultiDB{dbs}, nil
}
func (m MultiDB) Reload() (BlocklistDB, error) {
var newDBs []BlocklistDB
for _, db := range m.dbs {
n, err := db.Reload()
if err != nil {
return nil, err
}
newDBs = append(newDBs, n)
}
return NewMultiDB(newDBs...)
}
func (m MultiDB) Match(q dns.Question) (net.IP, string, string, bool) {
for _, db := range m.dbs {
if ip, name, rule, ok := db.Match(q); ok {
return ip, name, rule, ok
}
}
return nil, "", "", false
}
func (m MultiDB) String() string {
return "Multi-Blocklist"
}