X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fmdnsd.git;a=blobdiff_plain;f=announce.c;h=3c8ea1623f53c9e7c7c137ead855cde6e7e1c8a2;hp=4971c4e3e70eedbca333612a926d83c582caf7cf;hb=HEAD;hpb=70ec71015a42e6e4e04b0281b80ec80e5f5f959a diff --git a/announce.c b/announce.c index 4971c4e..3c8ea16 100644 --- a/announce.c +++ b/announce.c @@ -35,49 +35,53 @@ 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) { - char host[256]; + struct interface *iface = container_of(timeout, struct interface, announce_timer); - 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, NULL, mdns_hostname_local, TYPE_ANY, 1); 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: - if (cache_host_is_known(host)) { - fprintf(stderr, "the host %s already exists. stopping announce service\n", host); + if (cache_host_is_known(mdns_hostname_local)) { + fprintf(stderr, "the host %s already exists. stopping announce service\n", mdns_hostname_local); return; } - announce_state++; + iface->announce_state++; + /* Fall through */ case STATE_ANNOUNCE: - service_announce(cur_iface); + dns_reply_a(iface, NULL, announce_ttl); + service_announce_services(iface, NULL, announce_ttl); uloop_timeout_set(timeout, announce_ttl * 800); break; } } void -announce_init(void) +announce_init(struct interface *iface) +{ + iface->announce_state = STATE_PROBE1; + iface->announce_timer.cb = announce_timer; + uloop_timeout_set(&iface->announce_timer, 100); +} + +void +announce_free(struct interface *iface) { - announce_state = STATE_PROBE1; - announce.cb = announce_timer; - uloop_timeout_set(&announce, 100); + uloop_timeout_cancel(&iface->announce_timer); }