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:
parent
226c1c6876
commit
ad8b76d094
27
lib/imap.c
27
lib/imap.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user