app_lua: added utils script to generate c functions for kemi exports
authorDaniel-Constantin Mierla <miconda@gmail.com>
Thu, 28 Apr 2016 07:24:09 +0000 (09:24 +0200)
committerDaniel-Constantin Mierla <miconda@gmail.com>
Thu, 28 Apr 2016 07:24:09 +0000 (09:24 +0200)
modules/app_lua/utils/app_lua_ctl [new file with mode: 0755]

diff --git a/modules/app_lua/utils/app_lua_ctl b/modules/app_lua/utils/app_lua_ctl
new file mode 100755 (executable)
index 0000000..6a85943
--- /dev/null
@@ -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