task->msg.begin = p;
task->msg.len = len;
+
+ /* Cleanup old message */
+ if (task->message) {
+ rspamd_message_unref (task->message);
+ }
+
rspamd_cryptobox_hash_init (&st, NULL, 0);
task->message = rspamd_message_new (task);
}
rspamd_cryptobox_hash_final (&st, digest_out);
- memcpy (task->digest, digest_out, sizeof (task->digest));
+ memcpy (MESSAGE_FIELD (task, digest), digest_out,
+ sizeof (MESSAGE_FIELD (task, digest)));
if (task->queue_id) {
msg_info_task ("loaded message; id: <%s>; queue-id: <%s>; size: %z; "
"checksum: <%*xs>",
MESSAGE_FIELD (task, message_id), task->queue_id, task->msg.len,
- (gint)sizeof (task->digest), task->digest);
+ (gint)sizeof (MESSAGE_FIELD (task, digest)), MESSAGE_FIELD (task, digest));
}
else {
msg_info_task ("loaded message; id: <%s>; size: %z; "
"checksum: <%*xs>",
MESSAGE_FIELD (task, message_id), task->msg.len,
- (gint)sizeof (task->digest), task->digest);
+ (gint)sizeof (MESSAGE_FIELD (task, digest)), MESSAGE_FIELD (task, digest));
}
return TRUE;
rspamd_header_exists (struct rspamd_task * task, GArray * args, void *unused)
{
struct expression_argument *arg;
- GPtrArray *headerlist;
+ struct rspamd_mime_header *rh;
if (args == NULL || task == NULL) {
return FALSE;
return FALSE;
}
- headerlist = rspamd_message_get_header_array (task,
- (gchar *)arg->data,
- FALSE);
+ rh = rspamd_message_get_header_array (task,
+ (gchar *)arg->data);
debug_task ("try to get header %s: %d", (gchar *)arg->data,
- (headerlist != NULL));
+ (rh != NULL));
- if (headerlist) {
+ if (rh) {
return TRUE;
}
return FALSE;
}
- if (!task->rcpt_mime) {
+ if (!MESSAGE_FIELD (task, rcpt_mime)) {
return FALSE;
}
- num = task->rcpt_mime->len;
+ num = MESSAGE_FIELD (task, rcpt_mime)->len;
if (num < MIN_RCPT_TO_COMPARE) {
return FALSE;
ar = rspamd_mempool_alloc0 (task->task_pool, num * sizeof (struct addr_list));
/* Fill array */
- PTR_ARRAY_FOREACH (task->rcpt_mime, i, cur) {
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, rcpt_mime), i, cur) {
ar[i].name = cur->addr;
ar[i].namelen = cur->addr_len;
ar[i].addr = cur->domain;
struct rspamd_mime_text_part *p;
gboolean res = FALSE;
- if (task->text_parts->len == 1) {
- p = g_ptr_array_index (task->text_parts, 0);
+ if (MESSAGE_FIELD (task, text_parts)->len == 1) {
+ p = g_ptr_array_index (MESSAGE_FIELD (task, text_parts), 0);
if (IS_PART_HTML (p)) {
res = TRUE;
{
/* Check all types of addresses */
- if (task->rcpt_mime) {
- return is_recipient_list_sorted (task->rcpt_mime);
+ if (MESSAGE_FIELD (task, rcpt_mime)) {
+ return is_recipient_list_sorted (MESSAGE_FIELD (task, rcpt_mime));
}
return FALSE;
return FALSE;
}
- PTR_ARRAY_FOREACH (task->parts, i, part) {
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, part) {
if (IS_CT_TEXT (part->ct)) {
if (part->cte == cte) {
return TRUE;
guint i;
gboolean res = TRUE;
- for (i = 0; i < task->text_parts->len; i ++) {
-
- p = g_ptr_array_index (task->text_parts, i);
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, text_parts), i, p) {
if (IS_PART_HTML (p)) {
if (p->flags & RSPAMD_MIME_TEXT_PART_FLAG_BALANCED) {
res = TRUE;
return FALSE;
}
- for (i = 0; i < task->text_parts->len; i ++) {
- p = g_ptr_array_index (task->text_parts, i);
-
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, text_parts), i, p) {
if (IS_PART_HTML (p) && p->html) {
res = rspamd_html_tag_seen (p->html, arg->data);
}
guint i;
gboolean res = FALSE;
- for (i = 0; i < task->text_parts->len; i ++) {
- p = g_ptr_array_index (task->text_parts, i);
-
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, text_parts), i, p) {
if (IS_PART_HTML (p) && (p->html == NULL || p->html->html_tags == NULL)) {
res = TRUE;
}
return FALSE;
}
- return g_hash_table_lookup (task->raw_headers, arg->data) != NULL;
+ return rspamd_message_get_header_array (task, arg->data) != NULL;
}
static gboolean
case 's':
case 'S':
if (g_ascii_strcasecmp (type, "subject") == 0) {
- str = task->subject;
+ str = MESSAGE_FIELD (task, subject);
}
else {
msg_warn_task ("bad argument to function: %s", type);
param_name = arg->data;
arg_pattern = &g_array_index (args, struct expression_argument, 1);
- for (i = 0; i < task->parts->len; i ++) {
- cur_part = g_ptr_array_index (task->parts, i);
-
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, cur_part) {
if (args->len >= 3) {
arg1 = &g_array_index (args, struct expression_argument, 2);
if (g_ascii_strncasecmp (arg1->data, "true",
g_assert (arg->type == EXPRESSION_ARGUMENT_NORMAL);
param_name = arg->data;
- for (i = 0; i < task->parts->len; i ++) {
- cur_part = g_ptr_array_index (task->parts, i);
-
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, cur_part) {
if (args->len >= 2) {
arg1 = &g_array_index (args, struct expression_argument, 1);
if (g_ascii_strncasecmp (arg1->data, "true",
arg_pattern = &g_array_index (args, struct expression_argument, 0);
- for (i = 0; i < task->parts->len; i ++) {
- cur_part = g_ptr_array_index (task->parts, i);
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, cur_part) {
ct = cur_part->ct;
if (args->len >= 2) {
gint r = 0;
guint i;
- for (i = 0; i < task->parts->len; i ++) {
- part = g_ptr_array_index (task->parts, i);
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, part) {
ct = part->ct;
if (ct == NULL) {
struct rspamd_mime_part *part;
guint i;
- PTR_ARRAY_FOREACH (task->parts, i, part) {
+ PTR_ARRAY_FOREACH (MESSAGE_FIELD (task, parts), i, part) {
if (part->parsed_data.len > 0) {
return FALSE;
}