dsync-mailbox.h revision c864fdd520b0c3f10a4b9bc5373368f4ae8faaff
5a580c3a38ced62d4bcc95b8ac7c4f2935b5d294Timo Sirainen#ifndef DSYNC_MAILBOX_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#define DSYNC_MAILBOX_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen#include "mail-storage.h"
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
993e6c2caaae971dd3c34913a42d854e3b623261Timo Sirainenstruct dsync_brain;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* Mailbox that is going to be synced. Its name was already sent in the
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen mailbox tree. */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct dsync_mailbox {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen guid_128_t mailbox_guid;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen bool mailbox_lost;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen bool mailbox_ignore;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen bool have_guids, have_save_guids, have_only_guid128;
7888a9d2008eab9985096c46e1da9ee985c22a2aTimo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen uint32_t uid_validity, uid_next, messages_count, first_recent_uid;
a24f6b02ed8d0dde933a715be1c86f01977bf610Timo Sirainen uint64_t highest_modseq, highest_pvt_modseq;
a24f6b02ed8d0dde933a715be1c86f01977bf610Timo Sirainen ARRAY_TYPE(mailbox_cache_field) cache_fields;
213b139965e8bde6c8aff02ffd9fd39a74c887a9Timo Sirainen};
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
a24f6b02ed8d0dde933a715be1c86f01977bf610Timo Sirainenstruct dsync_mailbox_attribute {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen enum mail_attribute_type type;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char *key;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen /* if both values are NULL = not looked up yet / deleted */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char *value;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct istream *value_stream;
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen time_t last_change; /* 0 = unknown */
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen uint64_t modseq; /* 0 = unknown */
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen bool deleted; /* attribute is known to have been deleted */
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen bool exported; /* internally used by exporting */
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen};
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen#define DSYNC_ATTR_HAS_VALUE(attr) \
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen ((attr)->value != NULL || (attr)->value_stream != NULL)
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainenvoid dsync_mailbox_attribute_dup(pool_t pool,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen const struct dsync_mailbox_attribute *src,
bbce20cb4e5739e9a06058cf8ee1f38a7f6884f6Timo Sirainen struct dsync_mailbox_attribute *dest_r);
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenint dsync_mailbox_lock(struct dsync_brain *brain, struct mailbox *box,
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen struct file_lock **lock_r);
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen
93b29720c5141f787bd1861796867e4595c9d084Timo Sirainen#endif
d5cebe7f98e63d4e2822863ef2faa4971e8b3a5dTimo Sirainen