commands.h revision 1fccbe1347d03a17b08f70a9eabb576a4e5d3965
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch#ifndef __COMMANDS_H
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen#define __COMMANDS_H
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen#include "mail-storage.h"
0536ccb51d41e3078c3a9fa33e509fb4b2420f95Timo Sirainen#include "imap-parser.h"
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen#include "commands-util.h"
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenstruct command {
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen const char *name;
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen command_func_t *func;
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen};
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
16b5dc27e7db42849510403d37e3629aba14de21Timo Sirainen/* Register command. Given name parameter must be permanently stored until
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen command is unregistered. */
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenvoid command_register(const char *name, command_func_t *func);
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainenvoid command_unregister(const char *name);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen/* Register array of commands. */
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainenvoid command_register_array(const struct command *commands, size_t count);
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainenvoid command_unregister_array(const struct command *commands, size_t count);
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainen
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainencommand_func_t *command_find(const char *name);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenvoid commands_init(void);
0327191888a058542f065526e82bce30319579a4Phil Carmodyvoid commands_deinit(void);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen/* IMAP4rev1 commands: */
948b838c8e9896132e3a2d802fb5dad37e8dc716Timo Sirainen
948b838c8e9896132e3a2d802fb5dad37e8dc716Timo Sirainen/* Non-Authenticated State */
948b838c8e9896132e3a2d802fb5dad37e8dc716Timo Sirainenint cmd_authenticate(struct client *client);
948b838c8e9896132e3a2d802fb5dad37e8dc716Timo Sirainenint cmd_login(struct client *client);
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainenint cmd_logout(struct client *client);
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainen
16b5dc27e7db42849510403d37e3629aba14de21Timo Sirainenint cmd_capability(struct client *client);
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainenint cmd_noop(struct client *client);
e2ce8d4a6ac5d82a906178148453e7613fab9ba0Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen/* Authenticated State */
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_select(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_examine(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_create(struct client *client);
0327191888a058542f065526e82bce30319579a4Phil Carmodyint cmd_delete(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_rename(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
16b5dc27e7db42849510403d37e3629aba14de21Timo Sirainenint cmd_subscribe(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_unsubscribe(struct client *client);
5a0ac2e5ef482016e00575a7dce83f52c1704732Timo Sirainen
5a0ac2e5ef482016e00575a7dce83f52c1704732Timo Sirainenint cmd_list(struct client *client);
54bd0fec0be357266e299466a582f3c9269884e9Timo Sirainenint cmd_lsub(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_status(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_append(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen/* Selected state */
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_check(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_close(struct client *client);
0327191888a058542f065526e82bce30319579a4Phil Carmodyint cmd_expunge(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_search(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_fetch(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_store(struct client *client);
16b5dc27e7db42849510403d37e3629aba14de21Timo Sirainenint cmd_copy(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_uid(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen/* IMAP extensions: */
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_sort(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_thread(struct client *client);
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainenint cmd_unselect(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint cmd_idle(struct client *client);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainen/* private: */
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint _cmd_list_full(struct client *client, int lsub);
f89cb43088c8b46d12d66ac924724b53ab14ce66Timo Sirainenint _cmd_select_full(struct client *client, int readonly);
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainenint _cmd_subscribe_full(struct client *client, int subscribe);
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainen
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainen#endif
5c92436a61569c0b56a9374e60e779fa4455edefTimo Sirainen