doveadm-mail.h revision 1db62753d9e3b5d71018889c8ef0a3722a307455
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen#ifndef DOVEADM_MAIL_H
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen#define DOVEADM_MAIL_H
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
5fb3f13537dffd15a31e997da133a721c0728af8Timo Sirainen#include "doveadm.h"
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen#include "module-context.h"
5fb3f13537dffd15a31e997da133a721c0728af8Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenstruct mail_user;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenstruct mail_storage_service_ctx;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenstruct mail_storage_service_input;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenstruct mail_storage_service_user;
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainenstruct doveadm_mail_cmd_context;
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenstruct doveadm_mail_cmd_vfuncs {
e09c7dc961cb9cab04ec7cc79215c2f6318fbde0Timo Sirainen bool (*parse_arg)(struct doveadm_mail_cmd_context *ctx,int c);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen void (*init)(struct doveadm_mail_cmd_context *ctx,
23878bd03d1de531e3261a25598beec621351910Timo Sirainen const char *const args[]);
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen int (*get_next_user)(struct doveadm_mail_cmd_context *ctx,
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen const char **username_r);
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen void (*run)(struct doveadm_mail_cmd_context *ctx,
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen struct mail_user *mail_user);
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen void (*deinit)(struct doveadm_mail_cmd_context *ctx);
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainen};
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenstruct doveadm_mail_cmd_module_register {
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen unsigned int id;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen};
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenunion doveadm_mail_cmd_module_context {
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen struct doveadm_mail_cmd_vfuncs super;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen struct doveadm_mail_cmd_module_register *reg;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen};
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenstruct doveadm_mail_cmd_context {
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen pool_t pool;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen const char *getopt_args;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen struct mail_storage_service_ctx *storage_service;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen /* search args aren't set for all mail commands */
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen struct mail_search_args *search_args;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen struct doveadm_mail_cmd_vfuncs v;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen ARRAY_DEFINE(module_contexts, union doveadm_mail_cmd_module_context *);
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen};
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenstruct doveadm_mail_cmd {
23878bd03d1de531e3261a25598beec621351910Timo Sirainen struct doveadm_mail_cmd_context *(*alloc)(void);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen const char *name;
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen const char *usage_args;
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen};
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo SirainenARRAY_DEFINE_TYPE(doveadm_mail_cmd, struct doveadm_mail_cmd);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenextern ARRAY_TYPE(doveadm_mail_cmd) doveadm_mail_cmds;
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenextern void (*hook_doveadm_mail_init)(struct doveadm_mail_cmd_context *ctx);
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainenextern struct doveadm_mail_cmd_module_register doveadm_mail_cmd_module_register;
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenbool doveadm_mail_try_run(const char *cmd_name, int argc, char *argv[]);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenvoid doveadm_mail_register_cmd(const struct doveadm_mail_cmd *cmd);
0f9a8663b0ff6fe30389d02284a2b002c40914ebTimo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenvoid doveadm_mail_usage(void);
a9efdb661eb7a8a33aacfdcc3486dcc675a21543Timo Sirainenvoid doveadm_mail_help(const struct doveadm_mail_cmd *cmd) ATTR_NORETURN;
a9efdb661eb7a8a33aacfdcc3486dcc675a21543Timo Sirainenvoid doveadm_mail_help_name(const char *cmd_name) ATTR_NORETURN;
fab850a6aee4aaef4f4795bd7946807a3ba45041Timo Sirainenvoid doveadm_mail_try_help_name(const char *cmd_name);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenvoid doveadm_mail_init(void);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainenvoid doveadm_mail_deinit(void);
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainenstruct mailbox *
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainendoveadm_mailbox_find_and_sync(struct mail_user *user, const char *mailbox);
97afa073e3e1e0301dc41173ec34beb08edcce50Timo Sirainenstruct mail_search_args *
97afa073e3e1e0301dc41173ec34beb08edcce50Timo Sirainendoveadm_mail_build_search_args(const char *const args[]);
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainen
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainenstruct doveadm_mail_cmd_context *
23878bd03d1de531e3261a25598beec621351910Timo Sirainendoveadm_mail_cmd_alloc_size(size_t size);
23878bd03d1de531e3261a25598beec621351910Timo Sirainen#define doveadm_mail_cmd_alloc(type) \
23878bd03d1de531e3261a25598beec621351910Timo Sirainen (type *)doveadm_mail_cmd_alloc_size(sizeof(type))
23878bd03d1de531e3261a25598beec621351910Timo Sirainen
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_expunge;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_search;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_fetch;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_altmove;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_list;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_create;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_delete;
23878bd03d1de531e3261a25598beec621351910Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_rename;
ecbbdf594f9329fc15a182bd6c7c4a7fb144ed74Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_subscribe;
ecbbdf594f9329fc15a182bd6c7c4a7fb144ed74Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_unsubscribe;
94ba4820927b906b333e39445c1508a29387c3aaTimo Sirainen
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen#endif