imap: Added processing of more than one response when sent in same packet

Added a loop to imap_statemach_act() in which Curl_pp_readresp() is
called until the cache is drained. Without this multiple responses
received in a single packet could result in a hang or delay.
This commit is contained in:
Jiri Hruska 2013-02-27 19:49:00 +01:00 committed by Steve Holme
parent b644c47192
commit c368fbcb10
1 changed files with 12 additions and 9 deletions

View File

@ -1351,16 +1351,19 @@ static CURLcode imap_statemach_act(struct connectdata *conn)
if(pp->sendleft)
return Curl_pp_flushsend(pp);
/* Read the response from the server */
result = Curl_pp_readresp(sock, pp, &imapcode, &nread);
if(result)
return result;
do {
/* Read the response from the server */
result = Curl_pp_readresp(sock, pp, &imapcode, &nread);
if(result)
return result;
/* Was there an error parsing the response line? */
if(imapcode == -1)
return CURLE_FTP_WEIRD_SERVER_REPLY;
/* Was there an error parsing the response line? */
if(imapcode == -1)
return CURLE_FTP_WEIRD_SERVER_REPLY;
if(!imapcode)
break;
if(imapcode) {
/* We have now received a full IMAP server response */
switch(imapc->state) {
case IMAP_SERVERGREET:
@ -1436,7 +1439,7 @@ static CURLcode imap_statemach_act(struct connectdata *conn)
state(conn, IMAP_STOP);
break;
}
}
} while(!result && imapc->state != IMAP_STOP && Curl_pp_moredata(pp));
return result;
}