diff --git a/src/modules/app_python/apy_kemi.c b/src/modules/app_python/apy_kemi.c index 586926428a4..1f3018b4e5c 100644 --- a/src/modules/app_python/apy_kemi.c +++ b/src/modules/app_python/apy_kemi.c @@ -1287,85 +1287,104 @@ PyObject *sr_apy_kemi_exec_func_ex(sr_kemi_t *ket, PyObject *self, } break; case 3: - if(ket->ptypes[0]==SR_KEMIP_INT) { - if(ket->ptypes[1]==SR_KEMIP_INT) { - if(ket->ptypes[2]==SR_KEMIP_INT) { - /* nnn */ - ret = ((sr_kemi_fmnnn_f)(ket->func))(lmsg, - vps[0].n, vps[1].n, vps[2].n); - return sr_kemi_apy_return_int(ket, ret); - } else if(ket->ptypes[2]==SR_KEMIP_STR) { - /* nns */ - ret = ((sr_kemi_fmnns_f)(ket->func))(lmsg, - vps[0].n, vps[1].n, &vps[2].s); - return sr_kemi_apy_return_int(ket, ret); - } else { - LM_ERR("invalid parameters for: %.*s\n", - fname.len, fname.s); - return sr_kemi_apy_return_false(); - } - } else if(ket->ptypes[1]==SR_KEMIP_STR) { - if(ket->ptypes[2]==SR_KEMIP_INT) { - /* nsn */ - ret = ((sr_kemi_fmnsn_f)(ket->func))(lmsg, - vps[0].n, &vps[1].s, vps[2].n); - return sr_kemi_apy_return_int(ket, ret); - } else if(ket->ptypes[2]==SR_KEMIP_STR) { - /* nss */ - ret = ((sr_kemi_fmnss_f)(ket->func))(lmsg, - vps[0].n, &vps[1].s, &vps[2].s); - return sr_kemi_apy_return_int(ket, ret); - } else { - LM_ERR("invalid parameters for: %.*s\n", - fname.len, fname.s); - return sr_kemi_apy_return_false(); - } + 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))(lmsg, + &vps[0].s, &vps[1].s, &vps[2].s); + return sr_kemi_apy_return_xval(ket, xret); } else { - LM_ERR("invalid parameters for: %.*s\n", - fname.len, fname.s); - return sr_kemi_apy_return_false(); + ret = ((sr_kemi_fmsss_f)(ket->func))(lmsg, + &vps[0].s, &vps[1].s, &vps[2].s); + return sr_kemi_apy_return_int(ket, ret); } - } else if(ket->ptypes[0]==SR_KEMIP_STR) { - if(ket->ptypes[1]==SR_KEMIP_INT) { - if(ket->ptypes[2]==SR_KEMIP_INT) { - /* snn */ - ret = ((sr_kemi_fmsnn_f)(ket->func))(lmsg, - &vps[0].s, vps[1].n, vps[2].n); - return sr_kemi_apy_return_int(ket, ret); - } else if(ket->ptypes[2]==SR_KEMIP_STR) { - /* sns */ - ret = ((sr_kemi_fmsns_f)(ket->func))(lmsg, - &vps[0].s, vps[1].n, &vps[2].s); - return sr_kemi_apy_return_int(ket, ret); - } else { - LM_ERR("invalid parameters for: %.*s\n", - fname.len, fname.s); - return sr_kemi_apy_return_false(); - } - } else if(ket->ptypes[1]==SR_KEMIP_STR) { - if(ket->ptypes[2]==SR_KEMIP_INT) { - /* ssn */ - ret = ((sr_kemi_fmssn_f)(ket->func))(lmsg, - &vps[0].s, &vps[1].s, vps[2].n); - return sr_kemi_apy_return_int(ket, ret); - } else if(ket->ptypes[2]==SR_KEMIP_STR) { - /* sss */ - ret = ((sr_kemi_fmsss_f)(ket->func))(lmsg, - &vps[0].s, &vps[1].s, &vps[2].s); - return sr_kemi_apy_return_int(ket, ret); - } else { - LM_ERR("invalid parameters for: %.*s\n", - fname.len, fname.s); - return sr_kemi_apy_return_false(); - } + } 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))(lmsg, + &vps[0].s, &vps[1].s, vps[2].n); + return sr_kemi_apy_return_xval(ket, xret); } else { - LM_ERR("invalid parameters for: %.*s\n", - fname.len, fname.s); - return sr_kemi_apy_return_false(); + ret = ((sr_kemi_fmssn_f)(ket->func))(lmsg, + &vps[0].s, &vps[1].s, vps[2].n); + return sr_kemi_apy_return_int(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))(lmsg, + &vps[0].s, vps[1].n, &vps[2].s); + return sr_kemi_apy_return_xval(ket, xret); + } else { + ret = ((sr_kemi_fmsns_f)(ket->func))(lmsg, + &vps[0].s, vps[1].n, &vps[2].s); + return sr_kemi_apy_return_int(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))(lmsg, + &vps[0].s, vps[1].n, vps[2].n); + return sr_kemi_apy_return_xval(ket, xret); + } else { + ret = ((sr_kemi_fmsnn_f)(ket->func))(lmsg, + &vps[0].s, vps[1].n, vps[2].n); + return sr_kemi_apy_return_int(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))(lmsg, + vps[0].n, &vps[1].s, &vps[2].s); + return sr_kemi_apy_return_xval(ket, xret); + } else { + ret = ((sr_kemi_fmnss_f)(ket->func))(lmsg, + vps[0].n, &vps[1].s, &vps[2].s); + return sr_kemi_apy_return_int(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))(lmsg, + vps[0].n, &vps[1].s, vps[2].n); + return sr_kemi_apy_return_xval(ket, xret); + } else { + ret = ((sr_kemi_fmnsn_f)(ket->func))(lmsg, + vps[0].n, &vps[1].s, vps[2].n); + return sr_kemi_apy_return_int(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))(lmsg, + vps[0].n, vps[1].n, &vps[2].s); + return sr_kemi_apy_return_xval(ket, xret); + } else { + ret = ((sr_kemi_fmnns_f)(ket->func))(lmsg, + vps[0].n, vps[1].n, &vps[2].s); + return sr_kemi_apy_return_int(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))(lmsg, + vps[0].n, vps[1].n, vps[2].n); + return sr_kemi_apy_return_xval(ket, xret); + } else { + ret = ((sr_kemi_fmnnn_f)(ket->func))(lmsg, + vps[0].n, vps[1].n, vps[2].n); + return sr_kemi_apy_return_int(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 sr_kemi_apy_return_false(); } break;