[LEDE-DEV] [PATCH] lua: add 'defer_request' and 'complete_deferred_request' functions

Vasily Goldobin vasily at lynxtech.ru
Wed Nov 16 07:26:13 PST 2016


Add Lua bindings for 'ubus_defer_request' and 'ubus_complete_deferred_request' functions with sample code.

Signed-off-by: Vasily Goldobin <vasily at lynxtech.ru>
---
 lua/test.lua | 12 ++++++++++++
 lua/ubus.c   | 22 ++++++++++++++++++++++
 2 files changed, 34 insertions(+)

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 },
-- 
2.5.5




More information about the Lede-dev mailing list