Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
f147fb47bb | |||
b6dfdcd5ef |
@ -172,6 +172,8 @@ func (m measurement) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) probeUpstreamLatency() {
|
func (s *Server) probeUpstreamLatency() {
|
||||||
|
if !s.once {
|
||||||
|
s.once = true
|
||||||
upstreams := s.upstreams()
|
upstreams := s.upstreams()
|
||||||
results := make([]measurement, len(upstreams))
|
results := make([]measurement, len(upstreams))
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
@ -199,13 +201,14 @@ func (s *Server) probeUpstreamLatency() {
|
|||||||
sort.Slice(results, func(i, j int) bool {
|
sort.Slice(results, func(i, j int) bool {
|
||||||
return results[i].rtt < results[j].rtt
|
return results[i].rtt < results[j].rtt
|
||||||
})
|
})
|
||||||
log.Printf("probe results: %v", results)
|
log.Printf("probe results: %v %v", s.once, results)
|
||||||
for idx, result := range results {
|
for idx, result := range results {
|
||||||
upstreams[idx] = result.upstream
|
upstreams[idx] = result.upstream
|
||||||
}
|
}
|
||||||
s.upstreamMu.Lock()
|
s.upstreamMu.Lock()
|
||||||
defer s.upstreamMu.Unlock()
|
defer s.upstreamMu.Unlock()
|
||||||
s.upstream = upstreams
|
s.upstream = upstreams
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) hostByName(n lcHostname) (string, bool) {
|
func (s *Server) hostByName(n lcHostname) (string, bool) {
|
||||||
@ -477,7 +480,6 @@ func (s *Server) handleInternal(w dns.ResponseWriter, r *dns.Msg) {
|
|||||||
if err == errEmpty {
|
if err == errEmpty {
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(r)
|
m.SetReply(r)
|
||||||
m.RecursionAvailable = true
|
|
||||||
w.WriteMsg(m)
|
w.WriteMsg(m)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -486,7 +488,6 @@ func (s *Server) handleInternal(w dns.ResponseWriter, r *dns.Msg) {
|
|||||||
if rr != nil {
|
if rr != nil {
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(r)
|
m.SetReply(r)
|
||||||
m.RecursionAvailable = true
|
|
||||||
m.Answer = append(m.Answer, rr)
|
m.Answer = append(m.Answer, rr)
|
||||||
w.WriteMsg(m)
|
w.WriteMsg(m)
|
||||||
return
|
return
|
||||||
@ -494,7 +495,6 @@ func (s *Server) handleInternal(w dns.ResponseWriter, r *dns.Msg) {
|
|||||||
// Send an authoritative NXDOMAIN for local:
|
// Send an authoritative NXDOMAIN for local:
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(r)
|
m.SetReply(r)
|
||||||
m.RecursionAvailable = true
|
|
||||||
m.SetRcode(r, dns.RcodeNameError)
|
m.SetRcode(r, dns.RcodeNameError)
|
||||||
w.WriteMsg(m)
|
w.WriteMsg(m)
|
||||||
}
|
}
|
||||||
@ -550,7 +550,6 @@ func (s *Server) resolveSubname(domain string, q dns.Question) (dns.RR, error) {
|
|||||||
name := strings.TrimSuffix(q.Name, ".")
|
name := strings.TrimSuffix(q.Name, ".")
|
||||||
name = strings.TrimSuffix(name, "."+string(s.domain)) // trim server domain
|
name = strings.TrimSuffix(name, "."+string(s.domain)) // trim server domain
|
||||||
name = strings.TrimSuffix(name, "."+strings.TrimSuffix(domain, "."+string(s.domain))) // trim function domain
|
name = strings.TrimSuffix(name, "."+strings.TrimSuffix(domain, "."+string(s.domain))) // trim function domain
|
||||||
name = strings.TrimSuffix(name, ".lan") // trim function domain
|
|
||||||
if ip, ok := s.subname(domain, name); ok {
|
if ip, ok := s.subname(domain, name); ok {
|
||||||
if q.Qtype == dns.TypeA && ip.IPv4.To4() != nil {
|
if q.Qtype == dns.TypeA && ip.IPv4.To4() != nil {
|
||||||
return dns.NewRR(q.Name + " 3600 IN A " + ip.IPv4.String())
|
return dns.NewRR(q.Name + " 3600 IN A " + ip.IPv4.String())
|
||||||
@ -583,7 +582,6 @@ func (s *Server) subnameHandler(hostname lcHostname) func(w dns.ResponseWriter,
|
|||||||
if err == errEmpty {
|
if err == errEmpty {
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(r)
|
m.SetReply(r)
|
||||||
m.RecursionAvailable = true
|
|
||||||
w.WriteMsg(m)
|
w.WriteMsg(m)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -593,7 +591,6 @@ func (s *Server) subnameHandler(hostname lcHostname) func(w dns.ResponseWriter,
|
|||||||
s.promInc("local", r)
|
s.promInc("local", r)
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(r)
|
m.SetReply(r)
|
||||||
m.RecursionAvailable = true
|
|
||||||
m.Answer = append(m.Answer, rr)
|
m.Answer = append(m.Answer, rr)
|
||||||
w.WriteMsg(m)
|
w.WriteMsg(m)
|
||||||
return
|
return
|
||||||
@ -604,7 +601,6 @@ func (s *Server) subnameHandler(hostname lcHostname) func(w dns.ResponseWriter,
|
|||||||
s.promInc("local", r)
|
s.promInc("local", r)
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(r)
|
m.SetReply(r)
|
||||||
m.RecursionAvailable = true
|
|
||||||
m.SetRcode(r, dns.RcodeNameError)
|
m.SetRcode(r, dns.RcodeNameError)
|
||||||
w.WriteMsg(m)
|
w.WriteMsg(m)
|
||||||
return
|
return
|
||||||
|
Reference in New Issue
Block a user