summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorradhitya <alif@radhitya.org>2026-06-18 18:17:19 +0700
committerradhitya <alif@radhitya.org>2026-06-18 18:17:19 +0700
commit359f6a1cba3f2e281cefa727db34e3497dc15a2c (patch)
treeefaeeef69c903127b28c51f962de1714bd121ecd /main.go
parentf5753c6a8cac5a57a042b0388f38abeff5d1f37d (diff)
add custom forwarders
Diffstat (limited to 'main.go')
-rw-r--r--main.go35
1 files changed, 22 insertions, 13 deletions
diff --git a/main.go b/main.go
index 70b5c0e..ecba31d 100644
--- a/main.go
+++ b/main.go
@@ -45,10 +45,19 @@ func main() {
logger.Info("config loaded", "file", flags.Config)
- r := resolver.New(
- resolver.WithTimeout(2 * time.Second),
- )
-
+ var ropts []resolver.Option
+ if cfg.Resolver.Mode == "forward" && len(cfg.Resolver.Forwarders) > 0 {
+ ropts = append(ropts, resolver.WithForwarders(cfg.Resolver.Forwarders))
+ logger.Info("resolver mode: forward", "upstreams", cfg.Resolver.Forwarders)
+ } else {
+ logger.Info("resolver mode: recursive (root hints)")
+ }
+ if dur, err := time.ParseDuration(cfg.Resolver.Timeout); err == nil {
+ ropts = append(ropts, resolver.WithTimeout(dur))
+ } else {
+ ropts = append(ropts, resolver.WithTimeout(2*time.Second))
+ }
+ r := resolver.New(ropts...)
c, err := cache.NewCache(cfg.Cache.MaxEntries, cfg.Cache.DBPath)
if err != nil {
logger.Error("create cache failed", "err", err)
@@ -100,14 +109,14 @@ func main() {
defer srv.Close()
logger.Info("linum starting",
- "udp", cfg.Server.ListenUDP,
- "tcp", cfg.Server.ListenTCP,
- "doh", cfg.Server.ListenDOH,
- )
+ "udp", cfg.Server.ListenUDP,
+ "tcp", cfg.Server.ListenTCP,
+ "doh", cfg.Server.ListenDOH,
+)
- if err := srv.Run(ctx); err != nil && err != context.Canceled {
- logger.Error("server stopped with error", "err", err)
- os.Exit(1)
- }
- logger.Info("linum stopped cleanly")
+if err := srv.Run(ctx); err != nil && err != context.Canceled {
+ logger.Error("server stopped with error", "err", err)
+ os.Exit(1)
+}
+logger.Info("linum stopped cleanly")
}