[sr-dev] git:master:24a68b3d: app_python: rework to use a static exports table

Daniel-Constantin Mierla miconda at gmail.com
Tue Apr 19 10:25:19 CEST 2016


Module: kamailio
Branch: master
Commit: 24a68b3d7c52093391dcd8124d3642c04e3798e4
URL: https://github.com/kamailio/kamailio/commit/24a68b3d7c52093391dcd8124d3642c04e3798e4

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2016-04-19T09:17:06+02:00

app_python: rework to use a static exports table

- not possible to set the object index function

---

Modified: modules/app_python/apy_kemi.c
Modified: modules/app_python/apy_kemi.h

---

Diff:  https://github.com/kamailio/kamailio/commit/24a68b3d7c52093391dcd8124d3642c04e3798e4.diff
Patch: https://github.com/kamailio/kamailio/commit/24a68b3d7c52093391dcd8124d3642c04e3798e4.patch

---

diff --git a/modules/app_python/apy_kemi.c b/modules/app_python/apy_kemi.c
index 0067e54..5f3c7df 100644
--- a/modules/app_python/apy_kemi.c
+++ b/modules/app_python/apy_kemi.c
@@ -30,6 +30,7 @@
 #include "../../mem/pkg.h"
 
 #include "python_exec.h"
+#include "apy_kemi_export.h"
 #include "apy_kemi.h"
 
 /**
@@ -90,13 +91,10 @@ int sr_kemi_config_engine_python(sip_msg_t *msg, int rtype, str *rname)
 /**
  *
  */
-static PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args)
+PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args, int idx)
 {
-	str mname = str_init("");
-	int midx = 0;
-	str fname = str_init("");
+	str fname;
 	int i;
-	PyTypeObject *pto;
 	sr_kemi_t *ket = NULL;
 	sr_kemi_val_t vps[SR_KEMI_PARAMS_MAX];
 	sr_apy_env_t *env_P;
@@ -109,26 +107,19 @@ static PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args)
 		return Py_None;
 	}
 
-	if(self!=NULL) {
-		pto = Py_TYPE(self);
-		if(pto==NULL) {
-			Py_INCREF(Py_None);
-			return Py_None;
-		}
-		LM_DBG("execution of method: %s\n", pto->tp_name);
-		fname.s = (char*)pto->tp_name;
-		fname.len = strlen(fname.s);
-	} else {
-		fname.s = "[test]";
-		fname.len = strlen(fname.s);
-		LM_DBG("execution of method: %.*s\n", fname.len, fname.s);
-	}
-
-	ket = sr_kemi_lookup(&mname, midx, &fname);
+	ket = sr_apy_kemi_export_get(idx);
 	if(ket==NULL) {
 		Py_INCREF(Py_None);
 		return Py_None;
 	}
+	if(ket->mname.len>0) {
+		LM_DBG("execution of method: %.*s\n", ket->fname.len, ket->fname.s);
+	} else {
+		LM_DBG("execution of method: %.*s.%.*s\n",
+				ket->mname.len, ket->mname.s,
+				ket->fname.len, ket->fname.s);
+	}
+	fname = ket->fname;
 
 	memset(vps, 0, SR_KEMI_PARAMS_MAX*sizeof(sr_kemi_val_t));
 	for(i=0; i<SR_KEMI_PARAMS_MAX; i++) {
@@ -174,6 +165,30 @@ PyMethodDef *_sr_KSRMethods = NULL;
 /**
  *
  */
+static int sr_apy_kemi_f_dbg(sip_msg_t *msg, str *txt)
+{
+	if(txt!=NULL && txt->s!=NULL)
+		LM_DBG("%.*s", txt->len, txt->s);
+	return 0;
+}
+
+/**
+ *
+ */
+static sr_kemi_t _sr_apy_kemi_test[] = {
+	{ str_init("test"), str_init("dbg"),
+		SR_KEMIP_NONE, sr_apy_kemi_f_dbg,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+
+	{ {0, 0}, {0, 0}, 0, NULL, { 0, 0, 0, 0, 0, 0 } }
+};
+
+
+/**
+ *
+ */
 int sr_apy_init_ksr(void)
 {
 	_sr_KSRMethods = pkg_malloc(SR_APY_KSR_METHOS_SIZE * sizeof(PyMethodDef));
@@ -183,8 +198,8 @@ int sr_apy_init_ksr(void)
 	}
 	memset(_sr_KSRMethods, 0, SR_APY_KSR_METHOS_SIZE * sizeof(PyMethodDef));
 
-	_sr_KSRMethods[0].ml_name = "test";
-	_sr_KSRMethods[0].ml_meth = (PyCFunction)sr_apy_kemi_exec_func;
+	_sr_KSRMethods[0].ml_name = _sr_apy_kemi_test[0].fname.s;
+	_sr_KSRMethods[0].ml_meth = sr_apy_kemi_export_associate(&_sr_apy_kemi_test[0]);
 	_sr_KSRMethods[0].ml_flags = METH_VARARGS;
 	_sr_KSRMethods[0].ml_doc = "Kamailio function";
 
diff --git a/modules/app_python/apy_kemi.h b/modules/app_python/apy_kemi.h
index be74aa1..8840cd2 100644
--- a/modules/app_python/apy_kemi.h
+++ b/modules/app_python/apy_kemi.h
@@ -22,10 +22,13 @@
 #ifndef __APY_KEMI_H__
 #define __APY_KEMI_H__
 
+#include <Python.h>
 #include "../../parser/msg_parser.h"
 
 int sr_apy_init_ksr(void);
 void sr_apy_destroy_ksr(void);
 int sr_kemi_config_engine_python(sip_msg_t *msg, int rtype, str *rname);
 
+PyObject *sr_apy_kemi_exec_func(PyObject *self, PyObject *args, int idx);
+
 #endif




More information about the sr-dev mailing list