From: Timo Sirainen Date: Mon, 24 Apr 2017 15:12:55 +0000 (+0300) Subject: imap: Add client_add_capability() X-Git-Tag: 2.3.0.rc1~1703 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f10f05dfa64b3c005e630b0e1982c15d7ad2114c;p=thirdparty%2Fdovecot%2Fcore.git imap: Add client_add_capability() --- diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index 91dbddd3d4..26fc621041 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -509,6 +509,20 @@ void client_disconnect_with_error(struct client *client, const char *msg) client_disconnect(client, msg); } +void client_add_capability(struct client *client, const char *capability) +{ + /* require a single capability at a time (feels cleaner) */ + i_assert(strchr(capability, ' ') == NULL); + + if (client->set->imap_capability[0] != '\0' && + client->set->imap_capability[0] != '+') { + /* explicit capability - don't change it */ + return; + } + str_append_c(client->capability_string, ' '); + str_append(client->capability_string, capability); +} + void client_send_line(struct client *client, const char *data) { (void)client_send_line_next(client, data); diff --git a/src/imap/imap-client.h b/src/imap/imap-client.h index 8177c4db1c..c723045265 100644 --- a/src/imap/imap-client.h +++ b/src/imap/imap-client.h @@ -254,6 +254,10 @@ void client_destroy(struct client *client, const char *reason) ATTR_NULL(2); void client_disconnect(struct client *client, const char *reason); void client_disconnect_with_error(struct client *client, const char *msg); +/* Add the given capability to the CAPABILITY reply. If imap_capability setting + has an explicit capability, nothing is changed. */ +void client_add_capability(struct client *client, const char *capability); + /* Send a line of data to client. */ void client_send_line(struct client *client, const char *data); /* Send a line of data to client. Returns 1 if ok, 0 if buffer is getting full,