[dovecot-cvs] dovecot/src/lib-mail message-parser.c,1.45,1.46 message-parser.h,1.21,1.22

cras at procontrol.fi cras at procontrol.fi
Wed Aug 20 05:41:32 EEST 2003


Update of /home/cvs/dovecot/src/lib-mail
In directory danu:/tmp/cvs-serv282/lib-mail

Modified Files:
	message-parser.c message-parser.h 
Log Message:
If BODY/BODYSTRUCTURE is requested with some other headers, parse the
headers only once. If body contains multiple MIME parts, cache the internal
MIME structure so BODY[part] fetching doesn't need to parse it again.



Index: message-parser.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-mail/message-parser.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- message-parser.c	6 Aug 2003 00:26:40 -0000	1.45
+++ message-parser.c	20 Aug 2003 01:41:30 -0000	1.46
@@ -564,6 +564,35 @@
 	return part;
 }
 
+static void part_parse_headers(struct message_part *part, struct istream *input,
+			       uoff_t start_offset,
+			       message_header_callback_t *callback,
+			       void *context)
+{
+	while (part != NULL) {
+		/* note that we want to parse the header of all
+		   the message parts, multiparts too. */
+		i_assert(part->physical_pos >= input->v_offset - start_offset);
+		i_stream_skip(input, part->physical_pos -
+			      (input->v_offset - start_offset));
+
+		message_parse_header(part, input, NULL, callback, context);
+		if (part->children != NULL) {
+			part_parse_headers(part->children, input,
+					   start_offset, callback, context);
+		}
+
+		part = part->next;
+	}
+}
+
+void message_parse_from_parts(struct message_part *part, struct istream *input,
+			      message_header_callback_t *callback,
+			      void *context)
+{
+	part_parse_headers(part, input, input->v_offset, callback, context);
+}
+
 void message_parse_header(struct message_part *part, struct istream *input,
 			  struct message_size *hdr_size,
 			  message_header_callback_t *callback, void *context)

Index: message-parser.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-mail/message-parser.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- message-parser.h	13 Jul 2003 01:08:10 -0000	1.21
+++ message-parser.h	20 Aug 2003 01:41:30 -0000	1.22
@@ -65,6 +65,9 @@
 struct message_part *message_parse(pool_t pool, struct istream *input,
 				   message_header_callback_t *callback,
 				   void *context);
+void message_parse_from_parts(struct message_part *part, struct istream *input,
+			      message_header_callback_t *callback,
+			      void *context);
 void message_parse_header(struct message_part *part, struct istream *input,
 			  struct message_size *hdr_size,
 			  message_header_callback_t *callback, void *context);



More information about the dovecot-cvs mailing list