X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Fresolve-service.c;h=4a3cec8e8149fb9a3a9e831117d1c0690a478e9f;hb=c4cbc73a5fdc59d90b5d3c8dadaff8f228b98671;hp=31b00815798ee7baac1f8b1d8d75e1aa79c730f2;hpb=1ffedb586bd2fb6daa3970304fac7c5b415cd38f;p=catta diff --git a/avahi-core/resolve-service.c b/avahi-core/resolve-service.c index 31b0081..4a3cec8 100644 --- a/avahi-core/resolve-service.c +++ b/avahi-core/resolve-service.c @@ -195,10 +195,10 @@ static void record_browser_callback( int changed = 0; assert(record); - if (r->interface > 0 && interface != r->interface) + if (r->interface > 0 && interface > 0 && interface != r->interface) return; - if (r->protocol != AVAHI_PROTO_UNSPEC && protocol != r->protocol) + if (r->protocol != AVAHI_PROTO_UNSPEC && protocol != AVAHI_PROTO_UNSPEC && protocol != r->protocol) return; if (r->interface <= 0) @@ -349,6 +349,24 @@ static void record_browser_callback( case AVAHI_BROWSER_NOT_FOUND: case AVAHI_BROWSER_FAILURE: + + if (rr == r->record_browser_a && r->record_browser_aaaa) { + /* We were looking for both AAAA and A, and the other query is still living, so we'll not die */ + avahi_s_record_browser_free(r->record_browser_a); + r->record_browser_a = NULL; + break; + } + + if (rr == r->record_browser_aaaa && r->record_browser_a) { + /* We were looking for both AAAA and A, and the other query is still living, so we'll not die */ + avahi_s_record_browser_free(r->record_browser_aaaa); + r->record_browser_aaaa = NULL; + break; + } + + + /* Hmm, everything's lost, tell the user */ + if (r->record_browser_srv) avahi_s_record_browser_free(r->record_browser_srv); if (r->record_browser_txt) @@ -410,7 +428,7 @@ AvahiSServiceResolver *avahi_s_service_resolver_new( if (!domain) domain = server->domain_name; - if (!AVAHI_VALID_FLAGS(flags, AVAHI_LOOKUP_USE_WIDE_AREA|AVAHI_LOOKUP_USE_MULTICAST|AVAHI_LOOKUP_NO_TXT|AVAHI_LOOKUP_NO_ADDRESS)) { + if (!AVAHI_FLAGS_VALID(flags, AVAHI_LOOKUP_USE_WIDE_AREA|AVAHI_LOOKUP_USE_MULTICAST|AVAHI_LOOKUP_NO_TXT|AVAHI_LOOKUP_NO_ADDRESS)) { avahi_server_set_errno(server, AVAHI_ERR_INVALID_FLAGS); return NULL; }