X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=blobdiff_plain;f=libubus-sub.c;h=8793133ad05ec54802be86860e032aa10186a99c;hp=ccb4d9533b1444110f130bc65b87153815482790;hb=af63ab64af10798468ca1453de2360fcda44aab9;hpb=0fccce4445b1961451ce3d99a99c1c0defbd4490 diff --git a/libubus-sub.c b/libubus-sub.c index ccb4d95..8793133 100644 --- a/libubus-sub.c +++ b/libubus-sub.c @@ -21,11 +21,12 @@ static int ubus_subscriber_cb(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_subscriber *s; s = container_of(obj, struct ubus_subscriber, obj); - s->cb(ctx, obj, req, method, msg); + if (s->cb) + return s->cb(ctx, obj, req, method, msg); return 0; } -static const struct ubus_method watch_method = { +const struct ubus_method watch_method __hidden = { .name = NULL, .handler = ubus_subscriber_cb, }; @@ -66,45 +67,3 @@ int ubus_unsubscribe(struct ubus_context *ctx, struct ubus_subscriber *obj, uint return __ubus_subscribe_request(ctx, &obj->obj, id, UBUS_MSG_UNSUBSCRIBE); } -void __hidden ubus_process_unsubscribe(struct ubus_context *ctx, struct ubus_msghdr *hdr) -{ - struct ubus_subscriber *s; - 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_TARGET]) - return; - - objid = blob_get_u32(attrbuf[UBUS_ATTR_OBJID]); - obj = avl_find_element(&ctx->objects, &objid, obj, avl); - if (!obj) - return; - - if (obj->methods != &watch_method) - return; - - s = container_of(obj, struct ubus_subscriber, obj); - 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); -}