mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-04 03:03:14 -05: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)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |