summaryrefslogtreecommitdiff
path: root/libubus-sub.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-12-14 13:00:49 +0100
committerFelix Fietkau <nbd@openwrt.org>2012-12-14 13:00:57 +0100
commita69f062cbd4041229f8d29ef9647bf783df414c1 (patch)
tree8bd1b500273b62708f51690d985397fada56337b /libubus-sub.c
parentd366a6de839087d8a17e5855c14ae55e95b13c65 (diff)
downloadubus-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.c18
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);
+}