瀏覽代碼

app_python: added script to generate the files for static exports table

Daniel-Constantin Mierla 9 年之前
父節點
當前提交
dbc2719f09
共有 1 個文件被更改,包括 145 次插入0 次删除
  1. 145 0
      modules/app_python/utils/app_python_ctl

+ 145 - 0
modules/app_python/utils/app_python_ctl

@@ -0,0 +1,145 @@
+#!/bin/bash
+
+# generate the .h file
+
+KEMI_MAX_SIZE=1024
+
+cat > ../apy_kemi_export.h <<EOF
+/**
+ * Copyright (C) 2016 Daniel-Constantin Mierla (asipto.com)
+ *
+ * This file is part of Kamailio, a free SIP server.
+ *
+ * Kamailio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version
+ *
+ * Kamailio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+/**
+ * this file is generated - do not edit
+ */
+
+#ifndef __APY_KEMI_FLIB_H__
+#define __APY_KEMI_FLIB_H__
+
+#include <Python.h>
+#include "../../kemi.h"
+
+#define SR_APY_KEMI_EXPORT_SIZE	${KEMI_MAX_SIZE}
+
+typedef struct sr_apy_kemi_export {
+	PyCFunction pfunc;
+	sr_kemi_t *ket;
+} sr_apy_kemi_export_t;
+
+sr_kemi_t *sr_apy_kemi_export_get(int idx);
+PyCFunction sr_apy_kemi_export_associate(sr_kemi_t *ket);
+
+#endif
+EOF
+
+# generate the .c file
+
+cat > ../apy_kemi_export.c <<EOF
+/**
+ * Copyright (C) 2016 Daniel-Constantin Mierla (asipto.com)
+ *
+ * This file is part of Kamailio, a free SIP server.
+ *
+ * Kamailio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version
+ *
+ * Kamailio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+/**
+ * this file is generated - do not edit
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <Python.h>
+
+#include "../../dprint.h"
+
+#include "apy_kemi.h"
+#include "apy_kemi_export.h"
+
+EOF
+
+CEND=${KEMI_MAX_SIZE}
+
+for (( c=0; c<CEND; c++ )); do
+	echo >>../apy_kemi_export.c
+	echo "/**" >>../apy_kemi_export.c
+	echo " *" >>../apy_kemi_export.c
+	echo " */" >>../apy_kemi_export.c
+	echo "static PyObject *sr_apy_kemi_exec_func_${c}(PyObject *self, PyObject *args)" >>../apy_kemi_export.c
+	echo "{" >>../apy_kemi_export.c
+	echo "	return sr_apy_kemi_exec_func(self, args, ${c});" >>../apy_kemi_export.c
+	echo "}" >>../apy_kemi_export.c
+done
+
+echo >>../apy_kemi_export.c
+echo "/**" >>../apy_kemi_export.c
+echo " *" >>../apy_kemi_export.c
+echo " */" >>../apy_kemi_export.c
+
+echo "static sr_apy_kemi_export_t _sr_apy_kemi_export_list[] = {" >>../apy_kemi_export.c
+for (( c=0; c<CEND; c++ )); do
+	echo "	{ sr_apy_kemi_exec_func_${c}, NULL}," >>../apy_kemi_export.c
+done
+echo "	{NULL, NULL}" >>../apy_kemi_export.c
+echo "};" >>../apy_kemi_export.c
+
+cat >> ../apy_kemi_export.c <<EOF
+
+/**
+ *
+ */
+sr_kemi_t *sr_apy_kemi_export_get(int idx)
+{
+	if(idx<0 || idx>=SR_APY_KEMI_EXPORT_SIZE)
+		return NULL;
+	return _sr_apy_kemi_export_list[idx].ket;
+}
+
+/**
+ *
+ */
+PyCFunction sr_apy_kemi_export_associate(sr_kemi_t *ket)
+{
+	int i;
+	for(i=0; i<SR_APY_KEMI_EXPORT_SIZE; i++) {
+		if(_sr_apy_kemi_export_list[i].ket==NULL) {
+			_sr_apy_kemi_export_list[i].ket = ket;
+			return _sr_apy_kemi_export_list[i].pfunc;
+		}
+	}
+	LM_ERR("no more indexing slots\n");
+	return NULL;
+}
+EOF