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