]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: Add client_add_capability()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 24 Apr 2017 15:12:55 +0000 (18:12 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 25 Apr 2017 07:44:39 +0000 (10:44 +0300)
src/imap/imap-client.c
src/imap/imap-client.h

index 51d3d716570d3550b603c8161061d98c2494b707..6396804fb1280de46fee387edcec32ad34e06389 100644 (file)
@@ -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);
index 4dce90e4bcd403347f218a59c1a2eb3edc8cd6dd..044863b21a30bae39d23ddb4bc92ffb05d03e0da 100644 (file)
@@ -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,