discoverymgr : add server exit multicast sender and receiver 83/203983/1
authordamon92 <damon92.lee@samsung.com>
Thu, 18 Apr 2019 04:56:43 +0000 (13:56 +0900)
committerdamon92 <damon92.lee@samsung.com>
Thu, 18 Apr 2019 04:56:43 +0000 (13:56 +0900)
Change-Id: I0ff5837f6b4131f75e3193478cb8ae02cc9759fc

src/discoverymgr/vendor/grandcat/zeroconf/server.go

index a390d1aa32dea8101471e8bb5149b5d0cb5355c5..d59c0c9b391811d3bba22455ce2ba5796ad3d3d2 100644 (file)
@@ -348,13 +348,21 @@ func registerAdvertisedEntity(msg *dns.Msg, srcIP string) error {
        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
 }
 
@@ -369,7 +377,6 @@ func (s *Server) handleQuery(query *dns.Msg, ifIndex int, from net.Addr) error {
                }
                return nil
        }
-
        // Handle each question
        var err error
        for _, q := range query.Question {
@@ -655,6 +662,18 @@ func (s *Server) unregister() error {
        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)
 }