smtp: Simplified the next RCPT TO logic
authorSteve Holme <steve_holme@hotmail.com>
Fri, 15 Nov 2013 18:30:04 +0000 (18:30 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Fri, 15 Nov 2013 21:05:45 +0000 (21:05 +0000)
lib/smtp.c

index e49984e..f397a38 100644 (file)
@@ -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;