]> source.dussan.org Git - rspamd.git/commitdiff
Add lua bindings for headers folding.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 8 Sep 2015 12:42:09 +0000 (13:42 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 8 Sep 2015 12:42:09 +0000 (13:42 +0100)
src/lua/lua_util.c

index 8b3a137868900c96c893343224fd211252ad0c4d..24c1bd67660df6634922e17126b9665bf8d64b69 100644 (file)
@@ -113,6 +113,16 @@ LUA_FUNCTION_DEF (util, levenshtein_distance);
  */
 LUA_FUNCTION_DEF (util, parse_addr);
 
+/***
+ * @function util.fold_header(name, value)
+ * Fold rfc822 header according to the folding rules
+ *
+ * @param {string} name name of the header
+ * @param {string} value value of the header
+ * @return {string} Folded value of the header
+ */
+LUA_FUNCTION_DEF (util, fold_header);
+
 static const struct luaL_reg utillib_f[] = {
        LUA_INTERFACE_DEF (util, create_event_base),
        LUA_INTERFACE_DEF (util, load_rspamd_config),
@@ -125,6 +135,7 @@ static const struct luaL_reg utillib_f[] = {
        LUA_INTERFACE_DEF (util, parse_html),
        LUA_INTERFACE_DEF (util, levenshtein_distance),
        LUA_INTERFACE_DEF (util, parse_addr),
+       LUA_INTERFACE_DEF (util, fold_header),
        {NULL, NULL}
 };
 
@@ -592,6 +603,30 @@ lua_util_parse_addr (lua_State *L)
        return 1;
 }
 
+static gint
+lua_util_fold_header (lua_State *L)
+{
+       const gchar *name, *value;
+       GString *folded;
+
+       name = luaL_checkstring (L, 1);
+       value = luaL_checkstring (L, 2);
+
+       if (name && value) {
+               folded = rspamd_header_value_fold (name, value);
+
+               if (folded) {
+                       lua_pushlstring (L, folded->str, folded->len);
+                       g_string_free (folded, TRUE);
+
+                       return 1;
+               }
+       }
+
+       lua_pushnil (L);
+       return 1;
+}
+
 static gint
 lua_load_util (lua_State * L)
 {