// Performs the actual query by service name (browse) or service instance name (lookup), // start response listeners goroutines and loops over the entries channel. func (c *client) query(params *LookupParams) error { var serviceName, serviceInstanceName string serviceName = fmt.Sprintf("%s.%s.", trimDot(params.Service), trimDot(params.Domain)) if params.Instance != "" { serviceInstanceName = fmt.Sprintf("%s.%s", params.Instance, serviceName) } // send the query m := new(dns.Msg) if serviceInstanceName != "" { m.Question = []dns.Question{ dns.Question{serviceInstanceName, dns.TypeSRV, dns.ClassINET}, dns.Question{serviceInstanceName, dns.TypeTXT, dns.ClassINET}, } m.RecursionDesired = false } else { m.SetQuestion(serviceName, dns.TypePTR) m.RecursionDesired = false } if err := c.sendQuery(m); err != nil { return err } return nil }