-
Notifications
You must be signed in to change notification settings - Fork 271
/
doveadm-cmd.h
145 lines (121 loc) · 5.17 KB
/
doveadm-cmd.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#ifndef DOVEADM_CMD_H
#define DOVEADM_CMD_H
#define DOVEADM_CMD_PARAMS_START .parameters = (const struct doveadm_cmd_param[]){
#define DOVEADM_CMD_PARAM(optP, nameP, typeP, flagP ) { .short_opt = optP, .name = nameP, .type = typeP, .flags = flagP },
#define DOVEADM_CMD_PARAMS_END { .short_opt = '\0', .name = NULL, .type = CMD_PARAM_BOOL, .flags = CMD_PARAM_FLAG_NONE } }
struct doveadm_cmd_ver2;
struct doveadm_mail_cmd_context;
typedef void doveadm_command_t(int argc, char *argv[]);
typedef enum {
CMD_PARAM_BOOL = 0, /* value will contain 1 (not pointer) */
CMD_PARAM_INT64, /* ditto but contains number (not pointer) */
CMD_PARAM_IP, /* value contains struct ip_addr */
CMD_PARAM_STR, /* value contains const char* */
CMD_PARAM_ARRAY, /* value contains const char*[] */
CMD_PARAM_ISTREAM /* value contains struct istream* */
} doveadm_cmd_param_t;
typedef enum {
CMD_PARAM_FLAG_NONE = 0x0,
CMD_PARAM_FLAG_POSITIONAL = 0x1,
CMD_PARAM_FLAG_DO_NOT_EXPOSE = 0x2,
} doveadm_cmd_param_flag_t;
typedef enum {
CMD_FLAG_NONE = 0x0,
CMD_FLAG_HIDDEN = 0x1
} doveadm_cmd_flag_t;
struct doveadm_cmd_param {
char short_opt;
const char *name;
doveadm_cmd_param_t type;
bool value_set;
struct {
bool v_bool;
int64_t v_int64;
const char* v_string;
ARRAY_TYPE(const_string) v_array;
struct ip_addr v_ip;
struct istream* v_istream;
} value;
doveadm_cmd_param_flag_t flags;
};
ARRAY_DEFINE_TYPE(doveadm_cmd_param_arr_t, struct doveadm_cmd_param);
typedef void doveadm_command_ver2_t(const struct doveadm_cmd_ver2* cmd,
int argc, const struct doveadm_cmd_param[]);
struct doveadm_cmd {
doveadm_command_t *cmd;
const char *name;
const char *short_usage;
};
struct doveadm_cmd_ver2 {
doveadm_command_ver2_t *cmd;
doveadm_command_t *old_cmd;
struct doveadm_mail_cmd_context *(*mail_cmd)(void);
const char *name;
const char *usage;
doveadm_cmd_flag_t flags;
const struct doveadm_cmd_param *parameters;
};
struct doveadm_cmd_attributes {
int argc;
const char **argv;
};
ARRAY_DEFINE_TYPE(doveadm_cmd, struct doveadm_cmd);
extern ARRAY_TYPE(doveadm_cmd) doveadm_cmds;
ARRAY_DEFINE_TYPE(doveadm_cmd_ver2, struct doveadm_cmd_ver2);
extern ARRAY_TYPE(doveadm_cmd_ver2) doveadm_cmds_ver2;
extern struct doveadm_cmd doveadm_cmd_dump;
extern struct doveadm_cmd doveadm_cmd_pw;
extern struct doveadm_cmd doveadm_cmd_who;
extern struct doveadm_cmd doveadm_cmd_kick;
extern struct doveadm_cmd doveadm_cmd_mailbox_mutf7;
extern struct doveadm_cmd doveadm_cmd_sis_deduplicate;
extern struct doveadm_cmd doveadm_cmd_sis_find;
extern struct doveadm_cmd doveadm_cmd_zlibconnect;
void doveadm_register_cmd(const struct doveadm_cmd *cmd);
const struct doveadm_cmd *
doveadm_cmd_find_with_args(const char *cmd_name, int *argc, const char **argv[]);
void doveadm_register_auth_commands(void);
void doveadm_register_director_commands(void);
void doveadm_register_proxy_commands(void);
void doveadm_register_log_commands(void);
void doveadm_register_instance_commands(void);
void doveadm_register_mount_commands(void);
void doveadm_register_replicator_commands(void);
void doveadm_register_dict_commands(void);
void doveadm_register_fs_commands(void);
void doveadm_cmds_init(void);
void doveadm_cmds_deinit(void);
void doveadm_cmd_ver2_to_cmd_wrapper(const struct doveadm_cmd_ver2* cmd,
int argc, const struct doveadm_cmd_param[]);
void doveadm_cmd_ver2_to_mail_cmd_wrapper(const struct doveadm_cmd_ver2* cmd,
int argc, const struct doveadm_cmd_param argv[]);
void doveadm_cmd_register_ver2(struct doveadm_cmd_ver2 *cmd);
const struct doveadm_cmd_ver2 *
doveadm_cmd_find_with_args_ver2(const char *cmd_name, int argc, const char *argv[]);
const struct doveadm_cmd_ver2 *doveadm_cmd_find_ver2(const char *cmd_name);
/* Returns FALSE if cmd_name doesn't exist, TRUE if it exists. */
bool doveadm_cmd_try_run_ver2(const char *cmd_name,
const struct doveadm_cmd_attributes *attrs);
/* Returns 0 if success, -1 if parameters were invalid. */
int doveadm_cmd_run_ver2(const struct doveadm_cmd_ver2 *cmd,
const struct doveadm_cmd_attributes *attrs);
bool doveadm_cmd_param_bool(int argc, const struct doveadm_cmd_param *params,
const char *name, bool *value_r);
bool doveadm_cmd_param_int64(int argc, const struct doveadm_cmd_param *params,
const char *name, int64_t *value_r);
bool doveadm_cmd_param_str(int argc, const struct doveadm_cmd_param *params,
const char *name, const char **value_r);
bool doveadm_cmd_param_ip(int argc, const struct doveadm_cmd_param *params,
const char *name, struct ip_addr *value_r);
bool doveadm_cmd_param_array(int argc, const struct doveadm_cmd_param *params,
const char *name, ARRAY_TYPE(const_string) **value_r);
bool doveadm_cmd_param_istream(int argc, const struct doveadm_cmd_param *params,
const char *name, struct istream **value_r);
void doveadm_cmd_params_clean(ARRAY_TYPE(doveadm_cmd_param_arr_t) *pargv);
extern struct doveadm_cmd_ver2 doveadm_cmd_stop_ver2;
extern struct doveadm_cmd_ver2 doveadm_cmd_reload_ver2;
extern struct doveadm_cmd_ver2 doveadm_cmd_stats_reset_ver2;
extern struct doveadm_cmd_ver2 doveadm_cmd_stats_dump_ver2;
extern struct doveadm_cmd_ver2 doveadm_cmd_stats_top_ver2;
extern struct doveadm_cmd_ver2 doveadm_cmd_penalty_ver2;
#endif