From fae817031dbca39bd94e0448f3d12ecdc1914d86 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 7 Mar 2016 12:54:55 +0000 Subject: [PATCH] [Feature] Add map:get_proto lua API method --- src/lua/lua_map.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c index fe8f6a836..1f7ceb194 100644 --- a/src/lua/lua_map.c +++ b/src/lua/lua_map.c @@ -47,9 +47,21 @@ LUA_FUNCTION_DEF (map, get_key); */ LUA_FUNCTION_DEF (map, is_signed); +/*** + * @method map:get_proto() + * Returns protocol of map as string: + * + * - `http`: for HTTP map + * - `file`: for file map + * - `embedded`: for manually created maps + * @return {string} string representation of the map protocol + */ +LUA_FUNCTION_DEF (map, get_proto); + static const struct luaL_reg maplib_m[] = { LUA_INTERFACE_DEF (map, get_key), LUA_INTERFACE_DEF (map, is_signed), + LUA_INTERFACE_DEF (map, get_proto), {"__tostring", rspamd_lua_class_tostring}, {NULL, NULL} }; @@ -469,6 +481,36 @@ lua_map_is_signed (lua_State *L) return 1; } +static int +lua_map_get_proto (lua_State *L) +{ + struct rspamd_lua_map *map = lua_check_map (L); + const gchar *ret = "undefined"; + + if (map != NULL) { + if (map->map == NULL) { + ret = "embedded"; + } + else { + switch (map->map->protocol) { + case MAP_PROTO_FILE: + ret = "file"; + break; + case MAP_PROTO_HTTP: + ret = "http"; + break; + } + } + } + else { + return luaL_error (L, "invalid arguments"); + } + + lua_pushstring (L, ret); + return 1; +} + + void luaopen_map (lua_State * L) { -- 2.39.5