From: Lennart Poettering Date: Sun, 28 Aug 2005 02:11:14 +0000 (+0000) Subject: Don't consider incoming goodbye packets as conflicting unless they match one of our... X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=b30495599b156ac933d091bb0cc1ed669c7887b5;p=catta Don't consider incoming goodbye packets as conflicting unless they match one of our records git-svn-id: file:///home/lennart/svn/public/avahi/trunk@466 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- diff --git a/avahi-core/server.c b/avahi-core/server.c index dbb861d..66cc705 100644 --- a/avahi-core/server.c +++ b/avahi-core/server.c @@ -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 */