imap-fetch.c revision 34875ff8cd23cfb80b3dd9784a3e53b97c361c9c
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
7d6389e4053c2dac1fb37180b5756b00785983dcTimo Sirainen "\"text\" \"plain\" NIL NIL NIL \"7bit\" 0 0"
f968e62caa52a8924bd05ebf76ff515b5c18e17bTimo Sirainen "(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)"
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainenstatic ARRAY_DEFINE(fetch_handlers, struct imap_fetch_handler);
484e12acec34f16e5a8adc001e23ae48f1dda8c7Timo Sirainenstatic int imap_fetch_handler_cmp(const struct imap_fetch_handler *h1,
849969f639a00eab26791db3cb1b66430420c0cdTimo Sirainenvoid imap_fetch_handlers_register(const struct imap_fetch_handler *handlers,
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen array_append(&fetch_handlers, handlers, count);
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen array_sort(&fetch_handlers, imap_fetch_handler_cmp);
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainenimap_fetch_handler_bsearch(const char *name, const struct imap_fetch_handler *h)
35136dd2baf8dc30e4e754294ed81ff48e8c1e64Timo Sirainenbool imap_fetch_init_handler(struct imap_fetch_context *ctx, const char *name,
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen const char *lookup_name, *p;
25ee72451d16374ed27fdbf829f4ec756c778352Timo Sirainen for (p = name; i_isalnum(*p) || *p == '-'; p++) ;
25ee72451d16374ed27fdbf829f4ec756c778352Timo Sirainen handler = array_bsearch(&fetch_handlers, lookup_name,
25ee72451d16374ed27fdbf829f4ec756c778352Timo Sirainen t_strconcat("Unknown parameter ", name, NULL));
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainenimap_fetch_init(struct client_command_context *cmd, struct mailbox *box)
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainen ctx = p_new(cmd->pool, struct imap_fetch_context, 1);
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainen p_array_init(&ctx->all_headers, cmd->pool, 64);
849969f639a00eab26791db3cb1b66430420c0cdTimo Sirainenbool imap_fetch_add_changed_since(struct imap_fetch_context *ctx,
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen search_arg = p_new(ctx->search_args->pool, struct mail_search_arg, 1);
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen p_new(ctx->cmd->pool, struct mail_search_modseq, 1);
1e21e6be70994b1aa9e52ca0e2f51afefca6d0dfTimo Sirainen search_arg->value.modseq->modseq = modseq + 1;
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen search_arg->next = ctx->search_args->args->next;
struct imap_fetch_context_handler h;
unsigned int i, size;
for (i = 0; i < size; i++) {
memset(&h, 0, sizeof(h));
if (!buffered)
unsigned int i, count;
for (i = 0; i < count; i++) {
unsigned int i, count;
int ret = 0;
next_uid++;
else if (++i < count)
if (i < count) {
for (; i < count; i++) {
return ret;
unsigned int i, count;
for (i = 0; i < count; i++)
int ret = 0;
return ret;
const void *data;
MAIL_FETCH_STREAM_BODY)) == 0)) {
const unsigned char *data;
if (len == 0)
len--;
unsigned int count;
int ret;
if (ret == 0)
if (ret < 0) {
if (ret <= 0)
return ret;
T_BEGIN {
const struct imap_fetch_context_handler *h =
h->context);
} T_END;
if (ret == 0)
if (ret < 0) {
int ret;
if (ret < 0)
return ret;
unsigned int i, count;
for (i = 0; i < count; i++) {
const char *body;
return TRUE;
const char *bodystructure;
&bodystructure) < 0)
return TRUE;
const char *envelope;
return TRUE;
const char *const *keywords;
return TRUE;
return TRUE;
(unsigned long long)modseq);
return TRUE;
return TRUE;
const char *value;
return TRUE;
const char *str;
const char *name,
return TRUE;
return TRUE;
static const struct imap_fetch_handler
void imap_fetch_handlers_init(void)
void imap_fetch_handlers_deinit(void)