Detect context.DeadlineExceeded

This commit is contained in:
Star Brilliant committed 2018-11-07 19:41:55 +08:00
1 parent c51be0e69c
commit 2d9c9eba50
2 files changed
+20 -2

No files matched your search

+7
View File
@@ -92,6 +92,13 @@ func (c *Client) generateRequestGoogle(ctx context.Context, w dns.ResponseWriter
c.httpClientMux.RLock() c.httpClientMux.RLock()
resp, err := c.httpClient.Do(req) resp, err := c.httpClient.Do(req)
c.httpClientMux.RUnlock() c.httpClientMux.RUnlock()
if err == context.DeadlineExceeded {
// Do not respond, silently fail to prevent caching of SERVFAIL
log.Println(err)
return &DNSRequest{
err: err,
}
}
if err != nil { if err != nil {
log.Println(err) log.Println(err)
reply := jsonDNS.PrepareReply(r) reply := jsonDNS.PrepareReply(r)
+13 -2
View File
@@ -108,8 +108,10 @@ func (c *Client) generateRequestIETF(ctx context.Context, w dns.ResponseWriter,
if len(requestURL) < 2048 { if len(requestURL) < 2048 {
req, err = http.NewRequest("GET", requestURL, nil) req, err = http.NewRequest("GET", requestURL, nil)
if err != nil { if err != nil {
// Do not respond, silently fail to prevent caching of SERVFAIL
log.Println(err) log.Println(err)
reply := jsonDNS.PrepareReply(r)
reply.Rcode = dns.RcodeServerFailure
w.WriteMsg(reply)
return &DNSRequest{ return &DNSRequest{
err: err, err: err,
} }
@@ -117,8 +119,10 @@ func (c *Client) generateRequestIETF(ctx context.Context, w dns.ResponseWriter,
} else { } else {
req, err = http.NewRequest("POST", upstream, bytes.NewReader(requestBinary)) req, err = http.NewRequest("POST", upstream, bytes.NewReader(requestBinary))
if err != nil { if err != nil {
// Do not respond, silently fail to prevent caching of SERVFAIL
log.Println(err) log.Println(err)
reply := jsonDNS.PrepareReply(r)
reply.Rcode = dns.RcodeServerFailure
w.WriteMsg(reply)
return &DNSRequest{ return &DNSRequest{
err: err, err: err,
} }
@@ -131,6 +135,13 @@ func (c *Client) generateRequestIETF(ctx context.Context, w dns.ResponseWriter,
c.httpClientMux.RLock() c.httpClientMux.RLock()
resp, err := c.httpClient.Do(req) resp, err := c.httpClient.Do(req)
c.httpClientMux.RUnlock() c.httpClientMux.RUnlock()
if err == context.DeadlineExceeded {
// Do not respond, silently fail to prevent caching of SERVFAIL
log.Println(err)
return &DNSRequest{
err: err,
}
}
if err != nil { if err != nil {
log.Println(err) log.Println(err)
reply := jsonDNS.PrepareReply(r) reply := jsonDNS.PrepareReply(r)