aboutsummaryrefslogtreecommitdiff
path: root/server/zones.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/zones.go')
-rw-r--r--server/zones.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/server/zones.go b/server/zones.go
new file mode 100644
index 000000000..6a5a7a938
--- /dev/null
+++ b/server/zones.go
@@ -0,0 +1,28 @@
+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)
+ }
+}