+
+ g_assert(r);
+
+ if (r->record_browser_a) {
+ avahi_record_browser_free(r->record_browser_a);
+ r->record_browser_a = NULL;
+ }
+
+ if (r->record_browser_aaaa) {
+ avahi_record_browser_free(r->record_browser_aaaa);
+ r->record_browser_aaaa = NULL;
+ }
+
+ if (r->time_event) {
+ avahi_time_event_queue_remove(r->server->time_event_queue, r->time_event);
+ r->time_event = NULL;
+ }
+
+ if (record) {
+ switch (record->key->type) {
+ case AVAHI_DNS_TYPE_A:
+ a.family = AVAHI_PROTO_INET;
+ a.data.ipv4 = record->data.a.address;
+ break;
+
+ case AVAHI_DNS_TYPE_AAAA:
+ a.family = AVAHI_PROTO_INET6;
+ a.data.ipv6 = record->data.aaaa.address;
+ break;
+
+ default:
+ g_assert(FALSE);
+ }
+ }
+
+ r->callback(r, interface, protocol, event, record ? record->key->name : r->host_name, record ? &a : NULL, r->userdata);
+}
+
+static void record_browser_callback(AvahiRecordBrowser*rr, gint interface, guchar protocol, AvahiBrowserEvent event, AvahiRecord *record, gpointer userdata) {
+ AvahiHostNameResolver *r = userdata;