* QueryLog.Add() now receives net.IP, not net.Addr

This commit is contained in:
Simon Zolin 2019-11-19 14:09:10 +03:00
parent 2f5d6593f2
commit 0cd6781a9a
3 changed files with 15 additions and 16 deletions

View File

@ -462,7 +462,7 @@ func (s *Server) handleDNSRequest(p *proxy.Proxy, d *proxy.DNSContext) error {
if d.Upstream != nil { if d.Upstream != nil {
upstreamAddr = d.Upstream.Address() upstreamAddr = d.Upstream.Address()
} }
s.queryLog.Add(msg, d.Res, res, elapsed, d.Addr, upstreamAddr) s.queryLog.Add(msg, d.Res, res, elapsed, getIP(d.Addr), upstreamAddr)
} }
s.updateStats(d, elapsed, *res) s.updateStats(d, elapsed, *res)
@ -471,6 +471,17 @@ func (s *Server) handleDNSRequest(p *proxy.Proxy, d *proxy.DNSContext) error {
return nil return nil
} }
// Get IP address from net.Addr
func getIP(addr net.Addr) net.IP {
switch addr := addr.(type) {
case *net.UDPAddr:
return addr.IP
case *net.TCPAddr:
return addr.IP
}
return nil
}
func (s *Server) updateStats(d *proxy.DNSContext, elapsed time.Duration, res dnsfilter.Result) { func (s *Server) updateStats(d *proxy.DNSContext, elapsed time.Duration, res dnsfilter.Result) {
if s.stats == nil { if s.stats == nil {
return return

View File

@ -107,18 +107,7 @@ type logEntry struct {
Upstream string `json:",omitempty"` // if empty, means it was cached Upstream string `json:",omitempty"` // if empty, means it was cached
} }
// getIPString is a helper function that extracts IP address from net.Addr func (l *queryLog) Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Result, elapsed time.Duration, ip net.IP, upstream string) {
func getIPString(addr net.Addr) string {
switch addr := addr.(type) {
case *net.UDPAddr:
return addr.IP.String()
case *net.TCPAddr:
return addr.IP.String()
}
return ""
}
func (l *queryLog) Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Result, elapsed time.Duration, addr net.Addr, upstream string) {
if !l.conf.Enabled { if !l.conf.Enabled {
return return
} }
@ -130,7 +119,6 @@ func (l *queryLog) Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Res
var a []byte var a []byte
var err error var err error
ip := getIPString(addr)
if answer != nil { if answer != nil {
a, err = answer.Pack() a, err = answer.Pack()
@ -146,7 +134,7 @@ func (l *queryLog) Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Res
now := time.Now() now := time.Now()
entry := logEntry{ entry := logEntry{
IP: ip, IP: ip.String(),
Time: now, Time: now,
Answer: a, Answer: a,

View File

@ -21,7 +21,7 @@ type QueryLog interface {
Close() Close()
// Add a log entry // Add a log entry
Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Result, elapsed time.Duration, addr net.Addr, upstream string) Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Result, elapsed time.Duration, ip net.IP, upstream string)
// WriteDiskConfig - write configuration // WriteDiskConfig - write configuration
WriteDiskConfig(dc *DiskConfig) WriteDiskConfig(dc *DiskConfig)