rename mdns_add_records to cache_dump_records and move it to cache.c
[project/mdnsd.git] / announce.c
index 4971c4e..4706cc2 100644 (file)
@@ -35,29 +35,28 @@ enum {
        STATE_ANNOUNCE,
 };
 
-static struct uloop_timeout announce;
-static int announce_state;
 int announce_ttl = 75 * 60;
 
 static void
 announce_timer(struct uloop_timeout *timeout)
 {
+       struct interface *iface = container_of(timeout, struct interface, announce_timer);
        char host[256];
 
        snprintf(host, sizeof(host), "%s.local", hostname);
 
-       switch (announce_state) {
+       switch (iface->announce_state) {
                case STATE_PROBE1:
                case STATE_PROBE2:
                case STATE_PROBE3:
-                       dns_send_question(cur_iface, host, TYPE_ANY);
+                       dns_send_question(iface, host, TYPE_ANY);
                        uloop_timeout_set(timeout, 250);
-                       announce_state++;
+                       iface->announce_state++;
                        break;
 
                case STATE_PROBE_WAIT:
                        uloop_timeout_set(timeout, 500);
-                       announce_state++;
+                       iface->announce_state++;
                        break;
 
                case STATE_PROBE_END:
@@ -65,19 +64,25 @@ announce_timer(struct uloop_timeout *timeout)
                                fprintf(stderr, "the host %s already exists. stopping announce service\n", host);
                                return;
                        }
-                       announce_state++;
+                       iface->announce_state++;
 
                case STATE_ANNOUNCE:
-                       service_announce(cur_iface);
+                       service_announce(iface);
                        uloop_timeout_set(timeout, announce_ttl * 800);
                        break;
        }
 }
 
 void
-announce_init(void)
+announce_init(struct interface *iface)
 {
-       announce_state = STATE_PROBE1;
-       announce.cb = announce_timer;
-       uloop_timeout_set(&announce, 100);
+       iface->announce_state = STATE_PROBE1;
+       iface->announce_timer.cb = announce_timer;
+       uloop_timeout_set(&iface->announce_timer, 100);
+}
+
+void
+announce_free(struct interface *iface)
+{
+       uloop_timeout_cancel(&iface->announce_timer);
 }