]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add ID to mime parts
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 5 Nov 2018 17:58:27 +0000 (17:58 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 5 Nov 2018 17:58:27 +0000 (17:58 +0000)
src/libmime/message.h
src/libmime/mime_parser.c
src/lua/lua_mimepart.c

index 17077860d628710a3b34075e1e96167178036926..0f5c3dfb7927880c496168ef4dc29417c21fd38a 100644 (file)
@@ -51,11 +51,16 @@ struct rspamd_mime_part {
        rspamd_ftok_t raw_data;
        rspamd_ftok_t parsed_data;
        struct rspamd_mime_part *parent_part;
-       GHashTable *raw_headers;
+
        GQueue *headers_order;
+       GHashTable *raw_headers;
+
        gchar *raw_headers_str;
        gsize raw_headers_len;
+
        enum rspamd_cte cte;
+       enum rspamd_mime_part_flags flags;
+       guint id;
 
        union {
                struct rspamd_mime_multipart mp;
@@ -64,7 +69,6 @@ struct rspamd_mime_part {
                struct rspamd_archive *arch;
        } specific;
 
-       enum rspamd_mime_part_flags flags;
        guchar digest[rspamd_cryptobox_HASHBYTES];
 };
 
index c1c5c088922814241f696d5a79587cf33c565439..2972d3389d1e70a6815f6a22158adb89588a6b88 100644 (file)
@@ -510,6 +510,7 @@ rspamd_mime_parse_normal_part (struct rspamd_task *task,
                g_assert_not_reached ();
        }
 
+       part->id = task->parts->len;
        g_ptr_array_add (task->parts, part);
        msg_debug_mime ("parsed data part %T/%T of length %z (%z orig), %s cte",
                        &part->ct->type, &part->ct->subtype, part->parsed_data.len,
@@ -815,6 +816,7 @@ rspamd_mime_parse_multipart_part (struct rspamd_task *task,
                return RSPAMD_MIME_PARSE_NESTING;
        }
 
+       part->id = task->parts->len;
        g_ptr_array_add (task->parts, part);
        st->nesting ++;
        rspamd_mime_part_get_cte (task, part->raw_headers, part, FALSE);
index 78c3e05b9da81ad54fcd4658bd084528b4884498..33d1a3011d8371b7100f7468fe9a4b3857547a45 100644 (file)
@@ -402,6 +402,13 @@ LUA_FUNCTION_DEF (mimepart, get_text);
  * @return {string} 128 characters hex string with digest of the part
  */
 LUA_FUNCTION_DEF (mimepart, get_digest);
+
+/***
+ * @method mime_part:get_id()
+ * Returns the order of the part in parts list
+ * @return {number} index of the part (starting from 1 as it is Lua API)
+ */
+LUA_FUNCTION_DEF (mimepart, get_id);
 /***
  * @method mime_part:is_broken()
  * Returns true if mime part has incorrectly specified content type
@@ -444,6 +451,7 @@ static const struct luaL_reg mimepartlib_m[] = {
        LUA_INTERFACE_DEF (mimepart, is_broken),
        LUA_INTERFACE_DEF (mimepart, get_text),
        LUA_INTERFACE_DEF (mimepart, get_digest),
+       LUA_INTERFACE_DEF (mimepart, get_id),
        LUA_INTERFACE_DEF (mimepart, headers_foreach),
        {"__tostring", rspamd_lua_class_tostring},
        {NULL, NULL}
@@ -1471,6 +1479,21 @@ lua_mimepart_get_digest (lua_State * L)
        return 1;
 }
 
+static gint
+lua_mimepart_get_id (lua_State * L)
+{
+       LUA_TRACE_POINT;
+       struct rspamd_mime_part *part = lua_check_mimepart (L);
+
+       if (part == NULL) {
+               return luaL_error (L, "invalid arguments");
+       }
+
+       lua_pushnumber (L, part->id);
+
+       return 1;
+}
+
 static gint
 lua_mimepart_headers_foreach (lua_State *L)
 {