1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

imap: Enabled custom requests in imap_perform()

Modified imap_perform() to start with the custom command instead of
SELECT when a custom command is to be performed and no mailbox has
been given.
This commit is contained in:
Jiri Hruska 2013-03-03 11:21:29 +01:00 committed by Steve Holme
parent 226c1c6876
commit ad8b76d094

View File

@ -1794,8 +1794,8 @@ static CURLcode imap_done(struct connectdata *conn, CURLcode status,
*
* imap_perform()
*
* This is the actual DO function for IMAP. Fetch or append a message
* according to the options previously setup.
* This is the actual DO function for IMAP. Fetch or append a message, or do
* other things according to the options previously setup.
*/
static CURLcode imap_perform(struct connectdata *conn, bool *connected,
bool *dophase_done)
@ -1805,6 +1805,7 @@ static CURLcode imap_perform(struct connectdata *conn, bool *connected,
struct SessionHandle *data = conn->data;
struct IMAP *imap = data->state.proto.imap;
struct imap_conn *imapc = &conn->proto.imapc;
bool selected = FALSE;
DEBUGF(infof(conn->data, "DO phase starts\n"));
@ -1815,20 +1816,26 @@ static CURLcode imap_perform(struct connectdata *conn, bool *connected,
*dophase_done = FALSE; /* not done yet */
/* Determine if the requested mailbox (with the same UIDVALIDITY if set)
has already been selected on this connection */
if(imap->mailbox && imapc->mailbox &&
!strcmp(imap->mailbox, imapc->mailbox) &&
(!imap->uidvalidity || !imapc->mailbox_uidvalidity ||
!strcmp(imap->uidvalidity, imapc->mailbox_uidvalidity)))
selected = TRUE;
/* Start the first command in the DO phase */
if(conn->data->set.upload)
/* APPEND can be executed directly */
result = imap_append(conn);
/* FETCH needs a selected mailbox */
else if(imap->mailbox && imapc->mailbox &&
!strcmp(imap->mailbox, imapc->mailbox) &&
(!imap->uidvalidity || !imapc->mailbox_uidvalidity ||
!strcmp(imap->uidvalidity, imapc->mailbox_uidvalidity))) {
/* This mailbox (with the same UIDVALIDITY if set) is already selected on
this connection so go straight to the next fetch operation */
else if(imap->custom && (selected || !imap->mailbox))
/* Custom command using the same mailbox or no mailbox */
result = imap_custom(conn);
else if(!imap->custom && selected)
/* FETCH from the same mailbox */
result = imap_fetch(conn);
}
else
/* SELECT the mailbox */
result = imap_select(conn);
if(result)