virtual-mail.c revision d979c1179d55ad86e40f869e48ef3e4db9c817b5
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen/* Copyright (c) 2008-2014 Dovecot authors, see the included COPYING file */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen struct mailbox_header_lookup_ctx *wanted_headers;
533bfba437e4120aa29dd45bca2aa87e30ee28a2Timo Sirainen /* currently active mail */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* all allocated mails */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* mail is lost if backend_mail doesn't point to correct mail */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainenvirtual_mail_alloc(struct mailbox_transaction_context *t,
533bfba437e4120aa29dd45bca2aa87e30ee28a2Timo Sirainen struct mailbox_header_lookup_ctx *wanted_headers)
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen struct virtual_mailbox *mbox = (struct virtual_mailbox *)t->box;
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen pool_alloconly_create("virtual index_mail", 512);
b039dabf4c53f72454e795930e7643b6e0e625f9Timo Sirainen array_create(&vmail->imail.mail.module_contexts, pool,
b039dabf4c53f72454e795930e7643b6e0e625f9Timo Sirainen sizeof(void *), 5);
b039dabf4c53f72454e795930e7643b6e0e625f9Timo Sirainen vmail->imail.ibox = INDEX_STORAGE_CONTEXT(t->box);
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen i_array_init(&vmail->backend_mails, array_count(&mbox->backend_boxes));
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainenstatic void virtual_mail_free(struct mail *mail)
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen struct virtual_mail *vmail = (struct virtual_mail *)mail;
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen unsigned int i, count;
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mails = array_get_modifiable(&vmail->backend_mails, &count);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen for (i = 0; i < count; i++)
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mailbox_header_lookup_unref(&vmail->wanted_headers);
5694eeb99b69dea8033ca77ad69743c6b4871370Timo Sirainenstatic struct mail *
5694eeb99b69dea8033ca77ad69743c6b4871370Timo Sirainenbackend_mail_find(struct virtual_mail *vmail, struct mailbox *box)
ff7056842f14fd3b30a2d327dfab165b9d15dd30Timo Sirainen unsigned int i, count;
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mails = array_get(&vmail->backend_mails, &count);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen for (i = 0; i < count; i++) {
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainenstatic int backend_mail_get(struct virtual_mail *vmail,
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen struct virtual_mailbox *mbox = (struct virtual_mailbox *)mail->box;
ef50336eefcb9ba99f73c6af37420eaf8857a39bTimo Sirainen bbox = virtual_backend_box_lookup(mbox, vmail->cur_vrec.mailbox_id);
ef50336eefcb9ba99f73c6af37420eaf8857a39bTimo Sirainen vmail->cur_backend_mail = backend_mail_find(vmail, bbox->box);
ff7056842f14fd3b30a2d327dfab165b9d15dd30Timo Sirainen (void)virtual_mail_set_backend_mail(mail, bbox);
5fb3bff645380804c9db2510940c41db6b8fdb01Timo Sirainen vmail->cur_lost = !mail_set_uid(vmail->cur_backend_mail,
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail->expunged = vmail->cur_lost || vmail->cur_backend_mail->expunged;
struct mail *
const void *data;
return FALSE;
return TRUE;
struct mail_private *p;
struct mail_private *p;
return TRUE;
struct mail_private *p;
struct mail_private *p;
int tz;
struct mail_private *p;
int ret;
if (ret < 0) {
return ret;
struct mail_private *p;
int ret;
if (ret < 0) {
int ret;
if (get_body) {
stream_r);
if (ret < 0) {
const char **value_r)
return NULL;
return NULL;
return real_mail;
NULL,