diff options
-rw-r--r-- | fetchmail.h | 3 | ||||
-rw-r--r-- | imap.c | 11 |
2 files changed, 8 insertions, 6 deletions
diff --git a/fetchmail.h b/fetchmail.h index d23e9127..cca85409 100644 --- a/fetchmail.h +++ b/fetchmail.h @@ -401,7 +401,8 @@ extern int phase; #define STAGE_GETRANGE 1 #define STAGE_GETSIZES 2 #define STAGE_FETCH 3 -#define STAGE_LOGOUT 4 +#define STAGE_IDLE 4 +#define STAGE_LOGOUT 5 extern int stage; extern int mytimeout; @@ -98,14 +98,14 @@ int imap_ok(int sock, char *argbuf) * see an EXISTS. Only after that will a tagged response be * shipped. The idling flag also gets cleared on a timeout. */ - if (idling) + if (stage == STAGE_IDLE) { /* we do our own write and report here to disable tagging */ SockWrite(sock, "DONE\r\n", 6); if (outlevel >= O_MONITOR) report(stdout, "IMAP> DONE\n"); - idling = FALSE; + stage = STAGE_FETCH; } } if (strstr(buf, "RECENT")) @@ -925,7 +925,6 @@ int imap_getauth(int sock, struct query *ctl, char *greeting) * Handle idling. We depend on coming through here on startup * and after each timeout (including timeouts during idles). */ - idling = FALSE; if (strstr(capabilities, "IDLE") && ctl->idle) { do_idle = TRUE; @@ -1084,10 +1083,12 @@ static int imap_getrange(int sock, if (deletions && expunge_period != 1) ok = internal_expunge(sock); count = -1; - idling = do_idle; - if (idling) + if (do_idle) + { + stage = STAGE_IDLE; /* this is the RFC2177-recommended timeout for an IDLE */ mytimeout = 29 * 60; + } if (ok || gen_transact(sock, do_idle ? "IDLE" : "NOOP")) { report(stderr, _("re-poll failed\n")); |