summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go32
1 files changed, 31 insertions, 1 deletions
diff --git a/main.go b/main.go
index 2ddc86f..96c51cb 100644
--- a/main.go
+++ b/main.go
@@ -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)