virtual-mail.c revision 6564208826b0f46a00f010d1b5711d85944c3c88
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody/* Copyright (c) 2008-2010 Dovecot authors, see the included COPYING file */
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody struct mailbox_header_lookup_ctx *wanted_headers;
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody /* currently active mail */
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody /* all allocated mails */
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody /* mail is lost if backend_mail doesn't point to correct mail */
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmodyvirtual_mail_alloc(struct mailbox_transaction_context *t,
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody struct mailbox_header_lookup_ctx *wanted_headers)
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody struct virtual_mailbox *mbox = (struct virtual_mailbox *)t->box;
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody array_create(&vmail->imail.mail.module_contexts, pool,
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody sizeof(void *), 5);
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody pool_alloconly_create("virtual index_mail", 512);
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody vmail->imail.ibox = INDEX_STORAGE_CONTEXT(t->box);
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody vmail->imail.trans = (struct index_transaction_context *)t;
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody i_array_init(&vmail->backend_mails, array_count(&mbox->backend_boxes));
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmodystatic void virtual_mail_free(struct mail *mail)
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody struct virtual_mail *vmail = (struct virtual_mail *)mail;
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody unsigned int i, count;
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody mails = array_get_modifiable(&vmail->backend_mails, &count);
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody for (i = 0; i < count; i++)
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody mailbox_header_lookup_unref(&vmail->wanted_headers);
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmodystatic struct mail *
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmodybackend_mail_find(struct virtual_mail *vmail, struct mailbox *box)
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody unsigned int i, count;
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody mails = array_get(&vmail->backend_mails, &count);
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody for (i = 0; i < count; i++) {
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmodyvirtual_mail_set_backend_mail(struct mail *mail,
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody struct virtual_mail *vmail = (struct virtual_mail *)mail;
1d940afbc02516d8c3d016780e1223a779844a1ePhil Carmody struct mailbox_transaction_context *backend_trans;
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody struct mailbox_header_lookup_ctx *backend_headers;
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody backend_trans = virtual_transaction_get(mail->transaction, bbox->box);
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody backend_headers = vmail->wanted_headers == NULL ? NULL :
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody vmail->backend_mail = mail_alloc(backend_trans, vmail->wanted_fields,
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody array_append(&vmail->backend_mails, &vmail->backend_mail, 1);
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmodystatic void virtual_mail_set_seq(struct mail *mail, uint32_t seq)
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody struct virtual_mail *vmail = (struct virtual_mail *)mail;
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody struct virtual_mailbox *mbox = (struct virtual_mailbox *)mail->box;
8bec19723b39071a1794e76dec35d151473cae5fPhil Carmody const void *data;
return FALSE;
return TRUE;
int tz;
int ret;
stream_r);
if (ret < 0) {
stream_r) < 0) {
const char **value_r)
NULL,