Skip to content

Commit

Permalink
lib-imap: imap-evenvelope: Changed imap_envelope_get_field() into a p…
Browse files Browse the repository at this point in the history
…rivate equivalent.
  • Loading branch information
stephanbosch authored and GitLab committed Jan 30, 2017
1 parent df45962 commit 535dbe3
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 48 deletions.
75 changes: 46 additions & 29 deletions src/lib-imap/imap-envelope.c
Expand Up @@ -17,83 +17,100 @@ struct message_part_envelope_data {
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_part_envelope_data **data,
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;

if (*data == NULL) {
*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) {
Expand All @@ -105,39 +122,39 @@ void imap_envelope_parse_header(pool_t pool,
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) {
Expand Down Expand Up @@ -345,4 +362,4 @@ bool imap_envelope_parse_args(const struct imap_arg *args,

*envlp_r = envlp;
return TRUE;
}
}
19 changes: 0 additions & 19 deletions src/lib-imap/imap-envelope.h
Expand Up @@ -3,29 +3,10 @@

struct imap_arg;
struct message_header_line;

enum imap_envelope_field {
/* NOTE: in the same order as listed in ENVELOPE */
IMAP_ENVELOPE_DATE = 0,
IMAP_ENVELOPE_SUBJECT,
IMAP_ENVELOPE_FROM,
IMAP_ENVELOPE_SENDER,
IMAP_ENVELOPE_REPLY_TO,
IMAP_ENVELOPE_TO,
IMAP_ENVELOPE_CC,
IMAP_ENVELOPE_BCC,
IMAP_ENVELOPE_IN_REPLY_TO,
IMAP_ENVELOPE_MESSAGE_ID,

IMAP_ENVELOPE_FIELDS
};

struct message_part_envelope_data;

extern const char *imap_envelope_headers[];

bool imap_envelope_get_field(const char *name, enum imap_envelope_field *ret);

/* Update envelope data based from given header field */
void imap_envelope_parse_header(pool_t pool,
struct message_part_envelope_data **data,
Expand Down

0 comments on commit 535dbe3

Please sign in to comment.