projects
/
project
/
procd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add a event broadcast function
[project/procd.git]
/
system.c
diff --git
a/system.c
b/system.c
index
be02621
..
3d52039
100644
(file)
--- a/
system.c
+++ b/
system.c
@@
-27,6
+27,8
@@
#include "watchdog.h"
static struct blob_buf b;
#include "watchdog.h"
static struct blob_buf b;
+static int notify;
+static struct ubus_context *_ctx;
int upgrade_running = 0;
int upgrade_running = 0;
@@
-284,6
+286,12
@@
static int proc_signal(struct ubus_context *ctx, struct ubus_object *obj,
return 0;
}
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),
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),
.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;
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));
ret = ubus_add_object(ctx, &system_object);
if (ret)
ERROR("Failed to add object: %s\n", ubus_strerror(ret));