From 0ea4a80bb236665f2608fa918df476050aab35fc Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Fri, 15 Nov 2013 18:30:04 +0000 Subject: smtp: Simplified the next RCPT TO logic --- lib/smtp.c | 50 +++++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) (limited to 'lib') diff --git a/lib/smtp.c b/lib/smtp.c index e49984e1b..f397a38cb 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -671,16 +671,14 @@ static CURLcode smtp_perform_rcpt_to(struct connectdata *conn) struct SMTP *smtp = data->req.protop; /* Send the RCPT TO command */ - if(smtp->rcpt) { - if(smtp->rcpt->data[0] == '<') - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s", - smtp->rcpt->data); - else - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:<%s>", - smtp->rcpt->data); - if(!result) - state(conn, SMTP_RCPT); - } + if(smtp->rcpt->data[0] == '<') + result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s", + smtp->rcpt->data); + else + result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:<%s>", + smtp->rcpt->data); + if(!result) + state(conn, SMTP_RCPT); return result; } @@ -1324,11 +1322,9 @@ static CURLcode smtp_state_mail_resp(struct connectdata *conn, int smtpcode, result = CURLE_SEND_ERROR; state(conn, SMTP_STOP); } - else { - smtp->rcpt = data->set.mail_rcpt; - + else + /* Start the RCPT TO command */ result = smtp_perform_rcpt_to(conn); - } return result; } @@ -1349,17 +1345,14 @@ static CURLcode smtp_state_rcpt_resp(struct connectdata *conn, int smtpcode, state(conn, SMTP_STOP); } else { - if(smtp->rcpt) { - smtp->rcpt = smtp->rcpt->next; - result = smtp_perform_rcpt_to(conn); + smtp->rcpt = smtp->rcpt->next; - /* If we failed or still are sending RCPT data then return */ - if(result || smtp->rcpt) - return result; - } - - /* Send the DATA command */ - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "DATA"); + if(smtp->rcpt) + /* Send the next RCPT TO command */ + result = smtp_perform_rcpt_to(conn); + else + /* Send the DATA command */ + result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "DATA"); if(!result) state(conn, SMTP_DATA); @@ -1747,17 +1740,16 @@ static CURLcode smtp_perform(struct connectdata *conn, bool *connected, *dophase_done = FALSE; /* not done yet */ + /* Store the first recipient (or NULL if not specified) */ + smtp->rcpt = data->set.mail_rcpt; + /* Start the first command in the DO phase */ if(data->set.upload && data->set.mail_rcpt) /* MAIL transfer */ result = smtp_perform_mail(conn); - else { - /* Store the first recipient (or NULL if not specified) */ - smtp->rcpt = data->set.mail_rcpt; - + else /* SMTP based command (VRFY, EXPN, NOOP, RSET or HELP) */ result = smtp_perform_command(conn); - } if(result) return result; -- cgit v1.2.3