mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-29 17:24:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			29 lines
		
	
	
		
			807 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			29 lines
		
	
	
		
			807 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | package server | ||
|  | 
 | ||
|  | import "github.com/miekg/coredns/middleware" | ||
|  | 
 | ||
|  | // zone represents a DNS zone. While a Server | ||
|  | // is what actually binds to the address, a user may want to serve | ||
|  | // multiple zones on a single address, and this is what a | ||
|  | // zone allows us to do. | ||
|  | type zone struct { | ||
|  | 	config Config | ||
|  | 	stack  middleware.Handler | ||
|  | } | ||
|  | 
 | ||
|  | // buildStack builds the server's middleware stack based | ||
|  | // on its config. This method should be called last before | ||
|  | // ListenAndServe begins. | ||
|  | func (z *zone) buildStack() error { | ||
|  | 	z.compile(z.config.Middleware) | ||
|  | 	return nil | ||
|  | } | ||
|  | 
 | ||
|  | // compile is an elegant alternative to nesting middleware function | ||
|  | // calls like handler1(handler2(handler3(finalHandler))). | ||
|  | func (z *zone) compile(layers []middleware.Middleware) { | ||
|  | 	for i := len(layers) - 1; i >= 0; i-- { | ||
|  | 		z.stack = layers[i](z.stack) | ||
|  | 	} | ||
|  | } |