1
/* Copyright (c) 2002-2012 Dovecot authors, see the included COPYING file */
3
#include "imap-common.h"
4
#include "imap-resp-code.h"
5
#include "imap-commands.h"
7
#include "imap-status.h"
9
bool cmd_status(struct client_command_context *cmd)
11
struct client *client = cmd->client;
12
const struct imap_arg *args, *list_args;
13
struct imap_status_items items;
14
struct imap_status_result result;
15
struct mail_namespace *ns;
16
const char *mailbox, *error;
17
bool selected_mailbox;
19
/* <mailbox> <status items> */
20
if (!client_read_args(cmd, 2, 0, &args))
23
if (!imap_arg_get_astring(&args[0], &mailbox) ||
24
!imap_arg_get_list(&args[1], &list_args)) {
25
client_send_command_error(cmd, "Invalid arguments.");
29
/* get the items client wants */
30
if (imap_status_parse_items(cmd, list_args, &items) < 0)
33
ns = client_find_namespace(cmd, &mailbox);
37
selected_mailbox = client->mailbox != NULL &&
38
mailbox_equals(client->mailbox, ns, mailbox);
39
if (imap_status_get(cmd, ns, mailbox, &items,
40
&result, &error) < 0) {
41
client_send_tagline(cmd, error);
45
imap_status_send(client, mailbox, &items, &result);
46
if (!selected_mailbox)
47
client_send_tagline(cmd, "OK Status completed.");
49
client_send_tagline(cmd, "OK ["IMAP_RESP_CODE_CLIENTBUG"] "
50
"Status on selected mailbox completed.");