From e5813d980ed3eaab82435322002dac64bc19b78b Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Wed, 13 Apr 2016 16:36:45 +0200 Subject: [PATCH] app_lua: implemented execution of kemi api functions with 3 params --- modules/app_lua/app_lua_sr.c | 76 ++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/modules/app_lua/app_lua_sr.c b/modules/app_lua/app_lua_sr.c index 6cb9ff00f94..b7bb39cb62c 100644 --- a/modules/app_lua/app_lua_sr.c +++ b/modules/app_lua/app_lua_sr.c @@ -1542,9 +1542,79 @@ int sr_kemi_exec_func(lua_State* L, str *mname, int midx, str *fname) } break; case 3: - LM_ERR("invalid parameters for: %.*s\n", - fname->len, fname->s); - return app_lua_return_false(L); + if(ket->ptypes[0]==SR_KEMIP_INT) { + if(ket->ptypes[1]==SR_KEMIP_INT) { + if(ket->ptypes[2]==SR_KEMIP_INT) { + ret = ((sr_kemi_fmnnn_f)(ket->func))(env_L->msg, + vps[0].n, vps[1].n, vps[2].n); + return sr_kemi_return(L, ket, ret); + } else if(ket->ptypes[2]==SR_KEMIP_STR) { + ret = ((sr_kemi_fmnns_f)(ket->func))(env_L->msg, + vps[0].n, vps[1].n, &vps[2].s); + return sr_kemi_return(L, ket, ret); + } else { + LM_ERR("invalid parameters for: %.*s\n", + fname->len, fname->s); + return app_lua_return_false(L); + } + } else if(ket->ptypes[1]==SR_KEMIP_STR) { + if(ket->ptypes[2]==SR_KEMIP_INT) { + ret = ((sr_kemi_fmnsn_f)(ket->func))(env_L->msg, + vps[0].n, &vps[1].s, vps[2].n); + return sr_kemi_return(L, ket, ret); + } else if(ket->ptypes[2]==SR_KEMIP_STR) { + ret = ((sr_kemi_fmnss_f)(ket->func))(env_L->msg, + vps[0].n, &vps[1].s, &vps[2].s); + return sr_kemi_return(L, ket, ret); + } else { + LM_ERR("invalid parameters for: %.*s\n", + fname->len, fname->s); + return app_lua_return_false(L); + } + } else { + LM_ERR("invalid parameters for: %.*s\n", + fname->len, fname->s); + return app_lua_return_false(L); + } + } else if(ket->ptypes[0]==SR_KEMIP_STR) { + if(ket->ptypes[1]==SR_KEMIP_INT) { + if(ket->ptypes[2]==SR_KEMIP_INT) { + ret = ((sr_kemi_fmsnn_f)(ket->func))(env_L->msg, + &vps[0].s, vps[1].n, vps[2].n); + return sr_kemi_return(L, ket, ret); + } else if(ket->ptypes[2]==SR_KEMIP_STR) { + ret = ((sr_kemi_fmsns_f)(ket->func))(env_L->msg, + &vps[0].s, vps[1].n, &vps[2].s); + return sr_kemi_return(L, ket, ret); + } else { + LM_ERR("invalid parameters for: %.*s\n", + fname->len, fname->s); + return app_lua_return_false(L); + } + } else if(ket->ptypes[1]==SR_KEMIP_STR) { + if(ket->ptypes[2]==SR_KEMIP_INT) { + ret = ((sr_kemi_fmssn_f)(ket->func))(env_L->msg, + &vps[0].s, &vps[1].s, vps[2].n); + return sr_kemi_return(L, ket, ret); + } else if(ket->ptypes[2]==SR_KEMIP_STR) { + ret = ((sr_kemi_fmsss_f)(ket->func))(env_L->msg, + &vps[0].s, &vps[1].s, &vps[2].s); + return sr_kemi_return(L, ket, ret); + } else { + LM_ERR("invalid parameters for: %.*s\n", + fname->len, fname->s); + return app_lua_return_false(L); + } + } else { + LM_ERR("invalid parameters for: %.*s\n", + fname->len, fname->s); + return app_lua_return_false(L); + } + } else { + LM_ERR("invalid parameters for: %.*s\n", + fname->len, fname->s); + return app_lua_return_false(L); + } break; case 4: if(ket->ptypes[0]==SR_KEMIP_STR