mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			861 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			861 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package dnstap
 | |
| 
 | |
| import (
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/coredns/coredns/plugin/dnstap/msg"
 | |
| 
 | |
| 	tap "github.com/dnstap/golang-dnstap"
 | |
| 	"github.com/miekg/dns"
 | |
| )
 | |
| 
 | |
| // ResponseWriter captures the client response and logs the query to dnstap.
 | |
| type ResponseWriter struct {
 | |
| 	queryTime time.Time
 | |
| 	query     *dns.Msg
 | |
| 	dns.ResponseWriter
 | |
| 	Dnstap
 | |
| }
 | |
| 
 | |
| // WriteMsg writes back the response to the client and THEN works on logging the request and response to dnstap.
 | |
| func (w *ResponseWriter) WriteMsg(resp *dns.Msg) error {
 | |
| 	err := w.ResponseWriter.WriteMsg(resp)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	r := new(tap.Message)
 | |
| 	msg.SetQueryTime(r, w.queryTime)
 | |
| 	msg.SetResponseTime(r, time.Now())
 | |
| 	msg.SetQueryAddress(r, w.RemoteAddr())
 | |
| 
 | |
| 	if w.IncludeRawMessage {
 | |
| 		buf, _ := resp.Pack()
 | |
| 		r.ResponseMessage = buf
 | |
| 	}
 | |
| 
 | |
| 	msg.SetType(r, tap.Message_CLIENT_RESPONSE)
 | |
| 	w.TapMessage(r)
 | |
| 	return nil
 | |
| }
 |