Jelajahi Sumber

app_lua: exported ndb_mongodb cmd to lua

Daniel-Constantin Mierla 10 tahun lalu
induk
melakukan
38bf1ef014
1 mengubah file dengan 66 tambahan dan 0 penghapusan
  1. 66 0
      modules/app_lua/app_lua_exp.c

+ 66 - 0
modules/app_lua/app_lua_exp.c

@@ -55,6 +55,7 @@
 #include "../../modules/cfgutils/api.h"
 #include "../../modules/tmx/api.h"
 #include "../../modules/mqueue/api.h"
+#include "../../modules/ndb_mongodb/api.h"
 
 #include "app_lua_api.h"
 
@@ -82,6 +83,7 @@
 #define SR_LUA_EXP_MOD_CFGUTILS   (1<<21)
 #define SR_LUA_EXP_MOD_TMX        (1<<22)
 #define SR_LUA_EXP_MOD_MQUEUE     (1<<23)
+#define SR_LUA_EXP_MOD_NDB_MONGODB (1<<24)
 
 /**
  *
@@ -209,6 +211,12 @@ static tmx_api_t _lua_tmxb;
  */
 static mq_api_t _lua_mqb;
 
+/**
+ * mqueue
+ */
+static ndb_mongodb_api_t _lua_ndb_mongodbb;
+
+
 /**
  *
  */
@@ -2601,6 +2609,48 @@ static const luaL_Reg _sr_mqueue_Map [] = {
 	{NULL, NULL}
 };
 
+/**
+ *
+ */
+static int lua_sr_ndb_mongodb_cmd(lua_State *L)
+{
+	int ret;
+	str param[6];
+
+	if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_NDB_MONGODB))
+	{
+		LM_WARN("weird: ndb_mongodb function executed but module not registered\n");
+		return app_lua_return_error(L);
+	}
+	if(lua_gettop(L)!=5)
+	{
+		LM_WARN("invalid number of parameters from Lua\n");
+		return app_lua_return_error(L);
+	}
+
+	param[0].s = (char *) lua_tostring(L, -5);
+	param[0].len = strlen(param[0].s);
+	param[1].s = (char *) lua_tostring(L, -4);
+	param[1].len = strlen(param[1].s);
+	param[2].s = (char *) lua_tostring(L, -3);
+	param[2].len = strlen(param[2].s);
+	param[3].s = (char *) lua_tostring(L, -2);
+	param[3].len = strlen(param[3].s);
+	param[4].s = (char *) lua_tostring(L, -1);
+	param[4].len = strlen(param[4].s);
+
+	ret = _lua_ndb_mongodbb.cmd(&param[0], &param[1], &param[2], &param[3], &param[4]);
+	return app_lua_return_int(L, ret);
+}
+
+/**
+ *
+ */
+static const luaL_Reg _sr_ndb_mongodb_Map [] = {
+	{"cmd", lua_sr_ndb_mongodb_cmd},
+	{NULL, NULL}
+};
+
 /**
  *
  */
@@ -2852,6 +2902,17 @@ int lua_sr_exp_init_mod(void)
 		}
 		LM_DBG("loaded mqueue api\n");
 	}
+	if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_NDB_MONGODB)
+	{
+		/* bind the NDB_MONGODB API */
+		if (ndb_mongodb_load_api(&_lua_ndb_mongodbb) < 0)
+		{
+			LM_ERR("cannot bind to NDB_MONGODB API\n");
+			return -1;
+		}
+		LM_DBG("loaded ndb_mongodb api\n");
+	}
+
 	return 0;
 }
 
@@ -2937,6 +2998,9 @@ int lua_sr_exp_register_mod(char *mname)
 	} else 	if(len==6 && strcmp(mname, "mqueue")==0) {
 		_sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_MQUEUE;
 		return 0;
+	} else 	if(len==11 && strcmp(mname, "ndb_mongodb")==0) {
+		_sr_lua_exp_reg_mods |= SR_LUA_EXP_MOD_NDB_MONGODB;
+		return 0;
 	}
 
 	return -1;
@@ -2995,5 +3059,7 @@ void lua_sr_exp_openlibs(lua_State *L)
 		luaL_openlib(L, "sr.tmx", _sr_tmx_Map,                0);
 	if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_MQUEUE)
 		luaL_openlib(L, "sr.mq", _sr_mqueue_Map,              0);
+	if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_NDB_MONGODB)
+		luaL_openlib(L, "sr.ndb_mongodb", _sr_ndb_mongodb_Map, 0);
 }