From ed6c7cb78468a2ceeb495b10fbdc302cff8027fd Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Fri, 10 Oct 2014 17:14:06 +0100 Subject: [PATCH] Concatenate multiple replies received over mDNS --- server/server.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/server.go b/server/server.go index 9a67701f..fb7bf61b 100644 --- a/server/server.go +++ b/server/server.go @@ -58,11 +58,18 @@ func queryHandler(zone Zone, mdnsClient *MDNSClient) dns.HandlerFunc { log.Printf("Failed lookup for %s; sending mDNS query", q.Name) // We don't know the answer; see if someone else does channel := make(chan *ResponseA, 4) + replies := make([]net.IP, 0) go func() { // Loop terminates when channel is closed by MDNSClient on timeout for resp := range channel { log.Printf("Got address response %s to query %s addr %s", resp.Name, q.Name, resp.Addr) - m := makeDNSReply(r, resp.Name, []net.IP{resp.Addr}) + replies = append(replies, resp.Addr) + } + if len(replies) > 0 { + m := makeDNSReply(r, q.Name, replies) + w.WriteMsg(m) + } else { + m := makeDNSFailResponse(r) w.WriteMsg(m) } }()