瀏覽代碼

app_lua: added utils script to generate c functions for kemi exports

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

+ 149 - 0
modules/app_lua/utils/app_lua_ctl

@@ -0,0 +1,149 @@
+#!/bin/bash
+
+# generate the .h file
+
+KEMI_MAX_SIZE=1024
+
+cat > ../app_lua_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 __APP_LUA_KEMI_EXPORT_H__
+#define __APP_LUA_KEMI_EXPORT_H__
+
+#include <lua.h>
+#include <lauxlib.h>
+#include <lualib.h>
+#include "../../kemi.h"
+
+#define SR_KEMI_LUA_EXPORT_SIZE	${KEMI_MAX_SIZE}
+
+typedef struct sr_kemi_lua_export {
+	lua_CFunction pfunc;
+	sr_kemi_t *ket;
+} sr_kemi_lua_export_t;
+
+sr_kemi_t *sr_kemi_lua_export_get(int idx);
+lua_CFunction sr_kemi_lua_export_associate(sr_kemi_t *ket);
+
+#endif
+EOF
+
+# generate the .c file
+
+cat > ../app_lua_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 <lua.h>
+#include <lauxlib.h>
+#include <lualib.h>
+
+#include "../../dprint.h"
+
+#include "app_lua_sr.h"
+#include "app_lua_kemi_export.h"
+
+EOF
+
+CEND=${KEMI_MAX_SIZE}
+
+for (( c=0; c<CEND; c++ )); do
+	echo >>../app_lua_kemi_export.c
+	echo "/**" >>../app_lua_kemi_export.c
+	echo " *" >>../app_lua_kemi_export.c
+	echo " */" >>../app_lua_kemi_export.c
+	echo "static int sr_kemi_lua_exec_func_${c}(lua_State *L)" >>../app_lua_kemi_export.c
+	echo "{" >>../app_lua_kemi_export.c
+	echo "	return sr_kemi_lua_exec_func(L, ${c});" >>../app_lua_kemi_export.c
+	echo "}" >>../app_lua_kemi_export.c
+done
+
+echo >>../app_lua_kemi_export.c
+echo "/**" >>../app_lua_kemi_export.c
+echo " *" >>../app_lua_kemi_export.c
+echo " */" >>../app_lua_kemi_export.c
+
+echo "static sr_kemi_lua_export_t _sr_kemi_lua_export_list[] = {" >>../app_lua_kemi_export.c
+for (( c=0; c<CEND; c++ )); do
+	echo "	{ sr_kemi_lua_exec_func_${c}, NULL}," >>../app_lua_kemi_export.c
+done
+echo "	{NULL, NULL}" >>../app_lua_kemi_export.c
+echo "};" >>../app_lua_kemi_export.c
+
+cat >> ../app_lua_kemi_export.c <<EOF
+
+/**
+ *
+ */
+sr_kemi_t *sr_kemi_lua_export_get(int idx)
+{
+	if(idx<0 || idx>=SR_KEMI_LUA_EXPORT_SIZE)
+		return NULL;
+	return _sr_kemi_lua_export_list[idx].ket;
+}
+
+/**
+ *
+ */
+lua_CFunction sr_kemi_lua_export_associate(sr_kemi_t *ket)
+{
+	int i;
+	for(i=0; i<SR_KEMI_LUA_EXPORT_SIZE; i++) {
+		if(_sr_kemi_lua_export_list[i].ket==NULL) {
+			_sr_kemi_lua_export_list[i].ket = ket;
+			return _sr_kemi_lua_export_list[i].pfunc;
+		}
+	}
+	LM_ERR("no more indexing slots\n");
+	return NULL;
+}
+EOF