mail-index-view-private.h revision b0be0bead3d6963149f7f2a9504b8ab5aced9af5
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen#ifndef __MAIL_INDEX_VIEW_PRIVATE_H
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde#define __MAIL_INDEX_VIEW_PRIVATE_H
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen#include "mail-index-private.h"
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct mail_index_view_log_sync_area {
9bb91f1dbf7cf8cfbd2df7784101df98d59fb46dTimo Sirainen uint32_t log_file_seq;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int length;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde uoff_t log_file_offset;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo SirainenARRAY_DEFINE_TYPE(view_log_sync_area, struct mail_index_view_log_sync_area);
a43145989f87ec68754e21234e7b6d892c4a4421Timo Sirainen
d99107ddf4d9bccb710994482daf65276a9d6321Timo Sirainenstruct mail_index_view_vfuncs {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde void (*close)(struct mail_index_view *view);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde uint32_t (*get_messages_count)(struct mail_index_view *view);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const struct mail_index_header *
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde (*get_header)(struct mail_index_view *view);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde int (*lookup_full)(struct mail_index_view *view, uint32_t seq,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen struct mail_index_map **map_r,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen const struct mail_index_record **rec_r);
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen int (*lookup_uid)(struct mail_index_view *view, uint32_t seq,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen uint32_t *uid_r);
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen int (*lookup_uid_range)(struct mail_index_view *view,
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde uint32_t first_uid, uint32_t last_uid,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen uint32_t *first_seq_r, uint32_t *last_seq_r);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde int (*lookup_first)(struct mail_index_view *view, enum mail_flags flags,
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen uint8_t flags_mask, uint32_t *seq_r);
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen int (*lookup_ext_full)(struct mail_index_view *view, uint32_t seq,
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen uint32_t ext_id, struct mail_index_map **map_r,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen const void **data_r);
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen int (*get_header_ext)(struct mail_index_view *view,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen struct mail_index_map *map, uint32_t ext_id,
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde const void **data_r, size_t *data_size_r);
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen};
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildeunion mail_index_view_module_context {
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct mail_index_module_register *reg;
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen};
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct mail_index_view {
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen int refcount;
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen struct mail_index_view_vfuncs v;
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen struct mail_index *index;
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen struct mail_transaction_log_view *log_view;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen unsigned int indexid;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct mail_index_map *map;
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen /* After syncing view, map is replaced with sync_new_map. */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde struct mail_index_map *sync_new_map;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde /* All mappings where we have returned records. They need to be kept
9f10cc61ec303351b43e54155c86699ef53cb8beTimo Sirainen valid until view is synchronized. */
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen ARRAY_DEFINE(map_refs, struct mail_index_map *);
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen
9f10cc61ec303351b43e54155c86699ef53cb8beTimo Sirainen struct mail_index_header hdr;
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen /* expunge <= head */
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen uint32_t log_file_expunge_seq, log_file_head_seq;
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen uoff_t log_file_expunge_offset, log_file_head_offset;
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen /* Transaction log offsets which we don't want to return in view sync */
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen ARRAY_TYPE(view_log_sync_area) syncs_hidden;
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen /* Module-specific contexts. */
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen ARRAY_DEFINE(module_contexts, union mail_index_view_module_context *);
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen int transactions;
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen unsigned int lock_id;
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen unsigned int inconsistent:1;
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen /* this view was created by mail_index_sync_begin() */
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int index_sync_view:1;
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen /* this view is being synced */
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen unsigned int syncing:1;
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde};
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildestruct mail_index_view *
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainenmail_index_view_open_with_map(struct mail_index_map *map);
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainenvoid mail_index_view_clone(struct mail_index_view *dest,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen const struct mail_index_view *src);
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainenvoid mail_index_view_ref(struct mail_index_view *view);
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainenint mail_index_view_lock(struct mail_index_view *view);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildeint mail_index_view_lock_head(struct mail_index_view *view);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildevoid mail_index_view_unref_maps(struct mail_index_view *view);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wildevoid mail_index_view_add_hidden_transaction(struct mail_index_view *view,
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen uint32_t log_file_seq,
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde uoff_t log_file_offset,
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde unsigned int length);
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainenstruct mail_index_view *mail_index_dummy_view_open(struct mail_index *index);
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen#endif
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen