/* * 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 #include "datatypes.h" #include "log.h" #include "l_log.h" static int l_log_init(lua_State *L) { log_init(); return 0; } static int l_log_close(lua_State *L) { log_close(); return 0; } static int l_log_add_target(lua_State *L) { int ret = log_add_target(luaL_checkstring(L,1)); if(ret) { lua_pushboolean(L, 0); switch(ret) { case -2: lua_pushstring(L, "memory error at log_add_target"); break; case -3: lua_pushstring(L, "unknown log target"); break; case -4: lua_pushstring(L, "this log target is only allowed once"); break; default: lua_pushstring(L, "syntax error"); break; } return 2; } lua_pushboolean(L, 1); return 1; } static int l_log_printf(lua_State *L) { int numargs = lua_gettop(L); if(numargs < 2) return luaL_error(L, "log.printf too few arguments"); if(numargs > 2) { lua_getglobal(L, "string"); lua_pushliteral(L, "format"); lua_gettable(L, -2); lua_insert(L, 2); lua_remove(L, -1); lua_call(L, numargs - 1, 1); } log_prio_t prio = luaL_checkinteger(L,1); log_printf(prio, "%s", luaL_checkstring(L, 2)); return 0; } static const struct luaL_Reg log_funcs [] = { { "init", l_log_init }, { "close", l_log_close }, { "add_target", l_log_add_target }, { "printf", l_log_printf }, { NULL, NULL } }; LUALIB_API int luaopen_log(lua_State *L) { #if LUA_VERSION_NUM > 501 lua_newtable(L); luaL_setfuncs(L, log_funcs, 0); lua_pushvalue(L, -1); lua_setglobal(L, LUA_LOGLIBNAME); #else luaL_register(L, LUA_LOGLIBNAME, log_funcs); #endif lua_pushliteral(L, "ERROR"); lua_pushinteger(L, ERROR); lua_settable(L, -3); lua_pushliteral(L, "WARNING"); lua_pushinteger(L, WARNING); lua_settable(L, -3); lua_pushliteral(L, "NOTICE"); lua_pushinteger(L, NOTICE); lua_settable(L, -3); lua_pushliteral(L, "INFO"); lua_pushinteger(L, INFO); lua_settable(L, -3); lua_pushliteral(L, "DEBUG"); lua_pushinteger(L, DEBUG); lua_settable(L, -3); return 1; }