ubus: assume that the service iface can be NULL
[project/mdnsd.git] / main.c
diff --git a/main.c b/main.c
index 1806dfc589a195ccf20a4490a5e9a81f99ed4bc0..752e78adf06589948d14f87898a913da931cc91a 100644 (file)
--- a/main.c
+++ b/main.c
@@ -26,6 +26,7 @@
 #include <netinet/in.h>
 #include <arpa/nameser.h>
 
+#include <udebug.h>
 #include <libubus.h>
 #include <libubox/uloop.h>
 
 int cfg_proto = 0;
 int cfg_no_subnet = 0;
 
+static struct udebug ud;
+static struct udebug_buf udb;
+static bool udebug_enabled;
+
+static void
+umdns_udebug_vprintf(const char *format, va_list ap)
+{
+       if (!udebug_enabled)
+               return;
+
+       udebug_entry_init(&udb);
+       udebug_entry_vprintf(&udb, format, ap);
+       udebug_entry_add(&udb);
+}
+
+void umdns_udebug_printf(const char *format, ...)
+{
+       va_list ap;
+
+       va_start(ap, format);
+       umdns_udebug_vprintf(format, ap);
+       va_end(ap);
+}
+
+void umdns_udebug_set_enabled(bool val)
+{
+       static const struct udebug_buf_meta meta = {
+               .name = "umdns_log",
+               .format = UDEBUG_FORMAT_STRING,
+       };
+
+       if (udebug_enabled == val)
+               return;
+
+       udebug_enabled = val;
+       if (!val) {
+               udebug_buf_free(&udb);
+               udebug_free(&ud);
+               return;
+       }
+
+       udebug_init(&ud);
+       udebug_auto_connect(&ud, NULL);
+       udebug_buf_init(&udb, 1024, 64 * 1024);
+       udebug_buf_add(&ud, &udb, &meta);
+}
+
 static void
 signal_shutdown(int signal)
 {
@@ -98,7 +146,7 @@ main(int argc, char **argv)
        uloop_done();
 
        interface_shutdown();
-       cache_cleanup();
+       cache_cleanup(NULL);
        service_cleanup();
        vlist_flush(&interfaces);