From 431db651f04d18d2ee454e49d14806f08283f28c Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 9 Jun 2014 21:13:38 +0200 Subject: [PATCH] move announce state to struct interface Signed-off-by: Felix Fietkau --- announce.c | 29 +++++++++++++++++------------ announce.h | 5 ++++- interface.h | 3 +++ main.c | 2 +- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/announce.c b/announce.c index 4971c4e..4706cc2 100644 --- a/announce.c +++ b/announce.c @@ -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); } diff --git a/announce.h b/announce.h index efd06ff..d645d6d 100644 --- a/announce.h +++ b/announce.h @@ -14,7 +14,10 @@ #ifndef _ANNOUNCE_H__ #define _ANNOUNCE_H__ +struct interface; extern int announce_ttl; -extern void announce_init(void); + +void announce_init(struct interface *iface); +void announce_free(struct interface *iface); #endif diff --git a/interface.h b/interface.h index fe709aa..05104c2 100644 --- a/interface.h +++ b/interface.h @@ -32,6 +32,9 @@ struct interface { int ifindex; const char *ip; + + struct uloop_timeout announce_timer; + int announce_state; }; int interface_add(const char *name); diff --git a/main.c b/main.c index baadda1..505fb7d 100644 --- a/main.c +++ b/main.c @@ -184,7 +184,7 @@ reconnect_socket(struct uloop_timeout *timeout) uloop_fd_add(&cur_iface->fd, ULOOP_READ); sleep(5); dns_send_question(cur_iface, "_services._dns-sd._udp.local", TYPE_PTR); - announce_init(); + announce_init(cur_iface); } } -- 2.11.0