imap-fetch.c revision f036083a96932811a7201017597415e262413725
a8c5a86d183db25a57bf193c06b41e092ec2e151Timo Sirainen/* Copyright (c) 2002-2008 Dovecot authors, see the included COPYING file */
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainen "\"text\" \"plain\" NIL NIL NIL \"7bit\" 0 0 NIL NIL NIL"
4c0aff96fc7e6d779be43458f96cbf015849a3deTimo Sirainen "(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)"
678d0463849ba777106eb7875f27db07a5d8e3dfTimo Sirainenconst struct imap_fetch_handler default_handlers[8];
4c0aff96fc7e6d779be43458f96cbf015849a3deTimo Sirainenstatic int imap_fetch_handler_cmp(const void *p1, const void *p2)
678d0463849ba777106eb7875f27db07a5d8e3dfTimo Sirainen const struct imap_fetch_handler *h1 = p1, *h2 = p2;
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainenvoid imap_fetch_handlers_register(const struct imap_fetch_handler *handlers,
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainen fetch_handlers = buffer_create_dynamic(default_pool, 128);
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainen buffer_append(fetch_handlers, handlers, sizeof(*handlers) * count);
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainen data = buffer_get_modifiable_data(fetch_handlers, &size);
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainen qsort(data, size / sizeof(*handlers), sizeof(*handlers),
678d0463849ba777106eb7875f27db07a5d8e3dfTimo Sirainenstatic int imap_fetch_handler_bsearch(const void *name_p, const void *handler_p)
678d0463849ba777106eb7875f27db07a5d8e3dfTimo Sirainen const struct imap_fetch_handler *h = handler_p;
77b5fd56e5a06d624f3ab92198272287333114f4Timo Sirainen return name[i] < 'A' || name[i] >= 'Z' ? 0 : -1;
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainenbool imap_fetch_init_handler(struct imap_fetch_context *ctx, const char *name,
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainenimap_fetch_init(struct client_command_context *cmd, struct mailbox *box)
return ctx;
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;
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;
return TRUE;
return TRUE;