]> git.meshlink.io Git - catta/commitdiff
Don't consider incoming goodbye packets as conflicting unless they match one of our...
authorLennart Poettering <lennart@poettering.net>
Sun, 28 Aug 2005 02:11:14 +0000 (02:11 +0000)
committerLennart Poettering <lennart@poettering.net>
Sun, 28 Aug 2005 02:11:14 +0000 (02:11 +0000)
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@466 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe

avahi-core/server.c

index dbb861d254e4ed230e9d1885775182ac8ce5d8c1..66cc70592699286d40120494f45b44263729989e 100644 (file)
@@ -295,7 +295,30 @@ static int handle_conflict(AvahiServer *s, AvahiInterface *i, AvahiRecord *recor
     for (e = avahi_hashmap_lookup(s->entries_by_key, record->key); e; e = n) {
         n = e->by_key_next;
 
-        if (e->dead || (!(e->flags & AVAHI_ENTRY_UNIQUE) && !unique))
+        if (e->dead)
+            continue;
+
+        /* Check if the incoming is a goodbye record */
+        if (avahi_record_is_goodbye(record)) {
+
+            if (avahi_record_equal_no_ttl(e->record, record)) {
+                char *t;
+
+                /* Refresh */
+                t = avahi_record_to_string(record); 
+                avahi_log_debug("Recieved goodbye record for one of our records [%s]. Refreshing.", t);
+                avahi_server_prepare_matching_responses(s, i, e->record->key, 0);
+
+                valid = 0;
+                avahi_free(t);
+                break;
+            }
+
+            /* If the goodybe packet doesn't match one of our own RRs, we simply ignore it. */
+            continue;
+        }
+        
+        if (!(e->flags & AVAHI_ENTRY_UNIQUE) && !unique)
             continue;
 
         /* Either our entry or the other is intended to be unique, so let's check */