dovecot-2.2: imap: More fixes to fetching messages.
dovecot at dovecot.org
dovecot at dovecot.org
Sun Aug 12 04:55:00 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/9f20f7bd992d
changeset: 14872:9f20f7bd992d
user: Timo Sirainen <tss at iki.fi>
date: Sun Aug 12 04:54:54 2012 +0300
description:
imap: More fixes to fetching messages.
diffstat:
src/lib-imap-storage/imap-msgpart.c | 34 ++++++++++++++++++++++------------
1 files changed, 22 insertions(+), 12 deletions(-)
diffs (61 lines):
diff -r f66e1508dc19 -r 9f20f7bd992d src/lib-imap-storage/imap-msgpart.c
--- a/src/lib-imap-storage/imap-msgpart.c Sun Aug 12 03:28:26 2012 +0300
+++ b/src/lib-imap-storage/imap-msgpart.c Sun Aug 12 04:54:54 2012 +0300
@@ -236,12 +236,13 @@
}
if (*section == '\0') {
- /* full message/MIME part */
msgpart->wanted_fields |= MAIL_FETCH_STREAM_BODY;
if (*msgpart->section_number == '\0') {
+ /* BODY[] - header+body */
msgpart->fetch_type = FETCH_FULL;
msgpart->wanted_fields |= MAIL_FETCH_STREAM_HEADER;
} else {
+ /* BODY[1] - body only */
msgpart->fetch_type = FETCH_MIME_BODY;
}
return 0;
@@ -516,22 +517,31 @@
if (mail_get_parts(mail, &parts) < 0)
return -1;
part = imap_msgpart_find(parts, msgpart->section_number);
- if (part != NULL && (msgpart->fetch_type == FETCH_HEADER ||
- msgpart->fetch_type == FETCH_BODY)) {
- /* fetching message/rfc822 part's header/body */
- if ((part->flags & MESSAGE_PART_FLAG_MESSAGE_RFC822) == 0)
- part = NULL;
- else {
- i_assert(part->children != NULL &&
- part->children->next == NULL);
- part = part->children;
- }
- }
if (part == NULL) {
/* MIME part not found. */
*part_r = NULL;
return 0;
}
+
+ switch (msgpart->fetch_type) {
+ case FETCH_FULL:
+ case FETCH_MIME:
+ case FETCH_MIME_BODY:
+ break;
+ case FETCH_HEADER:
+ case FETCH_HEADER_FIELDS:
+ case FETCH_HEADER_FIELDS_NOT:
+ case FETCH_BODY:
+ /* fetching message/rfc822 part's header/body */
+ if ((part->flags & MESSAGE_PART_FLAG_MESSAGE_RFC822) == 0) {
+ *part_r = NULL;
+ return 0;
+ }
+ i_assert(part->children != NULL &&
+ part->children->next == NULL);
+ part = part->children;
+ break;
+ }
*part_r = part;
return 1;
}
More information about the dovecot-cvs
mailing list