summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Crispin <blogic@openwrt.org>2013-11-18 12:22:22 +0100
committerJohn Crispin <blogic@openwrt.org>2013-11-18 12:22:27 +0100
commitaed06fc9cbad91c4f864f0867a187c54cb49aace (patch)
tree2c402f0cd9305d3b9662f686d7c19a8a27dad382
parentd49096fea2499f118976fc6ad17e803847629eab (diff)
downloadunitd-aed06fc9cbad91c4f864f0867a187c54cb49aace.tar
unitd-aed06fc9cbad91c4f864f0867a187c54cb49aace.zip
add a event broadcast function
Signed-off-by: John Crispin <blogic@openwrt.org>
-rw-r--r--procd.h1
-rw-r--r--system.c23
2 files changed, 24 insertions, 0 deletions
diff --git a/procd.h b/procd.h
index dff86f8..62f45b8 100644
--- a/procd.h
+++ b/procd.h
@@ -43,6 +43,7 @@ void procd_signal(void);
void procd_signal_preinit(void);
void procd_inittab(void);
void procd_inittab_run(const char *action);
+void procd_bcast_event(char *event, struct blob_attr *msg);
struct trigger;
void trigger_init(void);
diff --git a/system.c b/system.c
index be02621..3d52039 100644
--- a/system.c
+++ b/system.c
@@ -27,6 +27,8 @@
#include "watchdog.h"
static struct blob_buf b;
+static int notify;
+static struct ubus_context *_ctx;
int upgrade_running = 0;
@@ -284,6 +286,12 @@ static int proc_signal(struct ubus_context *ctx, struct ubus_object *obj,
return 0;
}
+static void
+procd_subscribe_cb(struct ubus_context *ctx, struct ubus_object *obj)
+{
+ notify = obj->has_subscribers;
+}
+
static const struct ubus_method system_methods[] = {
UBUS_METHOD_NOARG("board", system_board),
UBUS_METHOD_NOARG("info", system_info),
@@ -300,12 +308,27 @@ static struct ubus_object system_object = {
.type = &system_object_type,
.methods = system_methods,
.n_methods = ARRAY_SIZE(system_methods),
+ .subscribe_cb = procd_subscribe_cb,
};
+void
+procd_bcast_event(char *event, struct blob_attr *msg)
+{
+ int ret;
+
+ if (!notify)
+ return;
+
+ ret = ubus_notify(_ctx, &system_object, event, msg, -1);
+ if (ret)
+ fprintf(stderr, "Failed to notify log: %s\n", ubus_strerror(ret));
+}
+
void ubus_init_system(struct ubus_context *ctx)
{
int ret;
+ _ctx = ctx;
ret = ubus_add_object(ctx, &system_object);
if (ret)
ERROR("Failed to add object: %s\n", ubus_strerror(ret));