diff options
Diffstat (limited to 'dns/proxy.go')
-rw-r--r-- | dns/proxy.go | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/dns/proxy.go b/dns/proxy.go index 90164ab..9e7607e 100644 --- a/dns/proxy.go +++ b/dns/proxy.go @@ -2,6 +2,7 @@ package dns import ( "fmt" + "log" "net" "strings" "sync" @@ -32,27 +33,27 @@ type Handler func(*Request) *Reply // Proxy represents a DNS proxy. type Proxy struct { - Handler Handler - cache *cache.Cache - logger logger - server *dns.Server - client *dnsutil.Client - mu sync.RWMutex + Handler Handler + cache *cache.Cache + logger *log.Logger + dnsLogger logger + server *dns.Server + client *dnsutil.Client + mu sync.RWMutex } type logger interface { - Print(...interface{}) - Printf(string, ...interface{}) Record(net.IP, bool, uint16, string, ...string) Close() error } // NewProxy creates a new DNS proxy. -func NewProxy(cache *cache.Cache, client *dnsutil.Client, logger logger) (*Proxy, error) { +func NewProxy(cache *cache.Cache, client *dnsutil.Client, logger *log.Logger, dnsLogger logger) (*Proxy, error) { return &Proxy{ - logger: logger, - cache: cache, - client: client, + logger: logger, + dnsLogger: dnsLogger, + cache: cache, + client: client, }, nil } @@ -129,7 +130,9 @@ func (p *Proxy) writeMsg(w dns.ResponseWriter, msg *dns.Msg, hijacked bool) { default: panic(fmt.Sprintf("unexpected remote address type %T", v)) } - p.logger.Record(ip, hijacked, msg.Question[0].Qtype, msg.Question[0].Name, dnsutil.Answers(msg)...) + if p.dnsLogger != nil { + p.dnsLogger.Record(ip, hijacked, msg.Question[0].Qtype, msg.Question[0].Name, dnsutil.Answers(msg)...) + } w.WriteMsg(msg) } |