view src/lib-storage/index/imapc/imapc-storage.h @ 12580:7dd1e45721ae

Added initial implementation of "imapc" storage. It can be used to create a "smart IMAP proxy" where Dovecot uses remote IMAP server as a mail storage. This is a very rough early implementation. Performance isn't good, many required features are missing, error handling is lacking and code needs de-uglification. Still, it should be enough for selecting INBOX and accessing mails in it.
author Timo Sirainen <tss@iki.fi>
date Sun, 16 Jan 2011 18:08:23 +0200
parents
children 1b8fb4ff2bb3
line wrap: on
line source

#ifndef IMAPC_STORAGE_H
#define IMAPC_STORAGE_H

#include "index-storage.h"

#define IMAPC_STORAGE_NAME "imapc"

struct imap_arg;
struct imapc_command_reply;

struct imapc_storage {
	struct mail_storage storage;
	struct imapc_client *client;
};

struct imapc_mailbox {
	struct mailbox box;
	struct imapc_storage *storage;
	struct imapc_client_mailbox *client_box;

	struct mail_index_transaction *delayed_sync_trans;
	struct mail_index_view *delayed_sync_view;

	struct mail *cur_fetch_mail;

	unsigned int new_msgs:1;
};

extern struct mail_vfuncs imapc_mail_vfuncs;

struct mail_save_context *
imapc_save_alloc(struct mailbox_transaction_context *_t);
int imapc_save_begin(struct mail_save_context *ctx, struct istream *input);
int imapc_save_continue(struct mail_save_context *ctx);
int imapc_save_finish(struct mail_save_context *ctx);
void imapc_save_cancel(struct mail_save_context *ctx);

int imapc_transaction_save_commit_pre(struct mail_save_context *ctx);
void imapc_transaction_save_commit_post(struct mail_save_context *ctx,
					struct mail_index_transaction_commit_result *result);
void imapc_transaction_save_rollback(struct mail_save_context *ctx);

struct mail_search_context *
imapc_search_init(struct mailbox_transaction_context *t,
		  struct mail_search_args *args,
		  const enum mail_sort_type *sort_program);
bool imapc_search_next_nonblock(struct mail_search_context *_ctx,
				struct mail *mail, bool *tryagain_r);
void imapc_fetch_mail_update(struct mail *mail, const struct imap_arg *args);

void imapc_async_stop_callback(const struct imapc_command_reply *reply,
			       void *context);

#endif