void avahi_s_record_browser_free(AvahiSRecordBrowser *b) { assert(b); assert(!b->dead); b->dead = 1; b->server->need_browser_cleanup = 1; browser_cancel(b); }
static void defer_callback(AVAHI_GCC_UNUSED AvahiTimeEvent *e, void *userdata) { AvahiSRecordBrowser *b = userdata; int n = 0; assert(b); assert(!b->dead); /* Remove the defer timeout */ if (b->defer_time_event) { avahi_time_event_free(b->defer_time_event); b->defer_time_event = NULL; } /* Create initial query */ assert(!b->root_lookup); b->root_lookup = lookup_add(b, b->interface, b->protocol, b->flags, b->key); assert(b->root_lookup); n = lookup_go(b->root_lookup); if (b->dead) return; if (n < 0) { /* sending of the initial query failed */ avahi_server_set_errno(b->server, AVAHI_ERR_FAILURE); b->callback( b, b->interface, b->protocol, AVAHI_BROWSER_FAILURE, NULL, b->flags & AVAHI_LOOKUP_USE_WIDE_AREA ? AVAHI_LOOKUP_RESULT_WIDE_AREA : (b->flags & AVAHI_LOOKUP_RESULT_MULTICAST ? AVAHI_LOOKUP_RESULT_MULTICAST : AVAHI_LOOKUP_RESULT_LLMNR), b->userdata); browser_cancel(b); return; } /* Tell the client that we're done with the cache */ b->callback( b, b->interface, b->protocol, AVAHI_BROWSER_CACHE_EXHAUSTED, NULL, b->flags & AVAHI_LOOKUP_USE_WIDE_AREA ? AVAHI_LOOKUP_RESULT_WIDE_AREA : (b->flags & AVAHI_LOOKUP_RESULT_MULTICAST ? AVAHI_LOOKUP_RESULT_MULTICAST : AVAHI_LOOKUP_RESULT_LLMNR), b->userdata); if (!b->dead && b->root_lookup && (b->root_lookup->flags & AVAHI_LOOKUP_USE_WIDE_AREA) && n > 0 ) { /* If we do wide area lookups and the the cache contained * entries, we assume that it is complete, and tell the user * so by firing ALL_FOR_NOW. */ b->callback(b, b->interface, b->protocol, AVAHI_BROWSER_ALL_FOR_NOW, NULL, AVAHI_LOOKUP_RESULT_LLMNR, b->userdata); } }
void avahi_s_record_browser_destroy(AvahiSRecordBrowser *b) { assert(b); browser_cancel(b); AVAHI_LLIST_REMOVE(AvahiSRecordBrowser, browser, b->server->record_browsers, b); avahi_key_unref(b->key); avahi_free(b); }
void avahi_s_record_browser_restart(AvahiSRecordBrowser *b) { assert(b); assert(!b->dead); browser_cancel(b); /* Request a new iteration of the cache scanning */ if (!b->defer_time_event) { b->defer_time_event = avahi_time_event_new(b->server->time_event_queue, NULL, defer_callback, b); assert(b->defer_time_event); } }