diff --git a/src/decollector.c b/src/decollector.c index 874dccbf199109ba997cd9ae42f77f73305ac8d3..db8bd7f270a9f071dca61ec6623301429929cd42 100644 --- a/src/decollector.c +++ b/src/decollector.c @@ -30,7 +30,14 @@ #include "wifi_dataelements.h" #include "decollector.h" #include "debug.h" +#include "config.h" +static int signal_pending; + +static void decollector_sighandler(int sig) +{ + signal_pending = sig; +} static int check_ageout_wifi_assoc_events(void *priv, void *ent, uint32_t age) { @@ -73,6 +80,18 @@ void hb_timer_cb(atimer_t *t) p->ticks++; + if (signal_pending) { + int ret; + + if (signal_pending == SIGHUP) { + ret = collector_get_network_params(p, &dm->network); + if (ret) + err("%s: Error get network ssids!\n", __func__); + } + + signal_pending = 0; + } + /* limit per-device events by number and/or duration */ list_for_each_entry(dev, &dm->network.devicelist, list) { if (dev->ev.num_assoc > p->event_maxnum) { @@ -106,7 +125,7 @@ void hb_timer_cb(atimer_t *t) } } - timer_set(t, 2 * 1000); + timer_set(t, 1 * 1000); } void collection_timer_cb(atimer_t *t) @@ -168,6 +187,9 @@ int decollector_init(void **priv, const struct decollector_useropts *opts) struct decollector_private *p; int ret; + set_sighandler(SIGHUP, decollector_sighandler); + set_sighandler(SIGPIPE, SIG_IGN); + *priv = NULL; p = calloc(1, sizeof(struct decollector_private)); if (!p)