Loading lib/imap.c +21 −44 Original line number Diff line number Diff line Loading @@ -398,7 +398,12 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len, break; case IMAP_LIST: if(!imap_matchresp(line, len, "LIST")) if((!imap->custom && !imap_matchresp(line, len, "LIST")) || (imap->custom && !imap_matchresp(line, len, imap->custom) && (strcmp(imap->custom, "STORE") || !imap_matchresp(line, len, "FETCH")) && strcmp(imap->custom, "SELECT") && strcmp(imap->custom, "EXAMINE"))) return FALSE; break; Loading @@ -412,20 +417,6 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len, return FALSE; break; case IMAP_CUSTOM: /* When dealing with a custom command, we are interested in all intermediate responses which match the parameter name. The exceptions are STORE, which returns untagged responses as FETCH, and SELECT and EXAMINE commands, for which no filtering is (or can be easily) done. */ if(!imap_matchresp(line, len, imap->custom) && (strcmp(imap->custom, "STORE") || !imap_matchresp(line, len, "FETCH")) && strcmp(imap->custom, "SELECT") && strcmp(imap->custom, "EXAMINE")) return FALSE; break; /* Ignore other untagged responses */ default: return FALSE; Loading Loading @@ -493,7 +484,6 @@ static void state(struct connectdata *conn, imapstate newstate) "FETCH_FINAL", "APPEND", "APPEND_FINAL", "CUSTOM", "LOGOUT", /* LAST */ }; Loading Loading @@ -696,6 +686,11 @@ static CURLcode imap_list(struct connectdata *conn) struct IMAP *imap = data->state.proto.imap; char *mailbox; if(imap->custom) /* Send the custom request */ result = imap_sendf(conn, "%s%s", imap->custom, imap->custom_params ? imap->custom_params : ""); else { /* Make sure the mailbox is in the correct atom format */ mailbox = imap_atom(imap->mailbox ? imap->mailbox : ""); if(!mailbox) Loading @@ -705,6 +700,7 @@ static CURLcode imap_list(struct connectdata *conn) result = imap_sendf(conn, "LIST \"%s\" *", mailbox); Curl_safefree(mailbox); } if(!result) state(conn, IMAP_LIST); Loading Loading @@ -803,24 +799,6 @@ static CURLcode imap_append(struct connectdata *conn) return result; } static CURLcode imap_custom(struct connectdata *conn) { struct IMAP *imap = conn->data->state.proto.imap; /* Send the custom request */ CURLcode result = imap_sendf(conn, "%s%s", imap->custom, imap->custom_params ? imap->custom_params : ""); if(!result) { /* We don't know how much data will be received */ Curl_pgrsSetDownloadSize(conn->data, -1); state(conn, IMAP_CUSTOM); } return result; } /*********************************************************************** * * imap_logout() Loading Loading @@ -1391,7 +1369,7 @@ static CURLcode imap_state_select_resp(struct connectdata *conn, int imapcode, imapc->mailbox = strdup(imap->mailbox); if(imap->custom) result = imap_custom(conn); result = imap_list(conn); else result = imap_fetch(conn); } Loading Loading @@ -1650,7 +1628,6 @@ static CURLcode imap_statemach_act(struct connectdata *conn) break; case IMAP_LIST: case IMAP_CUSTOM: result = imap_state_list_resp(conn, imapcode, imapc->state); break; Loading Loading @@ -1891,7 +1868,7 @@ static CURLcode imap_perform(struct connectdata *conn, bool *connected, result = imap_append(conn); else if(imap->custom && (selected || !imap->mailbox)) /* Custom command using the same mailbox or no mailbox */ result = imap_custom(conn); result = imap_list(conn); else if(!imap->custom && selected && imap->uid) /* FETCH from the same mailbox */ result = imap_fetch(conn); Loading lib/imap.h +0 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,6 @@ typedef enum { IMAP_FETCH_FINAL, IMAP_APPEND, IMAP_APPEND_FINAL, IMAP_CUSTOM, IMAP_LOGOUT, IMAP_LAST /* never used */ } imapstate; Loading Loading
lib/imap.c +21 −44 Original line number Diff line number Diff line Loading @@ -398,7 +398,12 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len, break; case IMAP_LIST: if(!imap_matchresp(line, len, "LIST")) if((!imap->custom && !imap_matchresp(line, len, "LIST")) || (imap->custom && !imap_matchresp(line, len, imap->custom) && (strcmp(imap->custom, "STORE") || !imap_matchresp(line, len, "FETCH")) && strcmp(imap->custom, "SELECT") && strcmp(imap->custom, "EXAMINE"))) return FALSE; break; Loading @@ -412,20 +417,6 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len, return FALSE; break; case IMAP_CUSTOM: /* When dealing with a custom command, we are interested in all intermediate responses which match the parameter name. The exceptions are STORE, which returns untagged responses as FETCH, and SELECT and EXAMINE commands, for which no filtering is (or can be easily) done. */ if(!imap_matchresp(line, len, imap->custom) && (strcmp(imap->custom, "STORE") || !imap_matchresp(line, len, "FETCH")) && strcmp(imap->custom, "SELECT") && strcmp(imap->custom, "EXAMINE")) return FALSE; break; /* Ignore other untagged responses */ default: return FALSE; Loading Loading @@ -493,7 +484,6 @@ static void state(struct connectdata *conn, imapstate newstate) "FETCH_FINAL", "APPEND", "APPEND_FINAL", "CUSTOM", "LOGOUT", /* LAST */ }; Loading Loading @@ -696,6 +686,11 @@ static CURLcode imap_list(struct connectdata *conn) struct IMAP *imap = data->state.proto.imap; char *mailbox; if(imap->custom) /* Send the custom request */ result = imap_sendf(conn, "%s%s", imap->custom, imap->custom_params ? imap->custom_params : ""); else { /* Make sure the mailbox is in the correct atom format */ mailbox = imap_atom(imap->mailbox ? imap->mailbox : ""); if(!mailbox) Loading @@ -705,6 +700,7 @@ static CURLcode imap_list(struct connectdata *conn) result = imap_sendf(conn, "LIST \"%s\" *", mailbox); Curl_safefree(mailbox); } if(!result) state(conn, IMAP_LIST); Loading Loading @@ -803,24 +799,6 @@ static CURLcode imap_append(struct connectdata *conn) return result; } static CURLcode imap_custom(struct connectdata *conn) { struct IMAP *imap = conn->data->state.proto.imap; /* Send the custom request */ CURLcode result = imap_sendf(conn, "%s%s", imap->custom, imap->custom_params ? imap->custom_params : ""); if(!result) { /* We don't know how much data will be received */ Curl_pgrsSetDownloadSize(conn->data, -1); state(conn, IMAP_CUSTOM); } return result; } /*********************************************************************** * * imap_logout() Loading Loading @@ -1391,7 +1369,7 @@ static CURLcode imap_state_select_resp(struct connectdata *conn, int imapcode, imapc->mailbox = strdup(imap->mailbox); if(imap->custom) result = imap_custom(conn); result = imap_list(conn); else result = imap_fetch(conn); } Loading Loading @@ -1650,7 +1628,6 @@ static CURLcode imap_statemach_act(struct connectdata *conn) break; case IMAP_LIST: case IMAP_CUSTOM: result = imap_state_list_resp(conn, imapcode, imapc->state); break; Loading Loading @@ -1891,7 +1868,7 @@ static CURLcode imap_perform(struct connectdata *conn, bool *connected, result = imap_append(conn); else if(imap->custom && (selected || !imap->mailbox)) /* Custom command using the same mailbox or no mailbox */ result = imap_custom(conn); result = imap_list(conn); else if(!imap->custom && selected && imap->uid) /* FETCH from the same mailbox */ result = imap_fetch(conn); Loading
lib/imap.h +0 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,6 @@ typedef enum { IMAP_FETCH_FINAL, IMAP_APPEND, IMAP_APPEND_FINAL, IMAP_CUSTOM, IMAP_LOGOUT, IMAP_LAST /* never used */ } imapstate; Loading