From a64df3f0487069c0af532075dacc203ce4e8121d Mon Sep 17 00:00:00 2001 From: Star Brilliant Date: Mon, 2 Jul 2018 13:49:59 +0800 Subject: [PATCH] Preserve TransactionID --- doh-server/ietf.go | 8 +++++--- doh-server/server.go | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/doh-server/ietf.go b/doh-server/ietf.go index 25c2f8a..9ca39f3 100644 --- a/doh-server/ietf.go +++ b/doh-server/ietf.go @@ -95,6 +95,7 @@ func (s *Server) parseRequestIETF(w http.ResponseWriter, r *http.Request) *DNSRe fmt.Printf("%s - - [%s] \"%s %s %s\"\n", r.RemoteAddr, time.Now().Format("02/Jan/2006:15:04:05 -0700"), questionName, questionClass, questionType) } + transactionID := msg.Id msg.Id = dns.Id() opt := msg.IsEdns0() if opt == nil { @@ -137,14 +138,15 @@ func (s *Server) parseRequestIETF(w http.ResponseWriter, r *http.Request) *DNSRe } return &DNSRequest{ - request: msg, - isTailored: isTailored, + request: msg, + transactionID: transactionID, + isTailored: isTailored, } } func (s *Server) generateResponseIETF(w http.ResponseWriter, r *http.Request, req *DNSRequest) { respJSON := jsonDNS.Marshal(req.response) - req.response.Id = 0 + req.response.Id = req.transactionID respBytes, err := req.response.Pack() if err != nil { log.Println(err) diff --git a/doh-server/server.go b/doh-server/server.go index 404a8cb..0de19e4 100644 --- a/doh-server/server.go +++ b/doh-server/server.go @@ -48,6 +48,7 @@ type Server struct { type DNSRequest struct { request *dns.Msg response *dns.Msg + transactionID uint16 currentUpstream string isTailored bool errcode int