diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-12-14 13:00:49 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2012-12-14 13:00:57 +0100 |
commit | a69f062cbd4041229f8d29ef9647bf783df414c1 (patch) | |
tree | 8bd1b500273b62708f51690d985397fada56337b /libubus-sub.c | |
parent | d366a6de839087d8a17e5855c14ae55e95b13c65 (diff) | |
download | ubus-a69f062cbd4041229f8d29ef9647bf783df414c1.tar.gz |
ubus: add notification for subscribers present/gone
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Diffstat (limited to 'libubus-sub.c')
-rw-r--r-- | libubus-sub.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libubus-sub.c b/libubus-sub.c index 2bfb483..87c8128 100644 --- a/libubus-sub.c +++ b/libubus-sub.c @@ -91,4 +91,22 @@ void __hidden ubus_process_unsubscribe(struct ubus_context *ctx, struct ubus_msg s->remove_cb(ctx, s, blob_get_u32(attrbuf[UBUS_ATTR_TARGET])); } +void __hidden ubus_process_notify(struct ubus_context *ctx, struct ubus_msghdr *hdr) +{ + struct blob_attr **attrbuf; + struct ubus_object *obj; + uint32_t objid; + + attrbuf = ubus_parse_msg(hdr->data); + if (!attrbuf[UBUS_ATTR_OBJID] || !attrbuf[UBUS_ATTR_ACTIVE]) + return; + objid = blob_get_u32(attrbuf[UBUS_ATTR_OBJID]); + obj = avl_find_element(&ctx->objects, &objid, obj, avl); + if (!obj) + return; + + obj->has_subscribers = blob_get_u8(attrbuf[UBUS_ATTR_ACTIVE]); + if (obj->subscribe_cb) + obj->subscribe_cb(ctx, obj); +} |