Commit ed7d438a authored by Steve Holme's avatar Steve Holme
Browse files

pop3: Introduced a custom SMTP structure for per-request data

Created a new SMTP structure and changed the type of the smtp proto
variable in connectdata from FTP* to SMTP*.
parent 8960d81b
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -1091,7 +1091,7 @@ static CURLcode smtp_state_data_resp(struct connectdata *conn, int smtpcode,
                                     smtpstate instate)
{
  struct SessionHandle *data = conn->data;
  struct FTP *smtp = data->state.proto.smtp;
  struct SMTP *smtp = data->state.proto.smtp;

  (void)instate; /* no use for this yet */

@@ -1280,10 +1280,10 @@ static CURLcode smtp_block_statemach(struct connectdata *conn)
static CURLcode smtp_init(struct connectdata *conn)
{
  struct SessionHandle *data = conn->data;
  struct FTP *smtp = data->state.proto.smtp;
  struct SMTP *smtp = data->state.proto.smtp;

  if(!smtp) {
    smtp = data->state.proto.smtp = calloc(sizeof(struct FTP), 1);
    smtp = data->state.proto.smtp = calloc(sizeof(struct SMTP), 1);
    if(!smtp)
      return CURLE_OUT_OF_MEMORY;
  }
@@ -1385,7 +1385,7 @@ static CURLcode smtp_done(struct connectdata *conn, CURLcode status,
{
  CURLcode result = CURLE_OK;
  struct SessionHandle *data = conn->data;
  struct FTP *smtp = data->state.proto.smtp;
  struct SMTP *smtp = data->state.proto.smtp;
  ssize_t bytes_written;

  (void)premature;
@@ -1462,7 +1462,7 @@ static CURLcode smtp_perform(struct connectdata *conn, bool *connected,

  if(conn->data->set.opt_no_body) {
    /* Requested no body means no transfer */
    struct FTP *smtp = conn->data->state.proto.smtp;
    struct SMTP *smtp = conn->data->state.proto.smtp;
    smtp->transfer = FTPTRANSFER_INFO;
  }

@@ -1574,7 +1574,7 @@ static CURLcode smtp_disconnect(struct connectdata *conn,
/* Call this when the DO phase has completed */
static CURLcode smtp_dophase_done(struct connectdata *conn, bool connected)
{
  struct FTP *smtp = conn->data->state.proto.smtp;
  struct SMTP *smtp = conn->data->state.proto.smtp;

  (void)connected;

+11 −0
Original line number Diff line number Diff line
@@ -53,6 +53,17 @@ typedef enum {
  SMTP_LAST         /* never used */
} smtpstate;

/* This SMTP struct is used in the SessionHandle. All SMTP data that is
   connection-oriented must be in smtp_conn to properly deal with the fact that
   perhaps the SessionHandle is changed between the times the connection is
   used. */
struct SMTP {
  curl_off_t *bytecountp;
  char *user;             /* User name string */
  char *passwd;           /* Password string */
  curl_pp_transfer transfer;
};

/* smtp_conn is used for struct connection-oriented data in the connectdata
   struct */
struct smtp_conn {
+1 −1
Original line number Diff line number Diff line
@@ -1294,7 +1294,7 @@ struct UrlState {
    struct SSHPROTO *ssh;
    struct IMAP *imap;
    struct POP3 *pop3;
    struct FTP *smtp;
    struct SMTP *smtp;
  } proto;
  /* current user of this SessionHandle instance, or NULL */
  struct connectdata *current_conn;