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*.
This commit is contained in:
Steve Holme 2013-02-23 19:31:59 +00:00
parent 8960d81b0d
commit ed7d438a12
3 changed files with 18 additions and 7 deletions

View File

@ -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;

View File

@ -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 {

View File

@ -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;