aboutsummaryrefslogtreecommitdiffstats
path: root/server.go
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-06-02 23:06:10 +0200
committerMartin Polden <mpolden@mpolden.no>2019-06-02 23:06:44 +0200
commit8a7facaf6a121f63036384e5c41808806f2eb709 (patch)
tree91672b4e0dcff087a28d8f1393a7c2ed908a28f7 /server.go
parent9c1fa42933e3d591f69c7ae344dd909c5033f3d7 (diff)
Refactor config
Diffstat (limited to 'server.go')
-rw-r--r--server.go25
1 files changed, 17 insertions, 8 deletions
diff --git a/server.go b/server.go
index 73044b0..a27c67f 100644
--- a/server.go
+++ b/server.go
@@ -17,6 +17,15 @@ import (
"github.com/mpolden/zdns/hosts"
)
+const (
+ // HijackZero returns the zero IP address to matching requests.
+ HijackZero = iota
+ // HijackEmpty returns an empty answer to matching requests.
+ HijackEmpty
+ // HijackHosts returns the value of the hoss entry to matching request.
+ HijackHosts
+)
+
// A Server defines parameters for running a DNS server.
type Server struct {
Config Config
@@ -36,13 +45,13 @@ func NewServer(config Config) (*Server, error) {
signal: make(chan os.Signal, 1),
done: make(chan bool, 1),
}
- if config.Filter.RefreshInterval.Duration > 0 {
- server.ticker = time.NewTicker(config.Filter.RefreshInterval.Duration)
+ if config.Filter.refreshInterval > 0 {
+ server.ticker = time.NewTicker(config.Filter.refreshInterval)
go server.reloadHosts()
}
signal.Notify(server.signal)
go server.readSignal()
- proxy := dns.NewProxy(server.handler, config.Resolvers, config.Resolver.Timeout.Duration)
+ proxy := dns.NewProxy(server.hijack, config.Resolvers, config.Resolver.timeout)
server.proxy = proxy
return server, nil
}
@@ -166,23 +175,23 @@ func (s *Server) Close() {
}
}
-func (s *Server) handler(r *dns.Request) *dns.Reply {
+func (s *Server) hijack(r *dns.Request) *dns.Reply {
s.mu.RLock()
defer s.mu.RUnlock()
if !s.matcher.Match(nonFqdn(r.Name)) {
return nil // No match
}
- switch s.Config.Filter.RejectMode {
- case "zero":
+ switch s.Config.Filter.hijackMode {
+ case HijackZero:
switch r.Type {
case dns.TypeA:
return dns.ReplyA(r.Name, net.IPv4zero)
case dns.TypeAAAA:
return dns.ReplyAAAA(r.Name, net.IPv6zero)
}
- case "no-data":
+ case HijackEmpty:
return &dns.Reply{}
- case "hosts":
+ case HijackHosts:
// TODO: Provide answer from hosts
}
return nil