static const struct blobmsg_policy rpc_policy[__RPC_MAX] = {
[RPC_JSONRPC] = { .name = "jsonrpc", .type = BLOBMSG_TYPE_STRING },
[RPC_METHOD] = { .name = "method", .type = BLOBMSG_TYPE_STRING },
- [RPC_PARAMS] = { .name = "params", .type = BLOBMSG_TYPE_ARRAY },
+ [RPC_PARAMS] = { .name = "params", .type = BLOBMSG_TYPE_UNSPEC },
[RPC_ID] = { .name = "id", .type = BLOBMSG_TYPE_UNSPEC },
};
ops->request_done(cl);
}
-static void uh_ubus_send_request(struct client *cl, json_object *obj, const char *sid, struct blob_attr *args)
+static void uh_ubus_send_request(struct client *cl, const char *sid, struct blob_attr *args)
{
struct dispatch *d = &cl->dispatch;
struct dispatch_ubus *du = &d->ubus;
blobmsg_close_table(data->buf, o);
}
-static void uh_ubus_send_list(struct client *cl, json_object *obj, struct blob_attr *params)
+static void uh_ubus_send_list(struct client *cl, struct blob_attr *params)
{
struct blob_attr *cur, *dup;
struct list_data data = { .buf = &cl->dispatch.ubus.buf, .verbose = false };
};
struct blob_attr *tb[4];
+ if (!d->params || blobmsg_type(d->params) != BLOBMSG_TYPE_ARRAY)
+ return;
+
blobmsg_parse_array(data_policy, ARRAY_SIZE(data_policy), tb,
blobmsg_data(d->params), blobmsg_data_len(d->params));
goto error;
}
- uh_ubus_send_request(cl, obj, data.sid, data.data);
+ uh_ubus_send_request(cl, data.sid, data.data);
goto out;
}
else if (!strcmp(data.method, "list")) {
- uh_ubus_send_list(cl, obj, data.params);
+ uh_ubus_send_list(cl, data.params);
goto out;
}
else {