dovecot-2.2: istream-header-filter: Added i_stream_header_filter...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Aug 11 03:14:56 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/04abd58abf7a
changeset: 14852:04abd58abf7a
user: Timo Sirainen <tss at iki.fi>
date: Sat Aug 11 03:14:43 2012 +0300
description:
istream-header-filter: Added i_stream_header_filter_add() to add extra headers.
diffstat:
src/lib-mail/istream-header-filter.c | 14 +++++++++++---
src/lib-mail/istream-header-filter.h | 12 ++++++++++--
src/lib-mail/test-istream-header-filter.c | 3 ++-
src/lib-storage/index/index-mail-headers.c | 6 ++++--
src/lib-storage/index/mbox/mbox-save.c | 6 ++++--
5 files changed, 31 insertions(+), 10 deletions(-)
diffs (128 lines):
diff -r 4bcd507e8907 -r 04abd58abf7a src/lib-mail/istream-header-filter.c
--- a/src/lib-mail/istream-header-filter.c Sat Aug 11 02:53:49 2012 +0300
+++ b/src/lib-mail/istream-header-filter.c Sat Aug 11 03:14:43 2012 +0300
@@ -177,7 +177,7 @@
matched = TRUE;
if (!mstream->header_parsed &&
mstream->callback != NULL) {
- mstream->callback(hdr, &matched,
+ mstream->callback(mstream, hdr, &matched,
mstream->context);
}
@@ -200,7 +200,8 @@
bool orig_matched = matched;
mstream->parsed_lines = mstream->cur_line;
- mstream->callback(hdr, &matched, mstream->context);
+ mstream->callback(mstream, hdr, &matched,
+ mstream->context);
if (matched != orig_matched) {
i_array_init(&mstream->match_change_lines, 8);
array_append(&mstream->match_change_lines,
@@ -275,7 +276,8 @@
mstream->hdr_ctx = NULL;
if (!mstream->header_parsed && mstream->callback != NULL)
- mstream->callback(NULL, &matched, mstream->context);
+ mstream->callback(mstream, NULL,
+ &matched, mstream->context);
mstream->header_parsed = TRUE;
mstream->header_read = TRUE;
@@ -548,3 +550,9 @@
return i_stream_create(&mstream->istream, input, -1);
}
+
+void i_stream_header_filter_add(struct header_filter_istream *input,
+ const void *data, size_t size)
+{
+ buffer_append(input->hdr_buf, data, size);
+}
diff -r 4bcd507e8907 -r 04abd58abf7a src/lib-mail/istream-header-filter.h
--- a/src/lib-mail/istream-header-filter.h Sat Aug 11 02:53:49 2012 +0300
+++ b/src/lib-mail/istream-header-filter.h Sat Aug 11 03:14:43 2012 +0300
@@ -1,6 +1,8 @@
#ifndef ISTREAM_HEADER_FILTER_H
#define ISTREAM_HEADER_FILTER_H
+struct header_filter_istream;
+
enum header_filter_flags {
/* Include only specified headers in output.*/
HEADER_FILTER_INCLUDE = 0x01,
@@ -19,7 +21,8 @@
struct message_header_line;
-typedef void header_filter_callback(struct message_header_line *hdr,
+typedef void header_filter_callback(struct header_filter_istream *input,
+ struct message_header_line *hdr,
bool *matched, void *context);
extern header_filter_callback *null_header_filter_callback;
@@ -35,7 +38,8 @@
#ifdef CONTEXT_TYPE_SAFETY
# define i_stream_create_header_filter(input, flags, headers, headers_count, \
callback, context) \
- ({(void)(1 ? 0 : callback((struct message_header_line *)0, \
+ ({(void)(1 ? 0 : callback((struct header_filter_istream *)0, \
+ (struct message_header_line *)0, \
(bool *)0, context)); \
i_stream_create_header_filter(input, flags, headers, headers_count, \
(header_filter_callback *)callback, context); })
@@ -46,4 +50,8 @@
(header_filter_callback *)callback, context)
#endif
+/* Add more data to headers. Should called from the filter callback. */
+void i_stream_header_filter_add(struct header_filter_istream *input,
+ const void *data, size_t size);
+
#endif
diff -r 4bcd507e8907 -r 04abd58abf7a src/lib-mail/test-istream-header-filter.c
--- a/src/lib-mail/test-istream-header-filter.c Sat Aug 11 02:53:49 2012 +0300
+++ b/src/lib-mail/test-istream-header-filter.c Sat Aug 11 03:14:43 2012 +0300
@@ -8,7 +8,8 @@
#include "test-common.h"
static void ATTR_NULL(3)
-filter_callback(struct message_header_line *hdr,
+filter_callback(struct header_filter_istream *input ATTR_UNUSED,
+ struct message_header_line *hdr,
bool *matched, void *context ATTR_UNUSED)
{
if (hdr != NULL && hdr->name_offset == 0) {
diff -r 4bcd507e8907 -r 04abd58abf7a src/lib-storage/index/index-mail-headers.c
--- a/src/lib-storage/index/index-mail-headers.c Sat Aug 11 02:53:49 2012 +0300
+++ b/src/lib-storage/index/index-mail-headers.c Sat Aug 11 03:14:43 2012 +0300
@@ -779,8 +779,10 @@
return ret < 0 ? -1 : (list[0] != NULL ? 1 : 0);
}
-static void header_cache_callback(struct message_header_line *hdr,
- bool *matched, struct index_mail *mail)
+static void
+header_cache_callback(struct header_filter_istream *input ATTR_UNUSED,
+ struct message_header_line *hdr,
+ bool *matched, struct index_mail *mail)
{
if (hdr != NULL && hdr->eoh)
*matched = FALSE;
diff -r 4bcd507e8907 -r 04abd58abf7a src/lib-storage/index/mbox/mbox-save.c
--- a/src/lib-storage/index/mbox/mbox-save.c Sat Aug 11 02:53:49 2012 +0300
+++ b/src/lib-storage/index/mbox/mbox-save.c Sat Aug 11 03:14:43 2012 +0300
@@ -341,8 +341,10 @@
return 0;
}
-static void save_header_callback(struct message_header_line *hdr,
- bool *matched, struct mbox_save_context *ctx)
+static void
+save_header_callback(struct header_filter_istream *input ATTR_UNUSED,
+ struct message_header_line *hdr,
+ bool *matched, struct mbox_save_context *ctx)
{
if (hdr != NULL) {
if (strncmp(hdr->name, "From ", 5) == 0) {
More information about the dovecot-cvs
mailing list