From 83f20767ea1f7c22aebced565c15e6dbea7efa9a Mon Sep 17 00:00:00 2001 From: Star Brilliant Date: Fri, 13 Apr 2018 02:46:03 +0800 Subject: [PATCH] Update to IETF draft-07 --- doh-client/client.go | 18 +++++++++--------- doh-client/google.go | 2 +- doh-client/ietf.go | 8 ++++---- doh-server/ietf.go | 4 ++-- doh-server/server.go | 18 +++++++++--------- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/doh-client/client.go b/doh-client/client.go index e30b649..0c860ea 100644 --- a/doh-client/client.go +++ b/doh-client/client.go @@ -182,21 +182,21 @@ func (c *Client) handlerFunc(w dns.ResponseWriter, r *dns.Msg, isTCP bool) { if len(c.conf.UpstreamIETF) == 0 { requestType = "application/dns-json" } else if len(c.conf.UpstreamGoogle) == 0 { - requestType = "message/dns" + requestType = "application/dns-message" } else { numServers := len(c.conf.UpstreamGoogle) + len(c.conf.UpstreamIETF) random := rand.Intn(numServers) if random < len(c.conf.UpstreamGoogle) { requestType = "application/dns-json" } else { - requestType = "message/dns" + requestType = "application/dns-message" } } var req *DNSRequest if requestType == "application/dns-json" { req = c.generateRequestGoogle(w, r, isTCP) - } else if requestType == "message/dns" { + } else if requestType == "application/dns-message" { req = c.generateRequestIETF(w, r, isTCP) } else { panic("Unknown request Content-Type") @@ -210,21 +210,21 @@ func (c *Client) handlerFunc(w dns.ResponseWriter, r *dns.Msg, isTCP bool) { candidateType := strings.SplitN(req.response.Header.Get("Content-Type"), ";", 2)[0] if candidateType == "application/json" { contentType = "application/json" - } else if candidateType == "message/dns" { - contentType = "message/dns" + } else if candidateType == "application/dns-message" { + contentType = "application/dns-message" } else if candidateType == "application/dns-udpwireformat" { - contentType = "message/dns" + contentType = "application/dns-message" } else { if requestType == "application/dns-json" { contentType = "application/json" - } else if requestType == "message/dns" { - contentType = "message/dns" + } else if requestType == "application/dns-message" { + contentType = "application/dns-message" } } if contentType == "application/json" { c.parseResponseGoogle(w, r, isTCP, req) - } else if contentType == "message/dns" { + } else if contentType == "application/dns-message" { c.parseResponseIETF(w, r, isTCP, req) } else { panic("Unknown response Content-Type") diff --git a/doh-client/google.go b/doh-client/google.go index d2daa29..5777655 100644 --- a/doh-client/google.go +++ b/doh-client/google.go @@ -91,7 +91,7 @@ func (c *Client) generateRequestGoogle(w dns.ResponseWriter, r *dns.Msg, isTCP b err: err, } } - req.Header.Set("Accept", "application/json, message/dns, application/dns-udpwireformat") + req.Header.Set("Accept", "application/json, application/dns-message, application/dns-udpwireformat") req.Header.Set("User-Agent", "DNS-over-HTTPS/1.1 (+https://github.com/m13253/dns-over-https)") c.httpClientMux.RLock() resp, err := c.httpClient.Do(req) diff --git a/doh-client/ietf.go b/doh-client/ietf.go index e616a34..9bedfab 100644 --- a/doh-client/ietf.go +++ b/doh-client/ietf.go @@ -128,7 +128,7 @@ func (c *Client) generateRequestIETF(w dns.ResponseWriter, r *dns.Msg, isTCP boo numServers := len(c.conf.UpstreamIETF) upstream := c.conf.UpstreamIETF[rand.Intn(numServers)] requestURL := fmt.Sprintf("%s?ct=application/dns-udpwireformat&dns=%s", upstream, requestBase64) - //requestURL := fmt.Sprintf("%s?ct=message/dns&dns=%s", upstream, requestBase64) + //requestURL := fmt.Sprintf("%s?ct=application/dns-message&dns=%s", upstream, requestBase64) var req *http.Request if len(requestURL) < 2048 { @@ -151,9 +151,9 @@ func (c *Client) generateRequestIETF(w dns.ResponseWriter, r *dns.Msg, isTCP boo err: err, } } - req.Header.Set("Content-Type", "message/dns") + req.Header.Set("Content-Type", "application/dns-message") } - req.Header.Set("Accept", "message/dns, application/dns-udpwireformat, application/json") + req.Header.Set("Accept", "application/dns-message, application/dns-udpwireformat, application/json") req.Header.Set("User-Agent", "DNS-over-HTTPS/1.1 (+https://github.com/m13253/dns-over-https)") c.httpClientMux.RLock() resp, err := c.httpClient.Do(req) @@ -185,7 +185,7 @@ func (c *Client) parseResponseIETF(w dns.ResponseWriter, r *dns.Msg, isTCP bool, log.Printf("HTTP error: %s\n", req.response.Status) req.reply.Rcode = dns.RcodeServerFailure contentType := req.response.Header.Get("Content-Type") - if contentType != "message/dns" && !strings.HasPrefix(contentType, "message/dns;") { + if contentType != "application/dns-message" && !strings.HasPrefix(contentType, "application/dns-message;") { w.WriteMsg(req.reply) return } diff --git a/doh-server/ietf.go b/doh-server/ietf.go index d08a50b..a447ec4 100644 --- a/doh-server/ietf.go +++ b/doh-server/ietf.go @@ -45,7 +45,7 @@ func (s *Server) parseRequestIETF(w http.ResponseWriter, r *http.Request) *DNSRe errtext: fmt.Sprintf("Invalid argument value: \"dns\" = %q", requestBase64), } } - if len(requestBinary) == 0 && (r.Header.Get("Content-Type") == "message/dns" || r.Header.Get("Content-Type") == "application/dns-udpwireformat") { + if len(requestBinary) == 0 && (r.Header.Get("Content-Type") == "application/dns-message" || r.Header.Get("Content-Type") == "application/dns-udpwireformat") { requestBinary, err = ioutil.ReadAll(r.Body) if err != nil { return &DNSRequest{ @@ -144,7 +144,7 @@ func (s *Server) generateResponseIETF(w http.ResponseWriter, r *http.Request, re return } - w.Header().Set("Content-Type", "message/dns") + w.Header().Set("Content-Type", "application/dns-message") now := time.Now().UTC().Format(http.TimeFormat) w.Header().Set("Date", now) w.Header().Set("Last-Modified", now) diff --git a/doh-server/server.go b/doh-server/server.go index 2a0f33e..fa990de 100644 --- a/doh-server/server.go +++ b/doh-server/server.go @@ -98,7 +98,7 @@ func (s *Server) handlerFunc(w http.ResponseWriter, r *http.Request) { if r.FormValue("name") != "" { contentType = "application/dns-json" } else if r.FormValue("dns") != "" { - contentType = "message/dns" + contentType = "application/dns-message" } } var responseType string @@ -108,10 +108,10 @@ func (s *Server) handlerFunc(w http.ResponseWriter, r *http.Request) { responseType = "application/json" break } else if responseCandidate == "application/dns-udpwireformat" { - responseType = "message/dns" + responseType = "application/dns-message" break - } else if responseCandidate == "message/dns" { - responseType = "message/dns" + } else if responseCandidate == "application/dns-message" { + responseType = "application/dns-message" break } } @@ -119,17 +119,17 @@ func (s *Server) handlerFunc(w http.ResponseWriter, r *http.Request) { // Guess response Content-Type based on request Content-Type if contentType == "application/dns-json" { responseType = "application/json" - } else if contentType == "message/dns" { - responseType = "message/dns" + } else if contentType == "application/dns-message" { + responseType = "application/dns-message" } else if contentType == "application/dns-udpwireformat" { - responseType = "message/dns" + responseType = "application/dns-message" } } var req *DNSRequest if contentType == "application/dns-json" { req = s.parseRequestGoogle(w, r) - } else if contentType == "message/dns" { + } else if contentType == "application/dns-message" { req = s.parseRequestIETF(w, r) } else if contentType == "application/dns-udpwireformat" { req = s.parseRequestIETF(w, r) @@ -151,7 +151,7 @@ func (s *Server) handlerFunc(w http.ResponseWriter, r *http.Request) { if responseType == "application/json" { s.generateResponseGoogle(w, r, req) - } else if responseType == "message/dns" { + } else if responseType == "application/dns-message" { s.generateResponseIETF(w, r, req) } else { panic("Unknown response Content-Type")