]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/smtp/serv_smtpeventclient.c
Re-Sort Cleanup of event io on shutdown
[citadel.git] / citadel / modules / smtp / serv_smtpeventclient.c
index d0e3a216bfbaad05c78abc5f928274a9e6338fd7..d1815f91bccf3d068ae52172c3edfe48ef1607ea 100644 (file)
@@ -106,7 +106,7 @@ void DeleteSmtpOutMsg(void *v)
        FreeURL(&Msg->Relay);
        FreeStrBuf(&Msg->msgtext);
        FreeAsyncIOContents(&Msg->IO);
-///    memset (Msg, 0, sizeof(SmtpOutMsg)); /* just to be shure... */
+       memset (Msg, 0, sizeof(SmtpOutMsg)); /* just to be shure... */
        free(Msg);
 }
 
@@ -152,7 +152,7 @@ void FinalizeMessageSend(SmtpOutMsg *Msg)
        CtdlDeleteMessages(SMTP_SPOOLOUT_ROOM, &Msg->MyQItem->QueMsgID, 1, "");
 
        if (IDestructQueItem)
-               smtpq_do_bounce(Msg->MyQItem,Msg->msgtext);
+               smtpq_do_bounce(Msg->MyQItem, Msg->msgtext);
 
        if (nRemain > 0)
        {
@@ -163,6 +163,7 @@ void FinalizeMessageSend(SmtpOutMsg *Msg)
                msg->cm_anon_type = MES_NORMAL;
                msg->cm_format_type = FMT_RFC822;
                msg->cm_fields['M'] = SmashStrBuf(&MsgData);
+               msg->cm_fields['U'] = strdup("QMSG");
                Msg->MyQItem->QueMsgID =
                        CtdlSubmitMsg(msg, NULL, SMTP_SPOOLOUT_ROOM, QP_EADDR);
                EVS_syslog(LOG_DEBUG, "SMTPQ: %ld", Msg->MyQItem->QueMsgID);
@@ -372,6 +373,7 @@ eNextState smtp_resolve_mx_record_done(AsyncIO *IO)
        QueryCbDone(IO);
 
        EVS_syslog(LOG_DEBUG, "SMTP: %s\n", __FUNCTION__);
+
        pp = &Msg->Relay;
        while ((pp != NULL) && (*pp != NULL) && ((*pp)->Next != NULL))
                pp = &(*pp)->Next;
@@ -379,7 +381,6 @@ eNextState smtp_resolve_mx_record_done(AsyncIO *IO)
        if ((IO->DNS.Query->DNSStatus == ARES_SUCCESS) &&
            (IO->DNS.Query->VParsedDNSReply != NULL))
        { /* ok, we found mx records. */
-               Msg->IO.ErrMsg = Msg->MyQEntry->StatusMessage;
 
                Msg->CurrMX
                        = Msg->AllMX
@@ -391,13 +392,29 @@ eNextState smtp_resolve_mx_record_done(AsyncIO *IO)
 
                                p = (ParsedURL*) malloc(sizeof(ParsedURL));
                                memset(p, 0, sizeof(ParsedURL));
+                               p->Priority = Msg->CurrMX->priority;
                                p->IsIP = 0;
                                p->Port = DefaultMXPort;
                                p->IPv6 = i == 1;
                                p->Host = Msg->CurrMX->host;
-
-                               *pp = p;
-                               pp = &p->Next;
+                               if (*pp == NULL)
+                                       *pp = p;
+                               else {
+                                       ParsedURL *ppp = *pp;
+
+                                       while ((ppp->Next != NULL) &&
+                                              (ppp->Next->Priority <= p->Priority))
+                                              ppp = ppp->Next;
+                                       if ((ppp == *pp) &&
+                                           (ppp->Priority > p->Priority)) {
+                                               p->Next = *pp;
+                                               *pp = p;
+                                       }
+                                       else {
+                                               p->Next = ppp->Next;
+                                               ppp->Next = p;
+                                       }
+                               }
                        }
                        Msg->CurrMX    = Msg->CurrMX->next;
                }
@@ -420,7 +437,11 @@ eNextState smtp_resolve_mx_record_done(AsyncIO *IO)
                }
                Msg->CXFlags   = Msg->CXFlags & F_DIRECT;
        }
-       *pp = Msg->MyQItem->FallBackHost;
+       if (Msg->MyQItem->FallBackHost != NULL)
+       {
+               Msg->MyQItem->FallBackHost->Next = *pp;
+               *pp = Msg->MyQItem->FallBackHost;
+       }
        Msg->pCurrRelay = Msg->Relay;
        return get_one_mx_host_ip(IO);
 }
@@ -478,6 +499,8 @@ SmtpOutMsg *new_smtp_outmsg(OneQueItem *MyQItem,
                     SMTP_C_Timeout,
                     SMTP_C_Shutdown);
 
+       Msg->IO.ErrMsg = Msg->MyQEntry->StatusMessage;
+
        return Msg;
 }
 
@@ -561,7 +584,7 @@ void SMTPSetTimeout(eNextState NextTCPState, SmtpOutMsg *Msg)
                        /* if we're sending a huge message,
                         * we need more time.
                         */
-                       Timeout += StrLength(Msg->msgtext) / 1024;
+                       Timeout += StrLength(Msg->msgtext) / 512;
                }
                break;
        case eReadMessage:
@@ -571,7 +594,7 @@ void SMTPSetTimeout(eNextState NextTCPState, SmtpOutMsg *Msg)
                         * some mailservers take a nap before accepting
                         * the message content inspection and such.
                         */
-                       Timeout += StrLength(Msg->msgtext) / 1024;
+                       Timeout += StrLength(Msg->msgtext) / 512;
                }
                break;
        case eSendDNSQuery: