-void ubus_invoke_async(struct ubus_context *ctx, uint32_t obj, const char *method,
- struct blob_attr *msg, struct ubus_request *req)
-{
- blob_buf_init(&b, 0);
- blob_put_int32(&b, UBUS_ATTR_OBJID, obj);
- blob_put_string(&b, UBUS_ATTR_METHOD, method);
- if (msg)
- blob_put(&b, UBUS_ATTR_DATA, blob_data(msg), blob_len(msg));
-
- ubus_start_request(ctx, req, b.head, UBUS_MSG_INVOKE, obj);
-}
-
-int ubus_invoke(struct ubus_context *ctx, uint32_t obj, const char *method,
- struct blob_attr *msg, ubus_data_handler_t cb, void *priv)
-{
- struct ubus_request req;
-
- ubus_invoke_async(ctx, obj, method, msg, &req);
- req.data_cb = cb;
- req.priv = priv;
- return ubus_complete_request(ctx, &req);
-}