Changes to allow host "Set" to be standard, providers being able to use other query types, cache all responses, etc.
This commit is contained in:
@ -1,11 +1,13 @@
|
||||
package resolver
|
||||
|
||||
import "github.com/miekg/dns"
|
||||
|
||||
type Question struct {
|
||||
Name string
|
||||
Type string
|
||||
Type uint16
|
||||
Class string
|
||||
}
|
||||
|
||||
func (q *Question) String() string {
|
||||
return q.Name + " " + q.Class + " " + q.Type
|
||||
return q.Name + " " + q.Class + " " + dns.TypeToString[q.Type]
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"meow.tf/joker/godns/log"
|
||||
"meow.tf/joker/godns/settings"
|
||||
"meow.tf/joker/godns/utils"
|
||||
"net"
|
||||
"os"
|
||||
@ -37,13 +36,13 @@ type RResp struct {
|
||||
type Resolver struct {
|
||||
servers []string
|
||||
domain_server *suffixTreeNode
|
||||
config *settings.ResolvSettings
|
||||
config *Settings
|
||||
|
||||
clients map[string]*dns.Client
|
||||
clientLock sync.RWMutex
|
||||
}
|
||||
|
||||
func NewResolver(c settings.ResolvSettings) *Resolver {
|
||||
func NewResolver(c Settings) *Resolver {
|
||||
r := &Resolver{
|
||||
servers: []string{},
|
||||
domain_server: newSuffixTreeRoot(),
|
||||
@ -109,26 +108,26 @@ func (r *Resolver) parseServerListFile(buf *os.File) {
|
||||
|
||||
r.domain_server.sinsert(strings.Split(domain, "."), ip)
|
||||
case 1:
|
||||
srv_port := strings.Split(line, "#")
|
||||
srvPort := strings.Split(line, "#")
|
||||
|
||||
if len(srv_port) > 2 {
|
||||
if len(srvPort) > 2 {
|
||||
continue
|
||||
}
|
||||
|
||||
ip := ""
|
||||
|
||||
if ip = srv_port[0]; !utils.IsIP(ip) {
|
||||
if ip = srvPort[0]; !utils.IsIP(ip) {
|
||||
continue
|
||||
}
|
||||
|
||||
port := "53"
|
||||
|
||||
if len(srv_port) == 2 {
|
||||
if _, err := strconv.Atoi(srv_port[1]); err != nil {
|
||||
if len(srvPort) == 2 {
|
||||
if _, err := strconv.Atoi(srvPort[1]); err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
port = srv_port[1]
|
||||
port = srvPort[1]
|
||||
}
|
||||
|
||||
r.servers = append(r.servers, net.JoinHostPort(ip, port))
|
||||
@ -222,8 +221,14 @@ func (r *Resolver) Lookup(net string, req *dns.Msg) (message *dns.Msg, err error
|
||||
}
|
||||
|
||||
func (r *Resolver) resolverFor(net, nameserver string) (*dns.Client, error) {
|
||||
key := net
|
||||
|
||||
if net == "tcp-tls" {
|
||||
key = net + ":" + nameserver
|
||||
}
|
||||
|
||||
r.clientLock.RLock()
|
||||
client, exists := r.clients[net]
|
||||
client, exists := r.clients[key]
|
||||
r.clientLock.RUnlock()
|
||||
|
||||
if exists {
|
||||
@ -249,7 +254,7 @@ func (r *Resolver) resolverFor(net, nameserver string) (*dns.Client, error) {
|
||||
}
|
||||
|
||||
r.clientLock.Lock()
|
||||
r.clients[net] = client
|
||||
r.clients[key] = client
|
||||
r.clientLock.Lock()
|
||||
|
||||
return client, nil
|
||||
|
9
resolver/settings.go
Normal file
9
resolver/settings.go
Normal file
@ -0,0 +1,9 @@
|
||||
package resolver
|
||||
|
||||
type Settings struct {
|
||||
Timeout int `toml:"timeout" env:"RESOLV_TIMEOUT"`
|
||||
Interval int `toml:"interval" env:"RESOLV_INTERVAL"`
|
||||
SetEDNS0 bool `toml:"setedns0" env:"RESOLV_EDNS0"`
|
||||
ServerListFile []string `toml:"server-list-file" env:"SERVER_LIST_FILE"`
|
||||
ResolvFile string `toml:"resolv-file" env:"RESOLV_FILE"`
|
||||
}
|
Reference in New Issue
Block a user