X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=system.c;h=d5bf0003f2fdc9c39e6c489f76e56531de070380;hp=be0262190fbd0aa1e9386ba75a59b98ca7d58630;hb=b76325945d31280b2ffecf898bfc62aa5f3d22d4;hpb=916f95cb58604038695347ee41a430d8ca1f0556 diff --git a/system.c b/system.c index be02621..d5bf000 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; @@ -261,7 +263,7 @@ enum { __SIGNAL_MAX }; -static const struct blobmsg_policy signal_policy[__WDT_MAX] = { +static const struct blobmsg_policy signal_policy[__SIGNAL_MAX] = { [SIGNAL_PID] = { .name = "pid", .type = BLOBMSG_TYPE_INT32 }, [SIGNAL_NUM] = { .name = "signum", .type = BLOBMSG_TYPE_INT32 }, }; @@ -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));