diff options
| author | radhitya <alif@radhitya.org> | 2026-06-14 14:36:32 +0700 |
|---|---|---|
| committer | radhitya <alif@radhitya.org> | 2026-06-14 14:36:32 +0700 |
| commit | 4e6a897a0b55ee533c05f89fa38dbe0704f2798d (patch) | |
| tree | 12d9700e53775503ad7ba2beb72bedfc64bdd70d /main.go | |
| parent | 3e44adc94f32bfe500730fcbf1c02cedf65b0a30 (diff) | |
dns recursive resolver(iterative, root hints, delegfation, glue, fallback), adblocker, dns cache
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 32 |
1 files changed, 31 insertions, 1 deletions
@@ -5,8 +5,11 @@ import ( "log/slog" "os" "os/signal" + "path/filepath" "syscall" + "sdns/internal/blocklist" + "sdns/internal/cache" "sdns/internal/resolver" "sdns/internal/server" ) @@ -19,6 +22,33 @@ func main() { r := resolver.New() + dbPath := os.Getenv("SDNS_CACHE_DB") + if dbPath != "" { + logger.Info("cache using sqlite", "path", dbPath) + } else { + logger.Info("cache using in-memory") + } + c, err := cache.NewCache(100000, dbPath) + if err != nil { + logger.Error("create cache failed", "err", err) + os.Exit(1) + } + defer c.Stop() + + var bl *blocklist.Blocklist + matches, _ := filepath.Glob("etc/blocklist/*.txt") + if len(matches) > 0 { + bl = blocklist.New(blocklist.ResponseZeroIP) + for _, f := range matches { + if err := bl.LoadFile(f); err != nil { + logger.Error("load blocklist failed", "file", f, "err", err) + os.Exit(1) + } + logger.Info("blocklist loaded", "file", f, "rules", bl.TotalRules) + } + } else { + logger.Info("no blocklist files in etc/blocklist/, ad-blocking disabled") + } udp := os.Getenv("SDNS_LISTEN_UDP") if udp == "" { udp = ":5353" @@ -37,7 +67,7 @@ func main() { ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() - srv, err := server.New(udp, tcp, doh, logger, r) + srv, err := server.New(udp, tcp, doh, logger, r, c, bl) if err != nil { logger.Error("create server failed", "err", err) os.Exit(1) |
