static void send_goodbye_callback(AvahiInterfaceMonitor *m, AvahiInterface *i, void* userdata) { AvahiEntry *e = userdata; AvahiRecord *g; assert(m); assert(i); assert(e); assert(!e->dead); if (!avahi_interface_match(i, e->interface, e->protocol)) return; if (e->flags & AVAHI_PUBLISH_NO_ANNOUNCE) return; if (!avahi_entry_is_registered(m->server, e, i)) return; if (is_duplicate_entry(m->server, e)) return; if (!(g = make_goodbye_record(e->record))) return; /* OOM */ avahi_interface_post_response(i, g, e->flags & AVAHI_PUBLISH_UNIQUE, NULL, 1); avahi_record_unref(g); }
static void new_verifier(AvahiServer *s, AvahiInterface *i, AvahiEntry *e) { AvahiLLMNREntryVerify *ev; assert(s); assert(i); assert(e); assert(!e->dead); assert(e->type == AVAHI_ENTRY_LLMNR); if( !avahi_interface_match (i, e->interface, e->protocol) || !i->llmnr.verifying || !avahi_entry_is_commited(e) ) /* start verifying rr's only when group has been commited */ return; if(get_verifier(s, i, e)) return; if(!(ev = avahi_new(AvahiLLMNREntryVerify, 1))) return; ev->s= s; ev->interface = i; ev->e = e; ev->lq = NULL; AVAHI_LLIST_PREPEND(AvahiLLMNREntryVerify, by_interface, i->llmnr.verifiers, ev); AVAHI_LLIST_PREPEND(AvahiLLMNREntryVerify, by_entry, e->proto.llmnr.verifiers, ev); set_state(ev); }
static void new_announcer(AvahiServer *s, AvahiInterface *i, AvahiEntry *e) { AvahiAnnouncer *a; assert(s); assert(i); assert(e); assert(!e->dead); if (!avahi_interface_match(i, e->interface, e->protocol) || !i->announcing || !avahi_entry_is_commited(e)) return; /* We don't want duplicate announcers */ if (get_announcer(s, e, i)) return; if ((!(a = avahi_new(AvahiAnnouncer, 1)))) { avahi_log_error(__FILE__": Out of memory."); return; } a->server = s; a->interface = i; a->entry = e; a->time_event = NULL; AVAHI_LLIST_PREPEND(AvahiAnnouncer, by_interface, i->announcers, a); AVAHI_LLIST_PREPEND(AvahiAnnouncer, by_entry, e->announcers, a); go_to_initial_state(a); }