[sr-dev] git:master: app_lua: several tm functions added to Lua api

Daniel-Constantin Mierla miconda at gmail.com
Wed Nov 17 13:33:54 CET 2010


Module: sip-router
Branch: master
Commit: 8ea8966228a0d15ee4ddd7ab3087d4c11a0680d0
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=8ea8966228a0d15ee4ddd7ab3087d4c11a0680d0

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Wed Nov 17 13:33:17 2010 +0100

app_lua: several tm functions added to Lua api

---

 modules/app_lua/app_lua_exp.c |  213 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 210 insertions(+), 3 deletions(-)

diff --git a/modules/app_lua/app_lua_exp.c b/modules/app_lua/app_lua_exp.c
index 9bf9fea..ae86ab2 100644
--- a/modules/app_lua/app_lua_exp.c
+++ b/modules/app_lua/app_lua_exp.c
@@ -28,6 +28,7 @@
 
 #include "../../sr_module.h"
 #include "../../dprint.h"
+#include "../../route.h"
 #include "../../ut.h"
 
 #include "../../modules/sl/sl.h"
@@ -93,7 +94,8 @@ static sl_api_t _lua_slb;
 /**
  * tm
  */
-static tm_api_t _lua_tmb;
+static tm_api_t  _lua_tmb;
+static tm_xapi_t _lua_xtmb;
 
 /**
  *
@@ -112,6 +114,11 @@ static int lua_sr_sl_send_reply (lua_State *L)
 		LM_WARN("weird: sl function executed but module not registered\n");
 		return app_lua_return_error(L);
 	}
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
 
 	code = lua_tointeger(L, -2);
 
@@ -143,6 +150,11 @@ static int lua_sr_sl_get_reply_totag (lua_State *L)
 		LM_WARN("weird: sl function executed but module not registered\n");
 		return app_lua_return_false(L);
 	}
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
 	ret = _lua_slb.get_reply_totag(env_L->msg, &txt);
 	if(ret<0)
 	{
@@ -179,6 +191,11 @@ static int lua_sr_tm_t_reply(lua_State *L)
 		LM_WARN("weird: tm function executed but module not registered\n");
 		return app_lua_return_error(L);
 	}
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
 
 	code = lua_tointeger(L, -2);
 
@@ -209,17 +226,200 @@ static int lua_sr_tm_t_relay(lua_State *L)
 		LM_WARN("weird: tm function executed but module not registered\n");
 		return app_lua_return_error(L);
 	}
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
 	ret = _lua_tmb.t_relay(env_L->msg, NULL, NULL);
 	return app_lua_return_int(L, ret);
 }
 
+/**
+ *
+ */
+static int lua_sr_tm_t_on_failure(lua_State *L)
+{
+	char *name;
+	int i;
+	sr_lua_env_t *env_L;
+
+	env_L = sr_lua_env_get();
+
+	if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
+	{
+		LM_WARN("weird: tm function executed but module not registered\n");
+		return app_lua_return_error(L);
+	}
+
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
+
+	name = (char*)lua_tostring(L, -1);
+	if(name==NULL)
+	{
+		LM_WARN("invalid parameters from Lua\n");
+		return app_lua_return_error(L);
+	}
+
+	i = route_get(&failure_rt, name);
+	if(failure_rt.rlist[i]==0)
+	{
+		LM_WARN("no actions in failure_route[%s]\n", name);
+		return app_lua_return_error(L);
+	}
+
+	_lua_xtmb.t_on_failure((unsigned int)i);
+	return app_lua_return_int(L, 1);
+}
+
+/**
+ *
+ */
+static int lua_sr_tm_t_on_branch(lua_State *L)
+{
+	char *name;
+	int i;
+	sr_lua_env_t *env_L;
+
+	env_L = sr_lua_env_get();
+
+	if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
+	{
+		LM_WARN("weird: tm function executed but module not registered\n");
+		return app_lua_return_error(L);
+	}
+
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
+
+	name = (char*)lua_tostring(L, -1);
+	if(name==NULL)
+	{
+		LM_WARN("invalid parameters from Lua\n");
+		return app_lua_return_error(L);
+	}
+
+	i = route_get(&branch_rt, name);
+	if(branch_rt.rlist[i]==0)
+	{
+		LM_WARN("no actions in branch_route[%s]\n", name);
+		return app_lua_return_error(L);
+	}
+
+	_lua_xtmb.t_on_branch((unsigned int)i);
+	return app_lua_return_int(L, 1);
+}
+
+/**
+ *
+ */
+static int lua_sr_tm_t_on_reply(lua_State *L)
+{
+	char *name;
+	int i;
+	sr_lua_env_t *env_L;
+
+	env_L = sr_lua_env_get();
+
+	if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
+	{
+		LM_WARN("weird: tm function executed but module not registered\n");
+		return app_lua_return_error(L);
+	}
+
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
+
+	name = (char*)lua_tostring(L, -1);
+	if(name==NULL)
+	{
+		LM_WARN("invalid parameters from Lua\n");
+		return app_lua_return_error(L);
+	}
+
+	i = route_get(&onreply_rt, name);
+	if(onreply_rt.rlist[i]==0)
+	{
+		LM_WARN("no actions in onreply_route[%s]\n", name);
+		return app_lua_return_error(L);
+	}
+
+	_lua_xtmb.t_on_reply((unsigned int)i);
+	return app_lua_return_int(L, 1);
+}
+
+/**
+ *
+ */
+static int lua_sr_tm_t_check_trans(lua_State *L)
+{
+	int ret;
+	sr_lua_env_t *env_L;
+
+	env_L = sr_lua_env_get();
+
+	if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
+	{
+		LM_WARN("weird: tm function executed but module not registered\n");
+		return app_lua_return_error(L);
+	}
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
+
+	ret = _lua_xtmb.t_check_trans(env_L->msg);
+	return app_lua_return_int(L, ret);
+}
+
+/**
+ *
+ */
+static int lua_sr_tm_t_is_canceled(lua_State *L)
+{
+	int ret;
+	sr_lua_env_t *env_L;
+
+	env_L = sr_lua_env_get();
+
+	if(!(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_TM))
+	{
+		LM_WARN("weird: tm function executed but module not registered\n");
+		return app_lua_return_error(L);
+	}
+	if(env_L->msg==NULL)
+	{
+		LM_WARN("invalid parameters from Lua env\n");
+		return app_lua_return_error(L);
+	}
+
+	ret = _lua_xtmb.t_is_canceled(env_L->msg);
+	return app_lua_return_int(L, ret);
+}
+
 
 /**
  *
  */
 static const luaL_reg _sr_tm_Map [] = {
-	{"t_reply", lua_sr_tm_t_reply},
-	{"t_relay", lua_sr_tm_t_relay},
+	{"t_reply",        lua_sr_tm_t_reply},
+	{"t_relay",        lua_sr_tm_t_relay},
+	{"t_on_failure",   lua_sr_tm_t_on_failure},
+	{"t_on_branch",    lua_sr_tm_t_on_branch},
+	{"t_on_reply",     lua_sr_tm_t_on_reply},
+	{"t_check_trans",  lua_sr_tm_t_check_trans},
+	{"t_is_canceled",  lua_sr_tm_t_is_canceled},
 	{NULL, NULL}
 };
 
@@ -892,6 +1092,13 @@ int lua_sr_exp_init_mod(void)
 			return -1;
 		}
 		LM_DBG("loaded tm api\n");
+		/* bind the TM XAPI */
+		if (tm_load_xapi(&_lua_xtmb) < 0)
+		{
+			LM_ERR("cannot bind to TM XAPI\n");
+			return -1;
+		}
+		LM_DBG("loaded tm xapi\n");
 	}
 	if(_sr_lua_exp_reg_mods&SR_LUA_EXP_MOD_SQLOPS)
 	{




More information about the sr-dev mailing list