/* * anylike * * anylike is an IKEv2 Implementation written in Lua and C. It's main * design goal is to provide anytun and uanytun or any other SATP * implementation with a key exchange mechanism but it should also be * possible to use anylike as key exchange daemon for IPSec security * associations. The use of Lua guarantees that anylike is easily * portable to many platforms including very small ones like wireless * routers. * * * Copyright (C) 2009-2010 Markus Grueneis * Christian Pointner * * This file is part of anylike. * * anylike 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 3 of the License, or * any later version. * * anylike 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 anylike. If not, see . */ #include #include #include "sig_handler.h" #include "l_sig_handler.h" static int l_signal_getfd(lua_State *L) { if(!lua_istable(L, -1)) luaL_error(L, "can't retreive signal fd"); lua_pushliteral(L, "fd"); lua_gettable(L, -2); return 1; } static int l_signal_dirty(lua_State *L) { lua_pushboolean(L, 0); return 1; } static int l_signal_init(lua_State *L) { int sig_fd = signal_init(); if(sig_fd < 0) luaL_error(L, "error at signal init"); lua_newtable(L); lua_pushliteral(L, "fd"); lua_pushinteger(L, sig_fd); lua_settable(L, -3); lua_pushliteral(L, "getfd"); lua_pushcfunction(L, l_signal_getfd); lua_settable(L, -3); lua_pushliteral(L, "dirty"); lua_pushcfunction(L, l_signal_dirty); lua_settable(L, -3); return 1; } static int l_signal_stop(lua_State *L) { signal_stop(); return 0; } static int l_signal_handle(lua_State *L) { int ret = signal_handle(); lua_pushinteger(L, ret); return 1; } static const struct luaL_Reg signal_funcs [] = { { "init", l_signal_init }, { "stop", l_signal_stop }, { "handle", l_signal_handle }, { NULL, NULL } }; LUALIB_API int luaopen_signal(lua_State *L) { #if LUA_VERSION_NUM > 501 lua_newtable(L); luaL_setfuncs(L, signal_funcs, 0); lua_pushvalue(L, -1); lua_setglobal(L, LUA_SIGNALLIBNAME); #else luaL_register(L, LUA_SIGNALLIBNAME, signal_funcs); #endif return 1; }