if entry == nil {
return errors.New("NO dns.TXT")
}
- log.Println("[registerAdvertisedEntity]Discoverd Device: " + srcIP)
- ServiceNames := make([]string, len(entry.Text))
- ServiceNames = entry.Text
- MapMTX.Lock()
- DeviceMap[srcIP] = ServiceNames
- MapMTX.Unlock()
-
+ if entry.TTL == 0 {
+ log.Println("[registerAdvertisedEntity]unregister Device: " + srcIP)
+ MapMTX.Lock()
+ if _, ok := DeviceMap[srcIP]; ok {
+ delete(DeviceMap, srcIP)
+ }
+ MapMTX.Unlock()
+ } else {
+ log.Println("[registerAdvertisedEntity]Discoverd Device: " + srcIP)
+ ServiceNames := make([]string, len(entry.Text))
+ ServiceNames = entry.Text
+ MapMTX.Lock()
+ DeviceMap[srcIP] = ServiceNames
+ MapMTX.Unlock()
+ }
return nil
}
}
return nil
}
-
// Handle each question
var err error
for _, q := range query.Question {
resp.MsgHdr.Response = true
resp.Answer = []dns.RR{}
resp.Extra = []dns.RR{}
+
+ txt := &dns.TXT{
+ Hdr: dns.RR_Header{
+ Name: s.service.ServiceInstanceName(),
+ Rrtype: dns.TypeTXT,
+ Class: dns.ClassINET,
+ Ttl: 0,
+ },
+ Txt: s.service.Text,
+ }
+ resp.Ns = []dns.RR{txt}
+
s.composeLookupAnswers(resp, 0, 0, true)
return s.multicastResponse(resp, 0)
}