mail-index-view-private.h revision f1765f773591385d513fb68e1799fd1cb4206852
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen#ifndef MAIL_INDEX_VIEW_PRIVATE_H
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen#define MAIL_INDEX_VIEW_PRIVATE_H
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen
90adcaa0a00eba29b7fbd50ca66be11c8d086d6aTimo Sirainen#include "mail-index-private.h"
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen
ea5f188fc29dfaa0c4071e6413e16e1d04263722Timo Sirainenstruct mail_index_view_log_sync_area {
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen uint32_t log_file_seq;
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen unsigned int length;
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen uoff_t log_file_offset;
f1901fd21906911f7be075c965ac882f6a87b4c3Timo Sirainen};
63a61b7a739ae0f3f520215137d9c50f94d0f34fTimo SirainenARRAY_DEFINE_TYPE(view_log_sync_area, struct mail_index_view_log_sync_area);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen
18565c69efcd7db003dbf27cf625ed822e889fb1Timo Sirainenstruct mail_index_view_vfuncs {
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen void (*close)(struct mail_index_view *view);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen uint32_t (*get_messages_count)(struct mail_index_view *view);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen const struct mail_index_header *
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen (*get_header)(struct mail_index_view *view);
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen const struct mail_index_record *
d22301419109ed4a38351715e6760011421dadecTimo Sirainen (*lookup_full)(struct mail_index_view *view, uint32_t seq,
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen struct mail_index_map **map_r, bool *expunged_r);
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen void (*lookup_uid)(struct mail_index_view *view, uint32_t seq,
d22301419109ed4a38351715e6760011421dadecTimo Sirainen uint32_t *uid_r);
d22301419109ed4a38351715e6760011421dadecTimo Sirainen void (*lookup_seq_range)(struct mail_index_view *view,
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen uint32_t first_uid, uint32_t last_uid,
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen uint32_t *first_seq_r, uint32_t *last_seq_r);
86c6b2546b0bbfce326583f14d05f59674a6d861Timo Sirainen void (*lookup_first)(struct mail_index_view *view,
86c6b2546b0bbfce326583f14d05f59674a6d861Timo Sirainen enum mail_flags flags, uint8_t flags_mask,
b66d803de86bfb411165b3465b0d9ef64ecfe2a1Timo Sirainen uint32_t *seq_r);
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen void (*lookup_ext_full)(struct mail_index_view *view, uint32_t seq,
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen uint32_t ext_id, struct mail_index_map **map_r,
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen const void **data_r, bool *expunged_r);
a0b0d629931773c17a236f6214adbe0e13b9b3fdTimo Sirainen void (*get_header_ext)(struct mail_index_view *view,
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen struct mail_index_map *map, uint32_t ext_id,
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen const void **data_r, size_t *data_size_r);
af1f4b17a92ca7b2661737e65c7849df289d3070Timo Sirainen bool (*ext_get_reset_id)(struct mail_index_view *view,
c04f9a724a7b3cc649485a61b0a540868d25d71bTimo Sirainen struct mail_index_map *map,
d22301419109ed4a38351715e6760011421dadecTimo Sirainen uint32_t ext_id, uint32_t *reset_id_r);
d22301419109ed4a38351715e6760011421dadecTimo Sirainen};
f1901fd21906911f7be075c965ac882f6a87b4c3Timo Sirainen
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainenunion mail_index_view_module_context {
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen struct mail_index_module_register *reg;
01cbf4ac5d44137ab434791be7f838d98d0fcf3bTimo Sirainen};
d22301419109ed4a38351715e6760011421dadecTimo Sirainen
4b41116563110d00330896a568eff1078c382827Timo Sirainenstruct mail_index_view {
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen int refcount;
e34d170f8f0e084bd94bfbc1a7085ece67e508dfTimo Sirainen
e34d170f8f0e084bd94bfbc1a7085ece67e508dfTimo Sirainen struct mail_index_view_vfuncs v;
e34d170f8f0e084bd94bfbc1a7085ece67e508dfTimo Sirainen struct mail_index *index;
e34d170f8f0e084bd94bfbc1a7085ece67e508dfTimo Sirainen struct mail_transaction_log_view *log_view;
ebe6df72f1309135f02b6a4d2aef1e81a073f91cTimo Sirainen
b12a6d0e54318273acf0d0fb8b3f4c29f67b62b0Timo Sirainen uint32_t indexid;
b12a6d0e54318273acf0d0fb8b3f4c29f67b62b0Timo Sirainen unsigned int inconsistency_id;
b12a6d0e54318273acf0d0fb8b3f4c29f67b62b0Timo Sirainen
b12a6d0e54318273acf0d0fb8b3f4c29f67b62b0Timo Sirainen struct mail_index_map *map;
b12a6d0e54318273acf0d0fb8b3f4c29f67b62b0Timo Sirainen /* All mappings where we have returned records. They need to be kept
b12a6d0e54318273acf0d0fb8b3f4c29f67b62b0Timo Sirainen valid until view is synchronized. */
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen ARRAY_DEFINE(map_refs, struct mail_index_map *);
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainen
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainen /* expunge <= head */
d22301419109ed4a38351715e6760011421dadecTimo Sirainen uint32_t log_file_expunge_seq, log_file_head_seq;
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainen uoff_t log_file_expunge_offset, log_file_head_offset;
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen
86c6b2546b0bbfce326583f14d05f59674a6d861Timo Sirainen /* Transaction log offsets which we don't want to return in view sync */
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen ARRAY_TYPE(view_log_sync_area) syncs_hidden;
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen /* Module-specific contexts. */
86c6b2546b0bbfce326583f14d05f59674a6d861Timo Sirainen ARRAY_DEFINE(module_contexts, union mail_index_view_module_context *);
86c6b2546b0bbfce326583f14d05f59674a6d861Timo Sirainen
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen int transactions;
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen unsigned int inconsistent:1;
d22301419109ed4a38351715e6760011421dadecTimo Sirainen /* this view was created by mail_index_sync_begin() */
1f1ee8db68d9ae1604350801cd8dc33ebe29fe8aTimo Sirainen unsigned int index_sync_view:1;
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen /* this view is being synced */
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen unsigned int syncing:1;
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen};
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen
86c6b2546b0bbfce326583f14d05f59674a6d861Timo Sirainenstruct mail_index_view *
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainenmail_index_view_open_with_map(struct mail_index *index,
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainen struct mail_index_map *map);
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainenvoid mail_index_view_clone(struct mail_index_view *dest,
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainen const struct mail_index_view *src);
86c6b2546b0bbfce326583f14d05f59674a6d861Timo Sirainenvoid mail_index_view_ref(struct mail_index_view *view);
73247459cf41eb1e5ae5bc61354db46d3b05ee75Timo Sirainenvoid mail_index_view_unref_maps(struct mail_index_view *view);
d30da25fb6be1f1c667d93767c9194000194b618Timo Sirainenvoid mail_index_view_add_hidden_transaction(struct mail_index_view *view,
d30da25fb6be1f1c667d93767c9194000194b618Timo Sirainen uint32_t log_file_seq,
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen uoff_t log_file_offset,
597dce34068d603fb759b4dff404b34049213e51Timo Sirainen unsigned int length);
63a61b7a739ae0f3f520215137d9c50f94d0f34fTimo Sirainen
cd83124e5d070a016c590bb0b1096d7828c7b6adTimo Sirainenstruct mail_index_view *mail_index_dummy_view_open(struct mail_index *index);
d22301419109ed4a38351715e6760011421dadecTimo Sirainen
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen#endif
fe6c1556d3529a6376d4cbb3766c34aebde0de99Timo Sirainen