summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasily Goldobin <vasily@lynxtech.ru>2016-11-16 20:26:13 +0500
committerJohn Crispin <john@phrozen.org>2016-11-21 11:27:05 +0100
commitd009a084735c7e0bca28ca05919fa9c60007f314 (patch)
treec82ea79afb91f675e01579c71f0a51c566b03e3a
parentfd61773031402728098800c67f38f83ee04977ad (diff)
downloadubus-d009a084735c7e0bca28ca05919fa9c60007f314.tar.gz
lua: add 'defer_request' and 'complete_deferred_request' functions
Add Lua bindings for 'ubus_defer_request' and 'ubus_complete_deferred_request' functions with sample code. Signed-off-by: Vasily Goldobin <vasily@lynxtech.ru>
-rwxr-xr-xlua/test.lua12
-rw-r--r--lua/ubus.c22
2 files changed, 34 insertions, 0 deletions
diff --git a/lua/test.lua b/lua/test.lua
index d24ac6e..277956a 100755
--- a/lua/test.lua
+++ b/lua/test.lua
@@ -34,6 +34,18 @@ local my_method = {
conn:reply(req, {message="foo2"});
print("Call to function 'hello1'")
end, {id = ubus.INT32, msg = ubus.STRING }
+ },
+ deferred = {
+ function(req)
+ conn:reply(req, {message="wait for it"})
+ local def_req = conn:defer_request(req)
+ uloop.timer(function()
+ conn:reply(def_req, {message="done"})
+ conn:complete_deferred_request(def_req, 0)
+ print("Deferred request complete")
+ end, 2000)
+ print("Call to function 'deferred'")
+ end, {}
}
}
}
diff --git a/lua/ubus.c b/lua/ubus.c
index f59af90..74a15b0 100644
--- a/lua/ubus.c
+++ b/lua/ubus.c
@@ -352,6 +352,26 @@ static int ubus_lua_reply(lua_State *L)
return 0;
}
+static int ubus_lua_defer_request(lua_State *L)
+{
+ struct ubus_lua_connection *c = luaL_checkudata(L, 1, METANAME);
+ struct ubus_request_data *req = lua_touserdata(L, 2);
+ struct ubus_request_data *new_req = lua_newuserdata(L, sizeof(struct ubus_request_data));
+ ubus_defer_request(c->ctx, req, new_req);
+
+ return 1;
+}
+
+static int ubus_lua_complete_deferred_request(lua_State *L)
+{
+ struct ubus_lua_connection *c = luaL_checkudata(L, 1, METANAME);
+ struct ubus_request_data *req = lua_touserdata(L, 2);
+ int ret = luaL_checkinteger(L, 3);
+ ubus_complete_deferred_request(c->ctx, req, ret);
+
+ return 0;
+}
+
static int ubus_lua_load_methods(lua_State *L, struct ubus_method *m)
{
struct blobmsg_policy *p;
@@ -920,6 +940,8 @@ static const luaL_Reg ubus[] = {
{ "add", ubus_lua_add },
{ "notify", ubus_lua_notify },
{ "reply", ubus_lua_reply },
+ { "defer_request", ubus_lua_defer_request },
+ { "complete_deferred_request", ubus_lua_complete_deferred_request },
{ "signatures", ubus_lua_signatures },
{ "call", ubus_lua_call },
{ "close", ubus_lua__gc },