Skip to content

Commit

Permalink
app_lua: update to handle xval return for functions with 3 parameters
Browse files Browse the repository at this point in the history
- fix for functions like KSR.sqlops.sql_result_get()
  • Loading branch information
miconda committed Dec 9, 2021
1 parent 8bce8a7 commit da9eee2
Showing 1 changed file with 93 additions and 66 deletions.
159 changes: 93 additions & 66 deletions src/modules/app_lua/app_lua_api.c
Expand Up @@ -1088,77 +1088,104 @@ int sr_kemi_lua_exec_func_ex(lua_State* L, sr_kemi_t *ket, int pdelta)
}
break;
case 3:
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_lua_return_int(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_lua_return_int(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_lua_return_int(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_lua_return_int(L, ket, ret);
} else {
LM_ERR("invalid parameters for: %.*s\n",
fname->len, fname->s);
return app_lua_return_false(L);
}
if(ket->ptypes[0]==SR_KEMIP_STR
&& ket->ptypes[1]==SR_KEMIP_STR
&& ket->ptypes[2]==SR_KEMIP_STR) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmsss_f)(ket->func))(env_L->msg,
&vps[0].s, &vps[1].s, &vps[2].s);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
LM_ERR("invalid parameters for: %.*s\n",
fname->len, fname->s);
return app_lua_return_false(L);
ret = ((sr_kemi_fmsss_f)(ket->func))(env_L->msg,
&vps[0].s, &vps[1].s, &vps[2].s);
return sr_kemi_lua_return_int(L, ket, ret);
}
} 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_lua_return_int(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_lua_return_int(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_lua_return_int(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_lua_return_int(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[0]==SR_KEMIP_STR
&& ket->ptypes[1]==SR_KEMIP_STR
&& ket->ptypes[2]==SR_KEMIP_INT) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmssn_f)(ket->func))(env_L->msg,
&vps[0].s, &vps[1].s, vps[2].n);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
LM_ERR("invalid parameters for: %.*s\n",
fname->len, fname->s);
return app_lua_return_false(L);
ret = ((sr_kemi_fmssn_f)(ket->func))(env_L->msg,
&vps[0].s, &vps[1].s, vps[2].n);
return sr_kemi_lua_return_int(L, ket, ret);
}
} else if(ket->ptypes[0]==SR_KEMIP_STR
&& ket->ptypes[1]==SR_KEMIP_INT
&& ket->ptypes[2]==SR_KEMIP_STR) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmsns_f)(ket->func))(env_L->msg,
&vps[0].s, vps[1].n, &vps[2].s);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
ret = ((sr_kemi_fmsns_f)(ket->func))(env_L->msg,
&vps[0].s, vps[1].n, &vps[2].s);
return sr_kemi_lua_return_int(L, ket, ret);
}
} else if(ket->ptypes[0]==SR_KEMIP_STR
&& ket->ptypes[1]==SR_KEMIP_INT
&& ket->ptypes[2]==SR_KEMIP_INT) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmsnn_f)(ket->func))(env_L->msg,
&vps[0].s, vps[1].n, vps[2].n);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
ret = ((sr_kemi_fmsnn_f)(ket->func))(env_L->msg,
&vps[0].s, vps[1].n, vps[2].n);
return sr_kemi_lua_return_int(L, ket, ret);
}
} else if(ket->ptypes[0]==SR_KEMIP_INT
&& ket->ptypes[1]==SR_KEMIP_STR
&& ket->ptypes[2]==SR_KEMIP_STR) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmnss_f)(ket->func))(env_L->msg,
vps[0].n, &vps[1].s, &vps[2].s);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
ret = ((sr_kemi_fmnss_f)(ket->func))(env_L->msg,
vps[0].n, &vps[1].s, &vps[2].s);
return sr_kemi_lua_return_int(L, ket, ret);
}
} else if(ket->ptypes[0]==SR_KEMIP_INT
&& ket->ptypes[1]==SR_KEMIP_STR
&& ket->ptypes[2]==SR_KEMIP_INT) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmnsn_f)(ket->func))(env_L->msg,
vps[0].n, &vps[1].s, vps[2].n);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
ret = ((sr_kemi_fmnsn_f)(ket->func))(env_L->msg,
vps[0].n, &vps[1].s, vps[2].n);
return sr_kemi_lua_return_int(L, ket, ret);
}
} else if(ket->ptypes[0]==SR_KEMIP_INT
&& ket->ptypes[1]==SR_KEMIP_INT
&& ket->ptypes[2]==SR_KEMIP_STR) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmnns_f)(ket->func))(env_L->msg,
vps[0].n, vps[1].n, &vps[2].s);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
ret = ((sr_kemi_fmnns_f)(ket->func))(env_L->msg,
vps[0].n, vps[1].n, &vps[2].s);
return sr_kemi_lua_return_int(L, ket, ret);
}
} else if(ket->ptypes[0]==SR_KEMIP_INT
&& ket->ptypes[1]==SR_KEMIP_INT
&& ket->ptypes[2]==SR_KEMIP_INT) {
if(ket->rtype==SR_KEMIP_XVAL) {
xret = ((sr_kemi_xfmnnn_f)(ket->func))(env_L->msg,
vps[0].n, vps[1].n, vps[2].n);
return sr_kemi_lua_return_xval(L, ket, xret);
} else {
ret = ((sr_kemi_fmnnn_f)(ket->func))(env_L->msg,
vps[0].n, vps[1].n, vps[2].n);
return sr_kemi_lua_return_int(L, ket, ret);
}
} else {
LM_ERR("invalid parameters for: %.*s\n",
fname->len, fname->s);
LM_ERR("invalid parameters for: %.*s\n", fname->len, fname->s);
return app_lua_return_false(L);
}
break;
Expand Down

0 comments on commit da9eee2

Please sign in to comment.