Logging: add timestamps for eventdriven IO
[citadel.git] / citadel / modules / smtp / serv_smtpeventclient.c
index e5c1cee00931f84c887addfcbdb51002b8eab444..3037b0c0c65e39cb7f7a7fecb4c843365f2800a2 100644 (file)
@@ -126,6 +126,7 @@ eNextState FinalizeMessageSendDB(AsyncIO *IO);
 eNextState FinalizeMessageSend_DB1(AsyncIO *IO);
 eNextState FinalizeMessageSend_DB2(AsyncIO *IO);
 eNextState FinalizeMessageSend_DB3(AsyncIO *IO);
+eNextState FinalizeMessageSend_DB4(AsyncIO *IO);
 
 /******************************************************************************
  * So, we're finished with sending (regardless of success or failure)         *
@@ -135,7 +136,26 @@ eNextState FinalizeMessageSend_DB3(AsyncIO *IO);
  ******************************************************************************/
 inline void FinalizeMessageSend_1(AsyncIO *IO)
 {
+       const char *Status;
        SmtpOutMsg *Msg = IO->Data;
+       
+       if (Msg->MyQEntry->Status == 2) 
+               Status = "Delivery Successfull.";
+       else if (Msg->MyQEntry->Status == 5) 
+               Status = "Delivery failed permanently; giving up.";
+       else
+               Status = "Delivery failed temporarily; will retry later.";
+                       
+       EVS_syslog(LOG_INFO,
+                  "SMTP: %s Time[%fs] Recipient <%s> @ <%s> (%s) Statusmessage: %s\n",
+                  Status,
+                  Msg->IO.Now - Msg->IO.StartIO,
+                  Msg->user,
+                  Msg->node,
+                  Msg->name,
+                  ChrPtr(Msg->MyQEntry->StatusMessage));
+
+
        Msg->IDestructQueItem = DecreaseQReference(Msg->MyQItem);
 
        Msg->nRemain = CountActiveQueueEntries(Msg->MyQItem);
@@ -217,11 +237,27 @@ inline void FinalizeMessageSend_DB_3(AsyncIO *IO)
                                   "");
                FreeStrBuf(&Msg->QMsgData);
        }
+       DecreaseShutdownDeliveries(Msg->MyQItem);
 }
 eNextState FinalizeMessageSend_DB3(AsyncIO *IO)
 {
+       SmtpOutMsg *Msg = IO->Data;
        FinalizeMessageSend_DB_3(IO);
-       return eAbort;
+       if (!Msg->IDestructQueItem)
+               return eAbort;
+       return NextDBOperation(IO, FinalizeMessageSend_DB4);
+}
+
+eNextState FinalizeMessageSend_DB4(AsyncIO *IO)
+{
+       int Done;
+       SmtpOutMsg *Msg = IO->Data;
+
+       Done = GetShutdownDeliveries(Msg->MyQItem);
+       if (!Done) 
+               return NextDBOperation(IO, FinalizeMessageSend_DB4);
+       else
+               return eAbort;
 }
 
 eNextState FinalizeMessageSend_DB(AsyncIO *IO)
@@ -337,6 +373,9 @@ eNextState get_one_mx_host_ip_done(AsyncIO *IO)
        struct hostent *hostent;
 
        QueryCbDone(IO);
+       EVS_syslog(LOG_DEBUG, "SMTP: %s Time[%fs]\n",
+                  __FUNCTION__,
+                  IO->Now - IO->DNS.Start);
 
        hostent = Msg->HostLookup.VParsedDNSReply;
        if ((Msg->HostLookup.DNSStatus == ARES_SUCCESS) &&
@@ -371,10 +410,19 @@ eNextState get_one_mx_host_ip_done(AsyncIO *IO)
                        addr->sin_port   = htons(DefaultMXPort);
                }
                Msg->mx_host = Msg->pCurrRelay->Host;
+               if (Msg->HostLookup.VParsedDNSReply != NULL) {
+                       Msg->HostLookup.DNSReplyFree(Msg->HostLookup.VParsedDNSReply);
+                       Msg->HostLookup.VParsedDNSReply = NULL;
+               }
                return mx_connect_ip(IO);
        }
-       else
+       else {
+               if (Msg->HostLookup.VParsedDNSReply != NULL) {
+                       Msg->HostLookup.DNSReplyFree(Msg->HostLookup.VParsedDNSReply);
+                       Msg->HostLookup.VParsedDNSReply = NULL;
+               }
                return FailOneAttempt(IO);
+       }
 }
 
 eNextState get_one_mx_host_ip(AsyncIO *IO)
@@ -387,8 +435,6 @@ eNextState get_one_mx_host_ip(AsyncIO *IO)
         * - one of the mx'es
         */
 
-       InitC_ares_dns(IO);
-
        EVS_syslog(LOG_DEBUG, "SMTP: %s\n", __FUNCTION__);
 
        EVS_syslog(LOG_DEBUG,
@@ -425,7 +471,9 @@ eNextState smtp_resolve_mx_record_done(AsyncIO *IO)
 
        QueryCbDone(IO);
 
-       EVS_syslog(LOG_DEBUG, "SMTP: %s\n", __FUNCTION__);
+       EVS_syslog(LOG_DEBUG, "SMTP: %s Time[%fs]\n",
+                  __FUNCTION__,
+               IO->Now - IO->DNS.Start);
 
        pp = &Msg->Relay;
        while ((pp != NULL) && (*pp != NULL) && ((*pp)->Next != NULL))