mirror of
https://github.com/curl/curl.git
synced 2026-08-26 02:33:33 +03:00
Added support for LISTing a single POP3 message
Added tests for a number of POP3 LIST operations, including one that shows a curl problem when listing no messages, so is disabled.
This commit is contained in:
parent
409867e62b
commit
ef1c18b952
9 changed files with 229 additions and 3 deletions
29
lib/pop3.c
29
lib/pop3.c
|
|
@ -436,6 +436,24 @@ static CURLcode pop3_state_list_resp(struct connectdata *conn,
|
|||
return result;
|
||||
}
|
||||
|
||||
/* for LIST response with a given message */
|
||||
static CURLcode pop3_state_list_single_resp(struct connectdata *conn,
|
||||
int pop3code,
|
||||
pop3state instate)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
struct SessionHandle *data = conn->data;
|
||||
(void)instate; /* no use for this yet */
|
||||
|
||||
if(pop3code != 'O') {
|
||||
failf(data, "Invalid message. %c", pop3code);
|
||||
result = CURLE_REMOTE_FILE_NOT_FOUND;
|
||||
}
|
||||
|
||||
state(conn, POP3_STOP);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* start the DO phase for RETR */
|
||||
static CURLcode pop3_retr(struct connectdata *conn)
|
||||
{
|
||||
|
|
@ -460,7 +478,10 @@ static CURLcode pop3_list(struct connectdata *conn)
|
|||
if(result)
|
||||
return result;
|
||||
|
||||
state(conn, POP3_LIST);
|
||||
if (strlen(pop3c->mailbox))
|
||||
state(conn, POP3_LIST_SINGLE);
|
||||
else
|
||||
state(conn, POP3_LIST);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -523,6 +544,10 @@ static CURLcode pop3_statemach_act(struct connectdata *conn)
|
|||
result = pop3_state_list_resp(conn, pop3code, pop3c->state);
|
||||
break;
|
||||
|
||||
case POP3_LIST_SINGLE:
|
||||
result = pop3_state_list_single_resp(conn, pop3code, pop3c->state);
|
||||
break;
|
||||
|
||||
case POP3_QUIT:
|
||||
/* fallthrough, just stop! */
|
||||
default:
|
||||
|
|
@ -747,7 +772,7 @@ CURLcode pop3_perform(struct connectdata *conn,
|
|||
/* If mailbox is empty, then assume user wants listing for mail IDs,
|
||||
* otherwise, attempt to retrieve the mail-id stored in mailbox
|
||||
*/
|
||||
if (strlen(pop3c->mailbox))
|
||||
if (strlen(pop3c->mailbox) && !conn->data->set.ftp_list_only)
|
||||
result = pop3_retr(conn);
|
||||
else
|
||||
result = pop3_list(conn);
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ typedef enum {
|
|||
POP3_PASS,
|
||||
POP3_STARTTLS,
|
||||
POP3_LIST,
|
||||
POP3_LIST_SINGLE,
|
||||
POP3_RETR,
|
||||
POP3_QUIT,
|
||||
POP3_LAST /* never used */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue