~james-page/ubuntu/raring/dovecot/autopkgtest

« back to all changes in this revision

Viewing changes to src/lib-storage/index/imapc/imapc-storage.h

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-06-11 11:11:54 UTC
  • mfrom: (1.15.2) (4.1.27 sid)
  • Revision ID: package-import@ubuntu.com-20120611111154-678cwbdj6ktgsv1h
Tags: 1:2.1.7-1ubuntu1
* Merge from Debian unstable, remaining changes:
  + Add mail-stack-delivery package:
    - Update d/rules
    - d/control: convert existing dovecot-postfix package to a dummy
      package and add new mail-stack-delivery package.
    - Update maintainer scripts.
    - Rename d/dovecot-postfix.* to debian/mail-stack-delivery.*
    - d/mail-stack-delivery.preinst: Move previously installed backups and
      config files to a new package namespace.
    - d/mail-stack-delivery.prerm: Added to handle downgrades.
  + Use Snakeoil SSL certificates by default:
    - d/control: Depend on ssl-cert.
    - d/dovecot-core.postinst: Relax grep for SSL_* a bit.
  + Add autopkgtest to debian/tests/*.
  + Add ufw integration:
    - d/dovecot-core.ufw.profile: new ufw profile.
    - d/rules: install profile in dovecot-core.
    - d/control: dovecot-core - suggest ufw.
  + d/{control,rules}: enable PIE hardening.
  + d/dovecot-core.dirs: Added usr/share/doc/dovecot-core
  + Add apport hook:
    - d/rules, d/source_dovecot.py
  + Add upstart job:
    - d/rules, d/dovecot-core.dovecot.upstart, d/control,
      d/dovecot-core.dirs, dovecot-imapd.{postrm, postinst, prerm},
      d/dovecot-pop3d.{postinst, postrm, prerm}.
      d/mail-stack-deliver.postinst: Convert init script to upstart.
  + d/control: Added Pre-Depends: dpkg (>= 1.15.6) to dovecot-dbg to support
    xz compression in Ubuntu.
  + d/control: Demote dovecot-common Recommends: to Suggests: to prevent
    install of extra packages on upgrade.
  + d/patches/dovecot-drac.patch: Updated with version for dovecot >= 2.0.0.
  + d/control: Drop B-D on systemd.
* Dropped changes:
  + d/patches/fix-racey-restart.patch: part of 2.1.x, no longer required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef IMAPC_STORAGE_H
 
2
#define IMAPC_STORAGE_H
 
3
 
 
4
#include "index-storage.h"
 
5
#include "imapc-settings.h"
 
6
 
 
7
#define IMAPC_STORAGE_NAME "imapc"
 
8
#define IMAPC_INDEX_PREFIX "dovecot.index"
 
9
#define IMAPC_LIST_ESCAPE_CHAR '%'
 
10
 
 
11
struct imap_arg;
 
12
struct imapc_untagged_reply;
 
13
struct imapc_command_reply;
 
14
struct imapc_mailbox;
 
15
struct imapc_storage;
 
16
 
 
17
typedef void imapc_storage_callback_t(const struct imapc_untagged_reply *reply,
 
18
                                      struct imapc_storage *storage);
 
19
typedef void imapc_mailbox_callback_t(const struct imapc_untagged_reply *reply,
 
20
                                      struct imapc_mailbox *mbox);
 
21
 
 
22
struct imapc_storage_event_callback {
 
23
        const char *name;
 
24
        imapc_storage_callback_t *callback;
 
25
};
 
26
 
 
27
struct imapc_mailbox_event_callback {
 
28
        const char *name;
 
29
        imapc_mailbox_callback_t *callback;
 
30
};
 
31
 
 
32
#define IMAPC_HAS_FEATURE(mstorage, feature) \
 
33
        (((mstorage)->set->parsed_features & feature) != 0)
 
34
#define IMAPC_BOX_HAS_FEATURE(mbox, feature) \
 
35
        (((mbox)->storage->set->parsed_features & feature) != 0)
 
36
 
 
37
struct imapc_storage {
 
38
        struct mail_storage storage;
 
39
        const struct imapc_settings *set;
 
40
 
 
41
        struct ioloop *root_ioloop;
 
42
        struct imapc_mailbox_list *list;
 
43
        struct imapc_client *client;
 
44
 
 
45
        struct imapc_mailbox *cur_status_box;
 
46
        struct mailbox_status *cur_status;
 
47
        unsigned int reopen_count;
 
48
 
 
49
        ARRAY_DEFINE(untagged_callbacks, struct imapc_storage_event_callback);
 
50
};
 
51
 
 
52
struct imapc_mail_cache {
 
53
        uint32_t uid;
 
54
 
 
55
        /* either fd != -1 or buf != NULL */
 
56
        int fd;
 
57
        buffer_t *buf;
 
58
};
 
59
 
 
60
struct imapc_mailbox {
 
61
        struct mailbox box;
 
62
        struct imapc_storage *storage;
 
63
        struct imapc_client_mailbox *client_box;
 
64
 
 
65
        struct mail_index_transaction *delayed_sync_trans;
 
66
        struct mail_index_view *sync_view, *delayed_sync_view;
 
67
        struct timeout *to_idle_check, *to_idle_delay;
 
68
 
 
69
        ARRAY_DEFINE(fetch_mails, struct imapc_mail *);
 
70
 
 
71
        ARRAY_DEFINE(untagged_callbacks, struct imapc_mailbox_event_callback);
 
72
        ARRAY_DEFINE(resp_text_callbacks, struct imapc_mailbox_event_callback);
 
73
 
 
74
        enum mail_flags permanent_flags;
 
75
 
 
76
        ARRAY_TYPE(uint32_t) delayed_expunged_uids;
 
77
        uint32_t sync_uid_validity;
 
78
        uint32_t sync_uid_next;
 
79
        uint32_t sync_fetch_first_uid;
 
80
        uint32_t sync_next_lseq;
 
81
        uint32_t sync_next_rseq;
 
82
        uint32_t exists_count;
 
83
        uint32_t min_append_uid;
 
84
 
 
85
        /* keep the previous fetched message body cached,
 
86
           mainly for partial IMAP fetches */
 
87
        struct imapc_mail_cache prev_mail_cache;
 
88
 
 
89
        uint32_t prev_skipped_rseq, prev_skipped_uid;
 
90
        struct imapc_sync_context *sync_ctx;
 
91
 
 
92
        const char *guid_fetch_field_name;
 
93
 
 
94
        unsigned int selecting:1;
 
95
        unsigned int syncing:1;
 
96
        unsigned int initial_sync_done:1;
 
97
};
 
98
 
 
99
struct imapc_simple_context {
 
100
        struct imapc_storage *storage;
 
101
        int ret;
 
102
};
 
103
 
 
104
struct mail_save_context *
 
105
imapc_save_alloc(struct mailbox_transaction_context *_t);
 
106
int imapc_save_begin(struct mail_save_context *ctx, struct istream *input);
 
107
int imapc_save_continue(struct mail_save_context *ctx);
 
108
int imapc_save_finish(struct mail_save_context *ctx);
 
109
void imapc_save_cancel(struct mail_save_context *ctx);
 
110
int imapc_copy(struct mail_save_context *ctx, struct mail *mail);
 
111
 
 
112
int imapc_transaction_save_commit_pre(struct mail_save_context *ctx);
 
113
void imapc_transaction_save_commit_post(struct mail_save_context *ctx,
 
114
                                        struct mail_index_transaction_commit_result *result);
 
115
void imapc_transaction_save_rollback(struct mail_save_context *ctx);
 
116
 
 
117
void imapc_storage_run(struct imapc_storage *storage);
 
118
void imapc_mail_cache_free(struct imapc_mail_cache *cache);
 
119
int imapc_mailbox_select(struct imapc_mailbox *mbox);
 
120
 
 
121
void imapc_copy_error_from_reply(struct imapc_storage *storage,
 
122
                                 enum mail_error default_error,
 
123
                                 const struct imapc_command_reply *reply);
 
124
void imapc_simple_context_init(struct imapc_simple_context *sctx,
 
125
                               struct imapc_storage *storage);
 
126
void imapc_simple_run(struct imapc_simple_context *sctx);
 
127
void imapc_simple_callback(const struct imapc_command_reply *reply,
 
128
                           void *context);
 
129
int imapc_mailbox_commit_delayed_trans(struct imapc_mailbox *mbox,
 
130
                                       bool *changes_r);
 
131
void imapc_mailbox_noop(struct imapc_mailbox *mbox);
 
132
void imapc_mailbox_set_corrupted(struct imapc_mailbox *mbox,
 
133
                                 const char *reason, ...) ATTR_FORMAT(2, 3);
 
134
 
 
135
void imapc_storage_register_untagged(struct imapc_storage *storage,
 
136
                                     const char *name,
 
137
                                     imapc_storage_callback_t *callback);
 
138
void imapc_mailbox_register_untagged(struct imapc_mailbox *mbox,
 
139
                                     const char *name,
 
140
                                     imapc_mailbox_callback_t *callback);
 
141
void imapc_mailbox_register_resp_text(struct imapc_mailbox *mbox,
 
142
                                      const char *key,
 
143
                                      imapc_mailbox_callback_t *callback);
 
144
 
 
145
void imapc_mailbox_register_callbacks(struct imapc_mailbox *mbox);
 
146
 
 
147
#endif