if (c <= 0)
{
dprint (1, (debugfile, "imap_cmd_step: Error reading server response.\n"));
- cmd_handle_fatal (idata);
+ /* cmd_handle_fatal (idata); */
return IMAP_CMD_BAD;
}
rc = imap_cmd_step (idata);
while (rc == IMAP_CMD_CONTINUE);
+ if (rc == IMAP_CMD_BAD) {
+ if (imap_reconnect(idata->ctx)!=0) {
+ return -1;
+ }
+ return 0;
+ }
+
if (rc == IMAP_CMD_NO && (flags & IMAP_CMD_FAIL_OK))
return -2;
(idata->reopen & IMAP_REOPEN_ALLOW) &&
!idata->ctx->closing)
{
- mx_fastclose_mailbox (idata->ctx);
- /*mutt_error (_("Mailbox closed"));
+ /*mx_fastclose_mailbox (idata->ctx);*/
+ mutt_error (_("Mailbox closed"));
mutt_sleep (1);
- */
idata->state = IMAP_DISCONNECTED;
- imap_reconnect(idata->ctx);
+ if (imap_reconnect(idata->ctx)!=0)
+ mx_fastclose_mailbox(idata->ctx);
}
if (idata->state != IMAP_SELECTED)
SKIPWS (s);
mutt_error ("%s", s);
idata->status = IMAP_BYE;
- if (idata->state == IMAP_SELECTED)
- mx_fastclose_mailbox (idata->ctx);
- mutt_socket_close (idata->conn);
- idata->state = IMAP_DISCONNECTED;
- return -1;
+ /*if (imap_reconnect(idata->ctx)!=0) {
+ if (idata->state == IMAP_SELECTED)
+ mx_fastclose_mailbox (idata->ctx); */ /* XXX memleak? */
+ mutt_socket_close (idata->conn);
+ idata->state = IMAP_DISCONNECTED;
+ return -1;
+ /*} else {
+ return 0;
+ } */
}
else if (option (OPTIMAPSERVERNOISE) && (ascii_strncasecmp ("NO", s, 2) == 0))
{
return -1;
}
-/* reconnect and verify indexes if connection was lost */
+/* reconnect if connection was lost */
int imap_reconnect(CONTEXT* ctx) {
IMAP_DATA* imap_data = (IMAP_DATA *)ctx->data;
- if (imap_data->status == IMAP_CONNECTED)
- return -1;
- if (imap_data->status == IMAP_BYE)
- return 0;
-
- mutt_socket_close(imap_data->conn);
+ if (imap_data) {
+ if (imap_data->status == IMAP_CONNECTED)
+ return -1;
+ }
if (query_quadoption(OPT_IMAPRECONNECT,_("Connection lost. Reconnect to IMAP server?")) != M_YES)
return -1;
- return imap_open_mailbox(ctx);
+ mx_open_mailbox(ctx->path,0,ctx);
+ return 0;
}