mbox-sync-parse.c revision abe8230dd1dd37d7ccf0163100e934bb5e658c20
/* Copyright (C) 2004 Timo Sirainen */
#include "lib.h"
#include "buffer.h"
#include "istream.h"
#include "str.h"
#include "write-full.h"
#include "message-parser.h"
#include "mail-index.h"
#include "mbox-sync-private.h"
#include <stdlib.h>
struct mbox_flag_type mbox_status_flags[] = {
{ 'R', MAIL_SEEN },
{ 'O', MBOX_NONRECENT },
{ 0, 0 }
};
struct mbox_flag_type mbox_xstatus_flags[] = {
{ 'A', MAIL_ANSWERED },
{ 'F', MAIL_FLAGGED },
{ 'T', MAIL_DRAFT },
{ 'D', MAIL_DELETED },
{ 0, 0 }
};
struct header_func {
const char *header;
struct message_header_line *hdr);
};
{
int i;
}
return 0;
}
struct message_header_line *hdr,
struct mbox_flag_type *flags_list)
{
size_t i;
for (i = 0; i < hdr->full_value_len; i++) {
}
}
struct message_header_line *hdr)
{
return TRUE;
}
struct message_header_line *hdr)
{
return TRUE;
}
struct message_header_line *hdr)
{
const char *str;
char *end;
/* Valid only in first message */
return FALSE;
}
/* <uid validity> <last uid> */
t_push();
t_pop();
pos++;
if (uid_validity == 0) {
/* broken */
return FALSE;
}
}
/* broken, update */
}
return TRUE;
// FIXME: save keywords
return TRUE;
}
struct message_header_line *hdr)
{
return FALSE;
/* this is the UW-IMAP style "FOLDER INTERNAL DATA" message. skip it. */
return TRUE;
}
struct message_header_line *hdr)
{
for (i = hdr->full_value_len; i > 0; i--) {
break;
space++;
}
}
// FIXME: parse them
return TRUE;
}
struct message_header_line *hdr)
{
/* duplicate */
return FALSE;
}
for (i = 0; i < hdr->full_value_len; i++) {
break;
}
space_pos = i;
for (; i < hdr->full_value_len; i++) {
/* broken value */
return FALSE;
}
extra_space++;
}
/* next_uid broken - fix it */
}
/* broken - UIDs must be growing */
return FALSE;
}
/* set it only if X-Keywords hasn't been seen. spaces in X-UID
should be removed when writing X-Keywords. */
}
return TRUE;
}
struct message_header_line *hdr)
{
size_t i;
/* duplicate */
return FALSE;
}
for (i = 0; i < hdr->full_value_len; i++) {
break;
}
for (; i < hdr->full_value_len; i++) {
/* broken value */
return FALSE;
}
}
return TRUE;
}
static struct header_func header_funcs[] = {
{ "Content-Length", parse_content_length },
{ "Status", parse_status },
{ "X-IMAP", parse_x_imap },
{ "X-IMAPbase", parse_x_imap_base },
{ "X-Keywords", parse_x_keywords },
{ "X-Status", parse_x_status },
{ "X-UID", parse_x_uid },
};
{
int i;
return &header_funcs[i];
}
return NULL;
}
struct mbox_sync_mail_context *ctx,
int rewriting)
{
struct message_header_parser_ctx *hdr_ctx;
struct message_header_line *hdr;
struct header_func *func;
int i;
ctx->header_last_change = 0;
for (i = 0; i < MBOX_HDR_COUNT; i++)
line_start_pos = 0;
break;
}
}
/* this header is broken, remove it */
}
continue;
}
} else {
}
if (!hdr->no_newline)
}
/* missing X-IMAPbase */
}
/* update uid-last field in X-IMAPbase */
}
/* missing X-UID */
}
}