doveadm-mail.h revision b8b085f7bc6f1c0367802a9f00062bbbd981690d
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#ifndef DOVEADM_MAIL_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#define DOVEADM_MAIL_H
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#include <stdio.h>
94a8cb0ee1d85569ad1a2acacd92d3ce22f8a1cbTimo Sirainen#include "doveadm.h"
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#include "module-context.h"
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainenstruct mail_user;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct mail_storage_service_ctx;
6a19e109ee8c5a6f688da83a86a7f6abeb71abddTimo Sirainenstruct mail_storage_service_input;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct mail_storage_service_user;
d9fdacd5fb3e07997e5c389739d2054f0c8441d8Timo Sirainenstruct doveadm_mail_cmd_context;
d9fdacd5fb3e07997e5c389739d2054f0c8441d8Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct doveadm_mail_cmd_vfuncs {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen bool (*parse_arg)(struct doveadm_mail_cmd_context *ctx,int c);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen void (*init)(struct doveadm_mail_cmd_context *ctx,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char *const args[]);
31ddc75584c5cde53d2e78a737587f2e7fdcb0d2Timo Sirainen int (*get_next_user)(struct doveadm_mail_cmd_context *ctx,
8887bf3757d51d73887dd20b1db3334d867d3817Timo Sirainen const char **username_r);
8887bf3757d51d73887dd20b1db3334d867d3817Timo Sirainen void (*run)(struct doveadm_mail_cmd_context *ctx,
369a1084c500a9df7448ffa9409ce32e42060bc2Timo Sirainen struct mail_user *mail_user);
8887bf3757d51d73887dd20b1db3334d867d3817Timo Sirainen void (*deinit)(struct doveadm_mail_cmd_context *ctx);
a53cb86b4d733d9c48ee4d285bed477c80825804Timo Sirainen};
a53cb86b4d733d9c48ee4d285bed477c80825804Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct doveadm_mail_cmd_module_register {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen unsigned int id;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen};
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenunion doveadm_mail_cmd_module_context {
b7b81543899e306c71e6152516d8698416162bcbTimo Sirainen struct doveadm_mail_cmd_vfuncs super;
fd3d711f219fd6813492acbe051e04327f0ca0f0Timo Sirainen struct doveadm_mail_cmd_module_register *reg;
e12648867876aaec17e06ee4caef0bb60363449dTimo Sirainen};
e12648867876aaec17e06ee4caef0bb60363449dTimo Sirainen
e12648867876aaec17e06ee4caef0bb60363449dTimo Sirainenstruct doveadm_mail_cmd_context {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen pool_t pool;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char *getopt_args;
fd3d711f219fd6813492acbe051e04327f0ca0f0Timo Sirainen struct mail_storage_service_ctx *storage_service;
fd3d711f219fd6813492acbe051e04327f0ca0f0Timo Sirainen /* search args aren't set for all mail commands */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct mail_search_args *search_args;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct mail_user *cur_mail_user;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen struct doveadm_mail_cmd_vfuncs v;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen ARRAY_DEFINE(module_contexts, union doveadm_mail_cmd_module_context *);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen unsigned int iterate_all_users:1;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen unsigned int dm_printf_last_lf:1;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen};
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
8e7da21696c9f8a6d5e601243fb6172ec85d47b2Timo Sirainenstruct doveadm_mail_cmd {
024815ea2ffdda9ea79919f18e865663977f73eaTimo Sirainen struct doveadm_mail_cmd_context *(*alloc)(void);
024815ea2ffdda9ea79919f18e865663977f73eaTimo Sirainen const char *name;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen const char *usage_args;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen};
811f2e26d9782d9cb99fdf82e18ffa0a77564fe2Timo SirainenARRAY_DEFINE_TYPE(doveadm_mail_cmd, struct doveadm_mail_cmd);
811f2e26d9782d9cb99fdf82e18ffa0a77564fe2Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenextern ARRAY_TYPE(doveadm_mail_cmd) doveadm_mail_cmds;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenextern void (*hook_doveadm_mail_init)(struct doveadm_mail_cmd_context *ctx);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenextern struct doveadm_mail_cmd_module_register doveadm_mail_cmd_module_register;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenbool doveadm_mail_try_run(const char *cmd_name, int argc, char *argv[]);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid doveadm_mail_register_cmd(const struct doveadm_mail_cmd *cmd);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid doveadm_mail_usage(string_t *out);
d482b35af87f5fd872bad007da0475813a401a49Timo Sirainenvoid doveadm_mail_help(const struct doveadm_mail_cmd *cmd) ATTR_NORETURN;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid doveadm_mail_help_name(const char *cmd_name) ATTR_NORETURN;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid doveadm_mail_try_help_name(const char *cmd_name);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenbool doveadm_mail_has_subcommands(const char *cmd_name);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid doveadm_mail_init(void);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid doveadm_mail_deinit(void);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct mailbox *
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainendoveadm_mailbox_find_and_sync(struct mail_user *user, const char *mailbox);
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainenstruct mail_search_args *
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainendoveadm_mail_build_search_args(const char *const args[]);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenconst char *const *doveadm_mailbox_args_to_mutf7(const char *const args[]);
8aacc9e7c84f8376822823ec98c2f551d4919b2eTimo Sirainenstruct mail_search_args *
2a734f36105e33ab452d057df6bc7a2b7d9f96f0Timo Sirainendoveadm_mail_mailbox_search_args_build(const char *const args[]);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
8aacc9e7c84f8376822823ec98c2f551d4919b2eTimo Sirainenstruct doveadm_mail_cmd_context *
8aacc9e7c84f8376822823ec98c2f551d4919b2eTimo Sirainendoveadm_mail_cmd_alloc_size(size_t size);
8aacc9e7c84f8376822823ec98c2f551d4919b2eTimo Sirainen#define doveadm_mail_cmd_alloc(type) \
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen (type *)doveadm_mail_cmd_alloc_size(sizeof(type))
2a6af811ea3de3cf9e2f15e446674dd21b0705f3Timo Sirainen
d2475500ee2a5f3c07eb22886797cef0e11ce7c4Timo Sirainen/* same as printf(), but when running with -A parameter,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen prefix each line with username. */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid dm_printf(struct doveadm_mail_cmd_context *ctx, const char *format, ...)
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen ATTR_FORMAT(2, 3);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainenstruct doveadm_mail_cmd cmd_expunge;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct doveadm_mail_cmd cmd_search;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct doveadm_mail_cmd cmd_fetch;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_altmove;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_list;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_create;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_delete;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_rename;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_subscribe;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_unsubscribe;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenstruct doveadm_mail_cmd cmd_mailbox_status;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
26ff8f8a4867bf8e9551a27a2de8c12cd138b065Timo Sirainen#endif
26ff8f8a4867bf8e9551a27a2de8c12cd138b065Timo Sirainen