From: Marco Bettini Date: Thu, 9 Nov 2023 10:23:30 +0000 (+0000) Subject: lib-imap-client: Add imapc_client_find_command_by_tag() X-Git-Tag: 2.4.0~2412 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec5cd77f7de762a7dc2b4849400abd05b770b5dd;p=thirdparty%2Fdovecot%2Fcore.git lib-imap-client: Add imapc_client_find_command_by_tag() --- diff --git a/src/lib-imap-client/imapc-client.h b/src/lib-imap-client/imapc-client.h index 5c81be616c..b6e69d0643 100644 --- a/src/lib-imap-client/imapc-client.h +++ b/src/lib-imap-client/imapc-client.h @@ -210,6 +210,9 @@ void imapc_command_sendvf(struct imapc_command *cmd, const char *imapc_command_get_tag(struct imapc_command *cmd); void imapc_command_abort(struct imapc_command **cmd); +struct imapc_command * +imapc_client_find_command_by_tag(struct imapc_client *client, const char *tag); + void imapc_client_register_untagged(struct imapc_client *client, imapc_untagged_callback_t *callback, void *context); diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index a8c9b366b6..85aff705de 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -2544,3 +2544,28 @@ struct event *imapc_connection_get_event(struct imapc_connection *conn) { return conn->event; } + +struct imapc_command * +imapc_client_find_command_by_tag(struct imapc_client *client, const char *tag_str) +{ + unsigned int tag; + if (str_to_uint(tag_str, &tag) != 0) { + /* All the tags we use are numerical. If it can't be parsed + into a number, then we won't find it anyway */ + return NULL; + } + + struct imapc_client_connection *conn; + array_foreach_elem(&client->conns, conn) { + struct imapc_command *cmd; + array_foreach_elem(&conn->conn->cmd_wait_list, cmd) { + if (cmd->tag == tag) + return cmd; + } + array_foreach_elem(&conn->conn->cmd_send_queue, cmd) { + if (cmd->tag == tag) + return cmd; + } + } + return NULL; +}