ubus: pass json rpc arguments to called ubus functions
authorJo-Philipp Wich <jow@openwrt.org>
Fri, 25 Jan 2013 19:10:45 +0000 (20:10 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Fri, 25 Jan 2013 20:12:06 +0000 (21:12 +0100)
ubus.c

diff --git a/ubus.c b/ubus.c
index e1281721f242000153ce4bf4d454a3cf966ebba9..3a21fc7ca64edafd890fcc66fcc6e9e8405e0ea1 100644 (file)
--- a/ubus.c
+++ b/ubus.c
@@ -233,15 +233,21 @@ static void uh_ubus_single_error(struct client *cl, enum rpc_error type)
        ops->request_done(cl);
 }
 
-static void uh_ubus_send_request(struct client *cl, json_object *obj)
+static void uh_ubus_send_request(struct client *cl, json_object *obj, struct blob_attr *args)
 {
        struct dispatch *d = &cl->dispatch;
        struct dispatch_ubus *du = &d->ubus;
-       int ret;
+       struct blob_attr *cur;
+       static struct blob_buf req;
+       int ret, rem;
+
+       blob_buf_init(&req, 0);
+       blobmsg_for_each_attr(cur, args, rem)
+               blobmsg_add_blob(&req, cur);
 
        blob_buf_init(&du->buf, 0);
        memset(&du->req, 0, sizeof(du->req));
-       ret = ubus_invoke_async(ctx, du->obj, du->func, buf.head, &du->req);
+       ret = ubus_invoke_async(ctx, du->obj, du->func, req.head, &du->req);
        if (ret)
                return uh_ubus_json_error(cl, ERROR_INTERNAL);
 
@@ -376,7 +382,7 @@ static void uh_ubus_handle_request_object(struct client *cl, struct json_object
                goto error;
        }
 
-       uh_ubus_send_request(cl, obj);
+       uh_ubus_send_request(cl, obj, data.data);
        return;
 
 error: