int ubus_add_object(struct ubus_context *ctx, struct ubus_object *obj) { struct ubus_request req; int ret; blob_buf_init(&b, 0); if (obj->name && obj->type) { blob_put_string(&b, UBUS_ATTR_OBJPATH, obj->name); if (obj->type->id) blob_put_int32(&b, UBUS_ATTR_OBJTYPE, obj->type->id); else if (!ubus_push_object_type(obj->type)) return UBUS_STATUS_INVALID_ARGUMENT; } if (ubus_start_request(ctx, &req, b.head, UBUS_MSG_ADD_OBJECT, 0) < 0) return UBUS_STATUS_INVALID_ARGUMENT; req.raw_data_cb = ubus_add_object_cb; req.priv = obj; ret = ubus_complete_request(ctx, &req, 0); if (ret) return ret; if (!obj->id) return UBUS_STATUS_NO_DATA; return 0; }
static int __ubus_subscribe_request(struct ubus_context *ctx, struct ubus_object *obj, uint32_t id, int type) { struct ubus_request req; blob_buf_init(&b, 0); blob_put_int32(&b, UBUS_ATTR_OBJID, obj->id); blob_put_int32(&b, UBUS_ATTR_TARGET, id); if (ubus_start_request(ctx, &req, b.head, type, 0) < 0) return UBUS_STATUS_INVALID_ARGUMENT; return ubus_complete_request(ctx, &req, 0); }
int ubus_remove_object(struct ubus_context *ctx, struct ubus_object *obj) { struct ubus_request req; int ret; blob_buf_init(&b, 0); blob_put_int32(&b, UBUS_ATTR_OBJID, obj->id); if (ubus_start_request(ctx, &req, b.head, UBUS_MSG_REMOVE_OBJECT, 0) < 0) return UBUS_STATUS_INVALID_ARGUMENT; req.raw_data_cb = ubus_remove_object_cb; req.priv = obj; ret = ubus_complete_request(ctx, &req, 0); if (ret) return ret; if (obj->id) return UBUS_STATUS_NO_DATA; return 0; }