X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Fbrowse.c;h=16d89548442ac1c3ed8f813f04170314718103c5;hb=2635b54ef09173bbf72072436fad7d1e1fca3bc9;hp=09bc0fa1f869b92aae244dc88b1dbac8b922f85b;hpb=263515cd1d7b52ce2ad3dc55a93b9d6f730133f1;p=catta diff --git a/avahi-core/browse.c b/avahi-core/browse.c index 09bc0fa..16d8954 100644 --- a/avahi-core/browse.c +++ b/avahi-core/browse.c @@ -35,8 +35,10 @@ #include "browse.h" #include "log.h" #include "querier.h" +#include "domain-util.h" +#include "rr-util.h" -#define AVAHI_MAX_LOOKUPS_PER_BROWSER 15 +#define AVAHI_LOOKUPS_PER_BROWSER_MAX 15 struct AvahiSRBLookup { AvahiSRecordBrowser *record_browser; @@ -92,7 +94,7 @@ static AvahiSRBLookup* lookup_new( assert(AVAHI_IF_VALID(interface)); assert(AVAHI_PROTO_VALID(protocol)); - if (b->n_lookups >= AVAHI_MAX_LOOKUPS_PER_BROWSER) + if (b->n_lookups >= AVAHI_LOOKUPS_PER_BROWSER_MAX) /* We don't like cyclic CNAMEs */ return NULL; @@ -193,7 +195,6 @@ static void browser_cancel(AvahiSRecordBrowser *b) { } } - static void lookup_wide_area_callback( AvahiWideAreaLookupEngine *e, AvahiBrowserEvent event, @@ -206,6 +207,7 @@ static void lookup_wide_area_callback( assert(e); assert(l); + assert(l->ref >= 1); b = l->record_browser; @@ -278,8 +280,10 @@ static void lookup_multicast_callback( lookup_handle_cname(l, interface, protocol, b->flags, r); else { /* It's a normal record, so let's call the user callback */ - assert(avahi_key_equal(b->key, l->key)); + if (avahi_server_is_record_local(b->server, interface, protocol, r)) + flags |= AVAHI_LOOKUP_RESULT_LOCAL; + b->callback(b, interface, protocol, event, r, flags, b->userdata); } break; @@ -418,6 +422,7 @@ static void lookup_handle_cname(AvahiSRBLookup *l, AvahiIfIndex interface, Avahi l->cname_lookups = avahi_rlist_prepend(l->cname_lookups, lookup_ref(n)); lookup_go(n); + lookup_unref(n); } static void lookup_drop_cname(AvahiSRBLookup *l, AvahiIfIndex interface, AvahiProtocol protocol, AvahiLookupFlags flags, AvahiRecord *r) { @@ -450,7 +455,7 @@ static void lookup_drop_cname(AvahiSRBLookup *l, AvahiIfIndex interface, AvahiPr } } -static void defer_callback(AvahiTimeEvent *e, void *userdata) { +static void defer_callback(AVAHI_GCC_UNUSED AvahiTimeEvent *e, void *userdata) { AvahiSRecordBrowser *b = userdata; int n;