- if (a->state == AVAHI_PROBING) {
- avahi_elapse_time(&tv, 0, AVAHI_PROBE_JITTER_MSEC);
- set_timeout(a, &tv);
- } else if (a->state == AVAHI_ANNOUNCING) {
- avahi_elapse_time(&tv, 0, AVAHI_ANNOUNCEMENT_JITTER_MSEC);
- set_timeout(a, &tv);
+ if (a->state == AVAHI_PROBING)
+ set_timeout(a, avahi_elapse_time(&tv, 0, AVAHI_PROBE_JITTER_MSEC));
+ else if (a->state == AVAHI_ANNOUNCING)
+ set_timeout(a, avahi_elapse_time(&tv, 0, AVAHI_ANNOUNCEMENT_JITTER_MSEC));
+ else
+ set_timeout(a, NULL);
+}
+
+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;