pop3: Removed the need for the single message LIST command handler

Simplified the code to remove the need for a separate "LIST <msg id>"
command handler and state machine and instead use the LIST command
handler for both operations.
This commit is contained in:
Steve Holme 2012-03-25 11:21:59 +01:00
Родитель 2da89708ec
Коммит 01690ed2bc
2 изменённых файлов: 10 добавлений и 32 удалений

Просмотреть файл

@ -447,26 +447,6 @@ static CURLcode pop3_state_list_resp(struct connectdata *conn,
return result; 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;
}
/* for the retr response */ /* for the retr response */
static CURLcode pop3_state_retr_resp(struct connectdata *conn, static CURLcode pop3_state_retr_resp(struct connectdata *conn,
int pop3code, int pop3code,
@ -518,16 +498,19 @@ static CURLcode pop3_list(struct connectdata *conn)
CURLcode result = CURLE_OK; CURLcode result = CURLE_OK;
struct pop3_conn *pop3c = &conn->proto.pop3c; struct pop3_conn *pop3c = &conn->proto.pop3c;
if(pop3c->mailbox[0] != '\0') if(pop3c->mailbox[0] != '\0') {
/* Message specific LIST means no transfer */
struct FTP *pop3 = conn->data->state.proto.pop3;
pop3->transfer = FTPTRANSFER_INFO;
result = Curl_pp_sendf(&conn->proto.pop3c.pp, "LIST %s", pop3c->mailbox); result = Curl_pp_sendf(&conn->proto.pop3c.pp, "LIST %s", pop3c->mailbox);
}
else else
result = Curl_pp_sendf(&conn->proto.pop3c.pp, "LIST"); result = Curl_pp_sendf(&conn->proto.pop3c.pp, "LIST");
if(result) if(result)
return result; return result;
if(pop3c->mailbox[0] != '\0')
state(conn, POP3_LIST_SINGLE);
else
state(conn, POP3_LIST); state(conn, POP3_LIST);
return result; return result;
@ -588,10 +571,6 @@ static CURLcode pop3_statemach_act(struct connectdata *conn)
result = pop3_state_list_resp(conn, pop3code, pop3c->state); result = pop3_state_list_resp(conn, pop3code, pop3c->state);
break; break;
case POP3_LIST_SINGLE:
result = pop3_state_list_single_resp(conn, pop3code, pop3c->state);
break;
case POP3_RETR: case POP3_RETR:
result = pop3_state_retr_resp(conn, pop3code, pop3c->state); result = pop3_state_retr_resp(conn, pop3code, pop3c->state);
break; break;

Просмотреть файл

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 2009 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 2009 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -33,7 +33,6 @@ typedef enum {
POP3_PASS, POP3_PASS,
POP3_STARTTLS, POP3_STARTTLS,
POP3_LIST, POP3_LIST,
POP3_LIST_SINGLE,
POP3_RETR, POP3_RETR,
POP3_QUIT, POP3_QUIT,
POP3_LAST /* never used */ POP3_LAST /* never used */