1
0
mirror of https://github.com/taigrr/godns synced 2025-01-18 04:03:25 -08:00

add cmd directory

This commit is contained in:
Timothy 2017-10-27 11:37:31 +08:00
parent 4e1084fada
commit 2fd1736ac6
2 changed files with 71 additions and 1 deletions

2
.gitignore vendored
View File

@ -25,7 +25,7 @@ config.json
*.log
*.swp
*.gz
godns
cmd/godns/godns
vendor/*
/.idea

70
cmd/godns/godns.go Normal file
View File

@ -0,0 +1,70 @@
package main
import (
"flag"
"fmt"
"log"
"os"
"github.com/TimothyYe/godns"
"github.com/TimothyYe/godns/handler"
)
const ()
var (
configuration godns.Settings
optConf = flag.String("c", "./config.json", "Specify a config file")
optHelp = flag.Bool("h", false, "Show help")
)
func main() {
flag.Parse()
if *optHelp {
flag.Usage()
return
}
// Load settings from configurations file
if err := godns.LoadSettings(*optConf, &configuration); err != nil {
fmt.Println(err.Error())
log.Println(err.Error())
os.Exit(1)
}
if err := godns.CheckSettings(&configuration); err != nil {
log.Println("Settings is invalid! ", err.Error())
os.Exit(1)
}
if err := godns.InitLogger(configuration.LogPath, configuration.LogSize, configuration.LogNum); err != nil {
log.Println("InitLogger error:", err.Error())
os.Exit(1)
}
dnsLoop()
}
func dnsLoop() {
panicChan := make(chan godns.Domain)
handler := handler.CreateHandler(configuration.Provider)
handler.SetConfiguration(&configuration)
for _, domain := range configuration.Domains {
go handler.DomainLoop(&domain, panicChan)
}
panicCount := 0
for {
select {
case failDomain := <-panicChan:
log.Println("Got panic in goroutine, will start a new one... :", panicCount)
go handler.DomainLoop(&failDomain, panicChan)
}
panicCount++
if panicCount >= godns.PanicMax {
os.Exit(1)
}
}
}