Mercurial > dovecot > core-2.2
view src/lib-storage/list/mailbox-list-index.h @ 13589:75679aca405a
mailbox list indexes: Error handling fixes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 02 Oct 2011 17:48:23 +0300 |
parents | 940ddec22822 |
children | 6912969d94e8 |
line wrap: on
line source
#ifndef MAILBOX_LIST_INDEX_H #define MAILBOX_LIST_INDEX_H #include "module-context.h" #include "mailbox-list-private.h" #define MAILBOX_LIST_INDEX_PREFIX "dovecot.list.index" #define INDEX_LIST_CONTEXT(obj) \ MODULE_CONTEXT(obj, mailbox_list_index_module) struct mail_index_view; struct mailbox; /* stored in mail_index_record.flags: */ enum mailbox_list_index_flags { MAILBOX_LIST_INDEX_FLAG_NONEXISTENT = MAIL_DELETED, MAILBOX_LIST_INDEX_FLAG_NOSELECT = MAIL_DRAFT, MAILBOX_LIST_INDEX_FLAG_NOINFERIORS = MAIL_ANSWERED, /* set during syncing for mailboxes that still exist */ MAILBOX_LIST_INDEX_FLAG_MARKED }; struct mailbox_list_index_header { uint8_t refresh_flag; /* array of { uint32_t id; char name[]; } */ }; struct mailbox_list_index_record { /* points to given id in header */ uint32_t name_id; /* parent mailbox's UID, 0 = root */ uint32_t parent_uid; /* the following fields are temporarily zero while unknown, also permanently zero for \NoSelect and \Nonexistent mailboxes: */ guid_128_t guid; uint32_t uid_validity; }; struct mailbox_list_index_msgs_record { uint32_t messages; uint32_t unseen; uint32_t recent; uint32_t uidnext; }; struct mailbox_list_index_node { struct mailbox_list_index_node *parent; struct mailbox_list_index_node *next; struct mailbox_list_index_node *children; uint32_t name_id, uid; enum mailbox_list_index_flags flags; const char *name; }; struct mailbox_list_index { union mailbox_list_module_context module_ctx; const char *path; struct mail_index *index; uint32_t ext_id, msgs_ext_id, hmodseq_ext_id; /* Number of iterations going on. Don't refresh mailbox list while any iterations are going on. */ int iter_refcount; pool_t mailbox_pool; /* uint32_t id => const char *name */ struct hash_table *mailbox_names; uint32_t highest_name_id; uint32_t sync_log_file_seq; uoff_t sync_log_file_offset; uint32_t sync_stamp; /* uint32_t uid => struct mailbox_list_index_node* */ struct hash_table *mailbox_hash; struct mailbox_list_index_node *mailbox_tree; }; struct mailbox_list_index_iterate_context { struct mailbox_list_iterate_context ctx; struct mailbox_list_iterate_context *backend_ctx; struct mailbox_info info; unsigned int parent_len; string_t *path; struct mailbox_list_index_node *next_node; char sep; unsigned int failed:1; }; extern MODULE_CONTEXT_DEFINE(mailbox_list_index_module, &mailbox_list_module_register); void mailbox_list_index_set_index_error(struct mailbox_list *list); struct mailbox_list_index_node * mailbox_list_index_lookup(struct mailbox_list *list, const char *name); int mailbox_list_index_refresh(struct mailbox_list *list); void mailbox_list_index_refresh_later(struct mailbox_list *list); struct mailbox_list_index_node * mailbox_list_index_node_find_sibling(struct mailbox_list_index_node *node, const char *name); void mailbox_list_index_reset(struct mailbox_list_index *ilist); int mailbox_list_index_parse(struct mailbox_list_index *ilist, struct mail_index_view *view, bool force); int mailbox_list_index_sync(struct mailbox_list *list); struct mailbox_list_iterate_context * mailbox_list_index_iter_init(struct mailbox_list *list, const char *const *patterns, enum mailbox_list_iter_flags flags); const struct mailbox_info * mailbox_list_index_iter_next(struct mailbox_list_iterate_context *ctx); int mailbox_list_index_iter_deinit(struct mailbox_list_iterate_context *ctx); void mailbox_list_index_status_set_info_flags(struct mailbox *box, uint32_t uid, enum mailbox_info_flags *flags); void mailbox_list_index_status_init(void); void mailbox_list_index_status_init_list(struct mailbox_list *list); #endif