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