const char *in_reply_to, *message_id;
};
+enum envelope_field {
+ ENVELOPE_FIELD_DATE = 0,
+ ENVELOPE_FIELD_SUBJECT,
+ ENVELOPE_FIELD_FROM,
+ ENVELOPE_FIELD_SENDER,
+ ENVELOPE_FIELD_REPLY_TO,
+ ENVELOPE_FIELD_TO,
+ ENVELOPE_FIELD_CC,
+ ENVELOPE_FIELD_BCC,
+ ENVELOPE_FIELD_IN_REPLY_TO,
+ ENVELOPE_FIELD_MESSAGE_ID,
+
+ ENVELOPE_FIELD_UNKNOWN
+};
+
const char *imap_envelope_headers[] = {
"Date", "Subject", "From", "Sender", "Reply-To",
"To", "Cc", "Bcc", "In-Reply-To", "Message-ID",
NULL
};
-bool imap_envelope_get_field(const char *name, enum imap_envelope_field *ret)
+static enum envelope_field
+envelope_get_field(const char *name)
{
- *ret = (enum imap_envelope_field)-1;
-
switch (*name) {
case 'B':
case 'b':
if (strcasecmp(name, "Bcc") == 0)
- *ret = IMAP_ENVELOPE_BCC;
+ return ENVELOPE_FIELD_BCC;
break;
case 'C':
case 'c':
if (strcasecmp(name, "Cc") == 0)
- *ret = IMAP_ENVELOPE_CC;
+ return ENVELOPE_FIELD_CC;
break;
case 'D':
case 'd':
if (strcasecmp(name, "Date") == 0)
- *ret = IMAP_ENVELOPE_DATE;
+ return ENVELOPE_FIELD_DATE;
break;
case 'F':
case 'f':
if (strcasecmp(name, "From") == 0)
- *ret = IMAP_ENVELOPE_FROM;
+ return ENVELOPE_FIELD_FROM;
break;
case 'I':
case 'i':
if (strcasecmp(name, "In-reply-to") == 0)
- *ret = IMAP_ENVELOPE_IN_REPLY_TO;
+ return ENVELOPE_FIELD_IN_REPLY_TO;
break;
case 'M':
case 'm':
if (strcasecmp(name, "Message-id") == 0)
- *ret = IMAP_ENVELOPE_MESSAGE_ID;
+ return ENVELOPE_FIELD_MESSAGE_ID;
break;
case 'R':
case 'r':
if (strcasecmp(name, "Reply-to") == 0)
- *ret = IMAP_ENVELOPE_REPLY_TO;
+ return ENVELOPE_FIELD_REPLY_TO;
break;
case 'S':
case 's':
if (strcasecmp(name, "Subject") == 0)
- *ret = IMAP_ENVELOPE_SUBJECT;
+ return ENVELOPE_FIELD_SUBJECT;
if (strcasecmp(name, "Sender") == 0)
- *ret = IMAP_ENVELOPE_SENDER;
+ return ENVELOPE_FIELD_SENDER;
break;
case 'T':
case 't':
if (strcasecmp(name, "To") == 0)
- *ret = IMAP_ENVELOPE_TO;
+ return ENVELOPE_FIELD_TO;
break;
}
- return *ret != (enum imap_envelope_field)-1;
+ return ENVELOPE_FIELD_UNKNOWN;
}
void imap_envelope_parse_header(pool_t pool,
struct message_header_line *hdr)
{
struct message_part_envelope_data *d;
- enum imap_envelope_field field;
+ enum envelope_field field;
struct message_address **addr_p;
const char **str_p;
*data = p_new(pool, struct message_part_envelope_data, 1);
}
- if (hdr == NULL || !imap_envelope_get_field(hdr->name, &field))
+ if (hdr == NULL)
+ return;
+ field = envelope_get_field(hdr->name);
+ if (field == ENVELOPE_FIELD_UNKNOWN)
return;
if (hdr->continues) {
d = *data;
addr_p = NULL; str_p = NULL;
switch (field) {
- case IMAP_ENVELOPE_DATE:
+ case ENVELOPE_FIELD_DATE:
str_p = &d->date;
break;
- case IMAP_ENVELOPE_SUBJECT:
+ case ENVELOPE_FIELD_SUBJECT:
str_p = &d->subject;
break;
- case IMAP_ENVELOPE_MESSAGE_ID:
+ case ENVELOPE_FIELD_MESSAGE_ID:
str_p = &d->message_id;
break;
- case IMAP_ENVELOPE_IN_REPLY_TO:
+ case ENVELOPE_FIELD_IN_REPLY_TO:
str_p = &d->in_reply_to;
break;
- case IMAP_ENVELOPE_CC:
+ case ENVELOPE_FIELD_CC:
addr_p = &d->cc;
break;
- case IMAP_ENVELOPE_BCC:
+ case ENVELOPE_FIELD_BCC:
addr_p = &d->bcc;
break;
- case IMAP_ENVELOPE_FROM:
+ case ENVELOPE_FIELD_FROM:
addr_p = &d->from;
break;
- case IMAP_ENVELOPE_SENDER:
+ case ENVELOPE_FIELD_SENDER:
addr_p = &d->sender;
break;
- case IMAP_ENVELOPE_TO:
+ case ENVELOPE_FIELD_TO:
addr_p = &d->to;
break;
- case IMAP_ENVELOPE_REPLY_TO:
+ case ENVELOPE_FIELD_REPLY_TO:
addr_p = &d->reply_to;
break;
- case IMAP_ENVELOPE_FIELDS:
- break;
+ case ENVELOPE_FIELD_UNKNOWN:
+ i_unreached();
}
if (addr_p != NULL) {