aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-08-07 07:39:57 -0700
committerGravatar GitHub <noreply@github.com> 2017-08-07 07:39:57 -0700
commit468d5b57de34e269a3c394385db146d98473d6e7 (patch)
tree6957eeec368ae2862794aa0c935545b8e99a9b93
parent760e66706381ada5c4a589650175d07e8aeb09f0 (diff)
downloadcoredns-468d5b57de34e269a3c394385db146d98473d6e7.tar.gz
coredns-468d5b57de34e269a3c394385db146d98473d6e7.tar.zst
coredns-468d5b57de34e269a3c394385db146d98473d6e7.zip
core: export ClientWrite (#849)
Make ClientWrite available for middleware to use.
-rw-r--r--core/dnsserver/server.go20
-rw-r--r--middleware/middleware.go16
2 files changed, 19 insertions, 17 deletions
diff --git a/core/dnsserver/server.go b/core/dnsserver/server.go
index fb8653c18..58858d153 100644
--- a/core/dnsserver/server.go
+++ b/core/dnsserver/server.go
@@ -205,7 +205,7 @@ func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
if h, ok := s.zones[string(b[:l])]; ok {
if r.Question[0].Qtype != dns.TypeDS {
rcode, _ := h.middlewareChain.ServeDNS(ctx, w, r)
- if rcodeNoClientWrite(rcode) {
+ if !middleware.ClientWrite(rcode) {
DefaultErrorFunc(w, r, rcode)
}
return
@@ -226,7 +226,7 @@ func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
if dshandler != nil {
// DS request, and we found a zone, use the handler for the query
rcode, _ := dshandler.middlewareChain.ServeDNS(ctx, w, r)
- if rcodeNoClientWrite(rcode) {
+ if !middleware.ClientWrite(rcode) {
DefaultErrorFunc(w, r, rcode)
}
return
@@ -235,7 +235,7 @@ func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
// Wildcard match, if we have found nothing try the root zone as a last resort.
if h, ok := s.zones["."]; ok {
rcode, _ := h.middlewareChain.ServeDNS(ctx, w, r)
- if rcodeNoClientWrite(rcode) {
+ if !middleware.ClientWrite(rcode) {
DefaultErrorFunc(w, r, rcode)
}
return
@@ -282,20 +282,6 @@ func DefaultErrorFunc(w dns.ResponseWriter, r *dns.Msg, rc int) {
w.WriteMsg(answer)
}
-func rcodeNoClientWrite(rcode int) bool {
- switch rcode {
- case dns.RcodeServerFailure:
- fallthrough
- case dns.RcodeRefused:
- fallthrough
- case dns.RcodeFormatError:
- fallthrough
- case dns.RcodeNotImplemented:
- return true
- }
- return false
-}
-
const (
tcp = 0
udp = 1
diff --git a/middleware/middleware.go b/middleware/middleware.go
index 7d0d502b3..9e236c6e0 100644
--- a/middleware/middleware.go
+++ b/middleware/middleware.go
@@ -82,5 +82,21 @@ func NextOrFailure(name string, next Handler, ctx context.Context, w dns.Respons
return dns.RcodeServerFailure, Error(name, errors.New("no next middleware found"))
}
+// ClientWrite returns true if the response has been written to the client.
+// Each middleware to adhire to this protocol.
+func ClientWrite(rcode int) bool {
+ switch rcode {
+ case dns.RcodeServerFailure:
+ fallthrough
+ case dns.RcodeRefused:
+ fallthrough
+ case dns.RcodeFormatError:
+ fallthrough
+ case dns.RcodeNotImplemented:
+ return false
+ }
+ return true
+}
+
// Namespace is the namespace used for the metrics.
const Namespace = "coredns"