From: Timo Sirainen Date: Mon, 24 Apr 2017 15:12:55 +0000 (+0300) Subject: imap: Add client_add_capability() X-Git-Tag: 2.2.30.rc1~89 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3f2259e6d325280f4f22c63610fc9a29a20f8f06;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 51d3d71657..6396804fb1 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -514,6 +514,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 4dce90e4bc..044863b21a 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,