summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/server.go30
1 files changed, 21 insertions, 9 deletions
diff --git a/internal/server/server.go b/internal/server/server.go
index 5e580e6..fdb4364 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -13,15 +13,17 @@ import (
)
type Config struct {
- Addr string
- Upstream string
+ Mode string
+ Addr string
+ Upstream string
BlockFile string
+ HintsFile string
}
type Server struct {
- cfg Config
- resolver *resolver.Forwarder
- cache *cache.Cache
+ cfg Config
+ resolver resolver.Resolver
+ cache *cache.Cache
blocklist *blocklist.Blocklist
}
@@ -30,10 +32,20 @@ func New(cfg Config) (*Server, error) {
if err != nil {
return nil, fmt.Errorf("blocklist: %w", err)
}
+ var res resolver.Resolver
+ if cfg.Mode == "recursive" {
+ rec, err := resolver.NewRecursive(cfg.HintsFile)
+ if err != nil {
+ return nil, fmt.Errorf("recursive: %w", err)
+ }
+ res = rec
+ } else {
+ res = resolver.NewForwarder(cfg.Upstream)
+ }
return &Server{
- cfg: cfg,
- resolver: resolver.NewForwarder(cfg.Upstream),
- cache: cache.New(),
+ cfg: cfg,
+ resolver: res,
+ cache: cache.New(),
blocklist: bl,
}, nil
}
@@ -49,7 +61,7 @@ func (s *Server) ListenAndServe() error {
return fmt.Errorf("listen: %w", err)
}
defer conn.Close()
- log.Printf("linum listening on %s, upstream %s", s.cfg.Addr, s.cfg.Upstream)
+ log.Printf("linum listening on %s, mode=%s, upstream %s", s.cfg.Addr, s.cfg.Mode, s.cfg.Upstream)
buf := make([]byte, 4096)
for {