1package main
2
3import (
4 "log"
5 "log/slog"
6 "os"
7 "flag"
8
9 "code.kiri.systems/kiri/alky/pkg/config"
10 "code.kiri.systems/kiri/alky/pkg/dns"
11 "code.kiri.systems/kiri/alky/pkg/rootservers"
12)
13
14var configFlag string
15
16func init() {
17 flag.StringVar(&configFlag, "config", "/etc/alky/alky.toml", "config file path for alky")
18
19 flag.Parse()
20}
21
22func main() {
23 cfg, err := config.LoadConfig(configFlag)
24 if err != nil {
25 log.Fatal(err)
26 }
27
28 rootServers, err := rootservers.DecodeRootHints(cfg.Server.RootHintsFile)
29 if err != nil {
30 log.Fatal(err)
31 }
32
33 var logger *slog.Logger
34 switch cfg.Logging.Output {
35 case "file":
36 f, err := os.OpenFile(cfg.Logging.FilePath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0o644)
37 if err != nil {
38 log.Fatal(err)
39 }
40
41 logger = slog.New(slog.NewJSONHandler(f, nil))
42 case "stdout":
43 fallthrough
44 default:
45 logger = slog.New(slog.NewJSONHandler(os.Stdout, nil))
46 }
47
48 s := dns.Server{
49 Address: cfg.Server.Address,
50 Port: cfg.Server.Port,
51 Timeout: cfg.Advanced.QueryTimeout,
52 RootServers: rootServers,
53
54 Logger: logger,
55 }
56
57 go s.TCPListenAndServe()
58 go s.UDPListenAndServe()
59
60 for {
61 }
62}