]> SAFE projects GIT repository - jmp/mailleur/commitdiff
on going work on sending_email
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sat, 7 Jun 2025 11:21:42 +0000 (07:21 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Sat, 7 Jun 2025 11:22:48 +0000 (07:22 -0400)
lib/lvleml.c

index b2681bfade1fabe0d288a530befc3950d412d0e6..4f623d1f634bc89666f94856bf780e386c77e7e2 100644 (file)
@@ -685,49 +685,64 @@ static void sending_email(char *domain,char *sessid,TRATYP **tra)
 
 time_t isnow;
 MXTYP **mxs;
+TRATYP **tosend;
+int phase;
+_Bool proceed;
 
 isnow=time((time_t *)0);
 mxs=dns_getmx(domain);
-while (*tra!=(TRATYP *)0) {
-  if (((*tra)->date+(*tra)->delay)<=isnow) {
-    int phase;
-    _Bool proceed;
-
-    phase=0;
-    proceed=true;
-    while (proceed==true) {
-      switch (phase) {
-        case 0          :       //is connection open?
-          break;
-        case 1          :       //do we need to reset connection
+tosend=(TRATYP **)0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+  (void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase);
+  switch (phase) {
+    case 0      :       //process completed?
+      if ((*tra)==(TRATYP *)0)
+        phase=999;      //all scanning done
+      break;
+    case 1      :       //collecting email to be sent
+      while (*tra!=(TRATYP *)0) {
+        if (strcmp((*tra)->sessid,sessid)!=0) {
+          sessid=(*tra)->sessid;
           break;
-        case 2          :       //listing recipient
+          }
+        if (((*tra)->date+(*tra)->delay)<=isnow) {
           switch ((*tra)->code) {
-            case 'R'    :       //local email (MX is local)
-              (void) rou_alert(0,"%s JMPDBG sending to recipient=<%s>",
-                                  OPEP,(*tra)->rcptto);
+            case 'R'    :       //remote email (MX is remote)
+              (void) eml_add_delay(isnow,*tra);
+              tosend=(TRATYP **)rou_addlist((void **)tosend,(void *)(*tra));
               break;
-            default     :       //Unexpected remote? email??
+            default     :       //Status is not to be send
               (void) rou_alert(0,"%s Directive is not! remote email (Bug?)",OPEP);
-              (void) rou_alert(0,"%s TRA=<%cs %lu %04u %s %s %s",OPEP,
-                                  (*tra)->code,
-                                  (*tra)->date,
-                                  (*tra)->delay,
-                                  (*tra)->sessid,
-                                  (*tra)->mailfrom,
-                                  (*tra)->rcptto);
               break;
             }
-          break;
-        default         :       //SAFE Guard
-          proceed=false;
-          break;
+          }
+        tra++;
         }
-      phase++;
-      }
+      break;
+    case 2      :       //Checking if we have email to be sent
+      if (tosend==(TRATYP **)0) 
+        phase=-1;      //lets continue to see other email
+      break;
+    case 3      :       //checking if connection is open
+      break;
+    case 4      :       //Opening connection if not open
+      break;
+    case 5      :       //sending recipient list
+      break;
+    case 6      :       //send email data
+      break;
+    case 7      :       //cleaning recipient list
+      (void) free(tosend);
+      tosend=(TRATYP **)0;
+      phase=0;          //Lets see if we have other recipient
+      break;
+    default     :       //SAFE Guard
+      proceed=false;
+      break;
     }
-  (void) eml_add_delay(isnow,*tra);
-  tra++;
+  phase++;
   }
 mxs=dns_freemxlist(mxs);
 #undef  OPEP