package realm
|
|
|
|
import "github.com/miekg/dns"
|
|
|
|
type Server struct {
|
|
server *dns.Server
|
|
zone *Zone
|
|
}
|
|
|
|
func NewServer(listen string, zone *Zone) *Server {
|
|
var server *Server = &Server{zone: zone}
|
|
server.server = &dns.Server{
|
|
Addr: listen,
|
|
Net: "udp",
|
|
Handler: server,
|
|
}
|
|
return server
|
|
}
|
|
|
|
func (server *Server) ListenAndServe() error {
|
|
return server.server.ListenAndServe()
|
|
}
|
|
|
|
func (server *Server) ServeDNS(w dns.ResponseWriter, request *dns.Msg) {
|
|
var response *dns.Msg = &dns.Msg{}
|
|
response.SetReply(request)
|
|
response.Compress = true
|
|
|
|
for _, question := range request.Question {
|
|
var records []dns.RR = server.zone.Lookup(question.Name, question.Qtype, question.Qclass)
|
|
response.Answer = append(response.Answer, records...)
|
|
}
|
|
|
|
w.WriteMsg(response)
|
|
}
|