}
if (idata->state < IMAP_SELECTED)
- {
- idata->state = IMAP_DISCONNECTED;
- mutt_socket_close (idata->conn);
- idata->status = 0;
- }
+ imap_close_connection (idata);
}
/* cmd_handle_untagged: fallback parser for otherwise unhandled messages. */
if (imap_cmd_step (idata) != IMAP_CMD_CONTINUE)
{
- mutt_socket_close (idata->conn);
- idata->state = IMAP_DISCONNECTED;
+ imap_close_connection (idata);
return -1;
}
#if defined(USE_SSL)
err_close_conn:
- mutt_socket_close (idata->conn);
- idata->state = IMAP_DISCONNECTED;
+ imap_close_connection (idata);
#endif
bail:
FREE (&idata->capstr);
return -1;
}
+void imap_close_connection(IMAP_DATA* idata)
+{
+ mutt_socket_close (idata->conn);
+ idata->state = IMAP_DISCONNECTED;
+ idata->seqno = idata->nextcmd = idata->lastcmd = idata->status = 0;
+ memset (idata->cmds, 0, sizeof (IMAP_COMMAND) * IMAP_PIPELINE_DEPTH);
+}
+
/* imap_get_flags: Make a simple list out of a FLAGS response.
* return stream following FLAGS response */
static char* imap_get_flags (LIST** hflags, char* s)
int imap_make_msg_set (IMAP_DATA* idata, BUFFER* buf, int flag, int changed,
int invert);
int imap_open_connection (IMAP_DATA* idata);
+void imap_close_connection (IMAP_DATA* idata);
IMAP_DATA* imap_conn_find (const ACCOUNT* account, int flags);
int imap_read_literal (FILE* fp, IMAP_DATA* idata, long bytes, progress_t*);
void imap_expunge_mailbox (IMAP_DATA* idata);