Commit 01690ed2 authored by Steve Holme's avatar Steve Holme
Browse files

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.
parent 2da89708
Loading
Loading
Loading
Loading
+8 −29
Original line number Diff line number Diff line
@@ -447,26 +447,6 @@ 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;
}

/* for the retr response */
static CURLcode pop3_state_retr_resp(struct connectdata *conn,
                                     int pop3code,
@@ -518,16 +498,19 @@ static CURLcode pop3_list(struct connectdata *conn)
  CURLcode result = CURLE_OK;
  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);
  }
  else
    result = Curl_pp_sendf(&conn->proto.pop3c.pp, "LIST");

  if(result)
    return result;

  if(pop3c->mailbox[0] != '\0')
    state(conn, POP3_LIST_SINGLE);
  else
  state(conn, POP3_LIST);

  return result;
@@ -588,10 +571,6 @@ 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_RETR:
      result = pop3_state_retr_resp(conn, pop3code, pop3c->state);
      break;
+2 −3
Original line number Diff line number Diff line
@@ -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
 * you should have received as part of this distribution. The terms
@@ -33,7 +33,6 @@ typedef enum {
  POP3_PASS,
  POP3_STARTTLS,
  POP3_LIST,
  POP3_LIST_SINGLE,
  POP3_RETR,
  POP3_QUIT,
  POP3_LAST  /* never used */