dbox-storage.h revision 777ff25e82e0305e2696bcbe3c6e0274e3e8ce10
0e126d3cc0f2cb6141106843ebff09c67f75bff8Daniel Couto Vale#ifndef DBOX_STORAGE_H
0e126d3cc0f2cb6141106843ebff09c67f75bff8Daniel Couto Vale#define DBOX_STORAGE_H
a72767dfae41be032792284ef42c3a12a45aa4fdEileen Bolloff
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff#include "index-storage.h"
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff#include "mailbox-list-private.h"
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff#define DBOX_STORAGE_NAME "dbox"
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff#define DBOX_SUBSCRIPTION_FILE_NAME ".dbox-subscriptions"
a72767dfae41be032792284ef42c3a12a45aa4fdEileen Bolloff#define DBOX_UIDVALIDITY_FILE_NAME ".dbox-uidvalidity"
a72767dfae41be032792284ef42c3a12a45aa4fdEileen Bolloff#define DBOX_INDEX_PREFIX "dovecot.index"
b479f88ab203603ad81cad637cad3b1050184bf2Daniel Couto Vale
a72767dfae41be032792284ef42c3a12a45aa4fdEileen Bolloff#define DBOX_MAILDIR_NAME "dbox-Mails"
b479f88ab203603ad81cad637cad3b1050184bf2Daniel Couto Vale#define DBOX_INDEX_NAME "dbox.index"
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff#define DBOX_MAIL_FILE_MULTI_PREFIX "m."
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff#define DBOX_MAIL_FILE_UID_PREFIX "u."
1115fd7e3171f7aaeb98472789edf016996b7278henning mueller#define DBOX_MAIL_FILE_MULTI_FORMAT DBOX_MAIL_FILE_MULTI_PREFIX"%u"
3dc5cf7d5b8a1b07204e85997595907de39df819Eileen Bolloff#define DBOX_MAIL_FILE_UID_FORMAT DBOX_MAIL_FILE_UID_PREFIX"%u"
37ae8a21cfb5b55050c025d1b23aabaf841bd301Eileen Bolloff
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff/* How often to scan for stale temp files (based on dir's atime) */
c3960e37f5f7b3881e4ac90cc1aa61c97222d2c5Daniel Couto Vale#define DBOX_TMP_SCAN_SECS (8*60*60)
1115fd7e3171f7aaeb98472789edf016996b7278henning mueller/* Delete temp files having ctime older than this. */
37ae8a21cfb5b55050c025d1b23aabaf841bd301Eileen Bolloff#define DBOX_TMP_DELETE_SECS (36*60*60)
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff/* Default rotation settings */
1115fd7e3171f7aaeb98472789edf016996b7278henning mueller#define DBOX_DEFAULT_ROTATE_SIZE (2*1024*1024)
37ae8a21cfb5b55050c025d1b23aabaf841bd301Eileen Bolloff#define DBOX_DEFAULT_ROTATE_MIN_SIZE (1024*16)
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff#define DBOX_DEFAULT_ROTATE_DAYS 0
7e93ca8c8fcef80ae943587eea6b7de288249f97Daniel Couto Vale#define DBOX_DEFAULT_MAX_OPEN_FILES 64
3a2e1a2642136a6e39213b7bd635c81736df7d10Daniel Couto Vale
37ae8a21cfb5b55050c025d1b23aabaf841bd301Eileen Bolloff/* Flag specifies if the message should be in primary or alternative storage */
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff#define DBOX_INDEX_FLAG_ALT MAIL_INDEX_MAIL_FLAG_BACKEND
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff
3a2e1a2642136a6e39213b7bd635c81736df7d10Daniel Couto Valestruct dbox_index_header {
37ae8a21cfb5b55050c025d1b23aabaf841bd301Eileen Bolloff uint32_t unused; /* for backwards compatibility */
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff uint32_t highest_maildir_uid;
25e680b4f0bbd68678787e4d349bc99e23ee0c73Eileen Bolloff};
1115fd7e3171f7aaeb98472789edf016996b7278henning mueller
0e126d3cc0f2cb6141106843ebff09c67f75bff8Daniel Couto Valestruct dbox_storage {
struct mail_storage storage;
union mailbox_list_module_context list_module_ctx;
const char *alt_dir;
};
struct dbox_mail_index_record {
uint32_t file_id;
uint32_t offset;
};
struct dbox_mailbox {
struct index_mailbox ibox;
struct dbox_storage *storage;
struct maildir_uidlist *maildir_uidlist;
uint32_t highest_maildir_uid;
struct dbox_index *dbox_index;
uint32_t dbox_ext_id, dbox_hdr_ext_id;
uoff_t rotate_size, rotate_min_size;
unsigned int rotate_days;
ARRAY_DEFINE(open_files, struct dbox_file *);
unsigned int max_open_files;
const char *path, *alt_path;
};
struct dbox_transaction_context {
struct index_transaction_context ictx;
union mail_index_transaction_module_context module_ctx;
uint32_t first_saved_mail_seq;
struct dbox_save_context *save_ctx;
};
extern struct mail_vfuncs dbox_mail_vfuncs;
void dbox_transaction_class_init(void);
void dbox_transaction_class_deinit(void);
struct mail *
dbox_mail_alloc(struct mailbox_transaction_context *t,
enum mail_fetch_field wanted_fields,
struct mailbox_header_lookup_ctx *wanted_headers);
struct mail_save_context *
dbox_save_alloc(struct mailbox_transaction_context *_t);
int dbox_save_begin(struct mail_save_context *ctx, struct istream *input);
int dbox_save_continue(struct mail_save_context *ctx);
int dbox_save_finish(struct mail_save_context *ctx);
void dbox_save_cancel(struct mail_save_context *ctx);
int dbox_transaction_save_commit_pre(struct dbox_save_context *ctx);
void dbox_transaction_save_commit_post(struct dbox_save_context *ctx);
void dbox_transaction_save_rollback(struct dbox_save_context *ctx);
#endif