diff options
author | 2017-08-07 07:39:57 -0700 | |
---|---|---|
committer | 2017-08-07 07:39:57 -0700 | |
commit | 468d5b57de34e269a3c394385db146d98473d6e7 (patch) | |
tree | 6957eeec368ae2862794aa0c935545b8e99a9b93 | |
parent | 760e66706381ada5c4a589650175d07e8aeb09f0 (diff) | |
download | coredns-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.go | 20 | ||||
-rw-r--r-- | middleware/middleware.go | 16 |
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" |