diff options
author | Christian Pointner <equinox@helsinki.at> | 2010-01-11 20:37:13 (GMT) |
---|---|---|
committer | Christian Pointner <equinox@helsinki.at> | 2010-01-11 20:37:13 (GMT) |
commit | d035636d833c393f86eb4eacb5c5934c94eb1a06 (patch) | |
tree | 3b4c7e7933878d0a0f47e11bbd2edf075801969c /l_log.c | |
parent | 16797549c7788b05583f241e5c788a666debf6d0 (diff) |
added luaclient
Diffstat (limited to 'l_log.c')
-rw-r--r-- | l_log.c | 120 |
1 files changed, 120 insertions, 0 deletions
@@ -0,0 +1,120 @@ +/* + * 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 <gimpf@anylike.org> + * Christian Pointner <equinox@anylike.org> + * + * 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 <http://www.gnu.org/licenses/>. + */ + +#include <lua.h> +#include <lauxlib.h> + +#include <stdlib.h> + +#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_checkint(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) +{ + luaL_register(L, LUA_LOGLIBNAME, log_funcs); + 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; +} |