|  | @@ -0,0 +1,40 @@
 | 
	
		
			
				|  |  | +// The example middleware prints example to stdout on every packet received.
 | 
	
		
			
				|  |  | +package example
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import (
 | 
	
		
			
				|  |  | +	"fmt"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"github.com/coredns/coredns/middleware"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	"github.com/miekg/dns"
 | 
	
		
			
				|  |  | +	"golang.org/x/net/context"
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// Example is an example middleware to ...
 | 
	
		
			
				|  |  | +type Example struct {
 | 
	
		
			
				|  |  | +	Next middleware.Handler
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// ServeDNS implements the middleware.Handler interface.
 | 
	
		
			
				|  |  | +func (e Example) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
 | 
	
		
			
				|  |  | +	pw := NewResponsePrinter(w)
 | 
	
		
			
				|  |  | +	return middleware.NextOrFailure(e.Name(), e.Next, ctx, pw, r)
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// Name implements the Handler interface.
 | 
	
		
			
				|  |  | +func (e Example) Name() string { return "example" }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type ResponsePrinter struct {
 | 
	
		
			
				|  |  | +	dns.ResponseWriter
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// NewResponsePrinter returns a dns.Msg modifier that print example when a query is received.
 | 
	
		
			
				|  |  | +func NewResponsePrinter(w dns.ResponseWriter) *ResponsePrinter {
 | 
	
		
			
				|  |  | +	return &ResponsePrinter{ResponseWriter: w}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// WriteMsg records the status code and calls the underlying ResponseWriter's WriteMsg method.
 | 
	
		
			
				|  |  | +func (r *ResponsePrinter) WriteMsg(res *dns.Msg) error {
 | 
	
		
			
				|  |  | +	fmt.Println("example")
 | 
	
		
			
				|  |  | +	return r.ResponseWriter.WriteMsg(res)
 | 
	
		
			
				|  |  | +}
 |