]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Adding resp field to trans record
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Tue, 10 Jun 2025 09:29:36 +0000 (05:29 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Tue, 10 Jun 2025 09:29:36 +0000 (05:29 -0400)
lib/geseml.c
lib/geseml.h
lib/lvleml.c

index fff34d96475a82d94997b3aa2ceb5a7a39e66fe1..b6c11e8cb769577a57760d4dc251f6763e012e1d 100644 (file)
@@ -68,13 +68,14 @@ return found;
 */
 /********************************************************/
 /*                                                      */
-/*      Procedure to display/debug TRATYP record content*/
+/*      Procedure to add a add domain reference to a    */
+/*      list of reference.                              */
 /*                                                      */
 /********************************************************/
-static REFTYP **sortref(REFTYP **reflist,TRATYP *trans)
+static REFTYP **addref(REFTYP **reflist,TRATYP *trans)
 
 {
-#define OPEP    "geseml.c:sortref,"
+#define OPEP    "geseml.c:addref,"
 
 char *dom;
 REFTYP *ref;
@@ -134,6 +135,24 @@ return reflist;
 */
 /********************************************************/
 /*                                                      */
+/*      Procedure to display/debug TRATYP record content*/
+/*                                                      */
+/********************************************************/
+static void print_tra(FILE *qfile,char *line,char *temps)
+
+{
+if (qfile==(FILE *)0)  
+  (void) rou_alert(0,"TRA=<%s>",line);
+else {
+  (void) fprintf(qfile,"%s\n",temps);
+  (void) fprintf(qfile,"%s\n",line);
+  }
+}
+/*
+\f
+*/
+/********************************************************/
+/*                                                      */
 /*      Procedure to display/debug ONE TRATYP record    */
 /*      content                                         */
 /*                                                      */
@@ -159,13 +178,7 @@ if (tra!=(TRATYP *)0) {
                                     tra->mailfrom,
                                     tra->rcptto
                                     );
-  if (qfile==(FILE *)0)  {
-    (void) rou_alert(0,"TRA=<%s>",line);
-    }
-  else {
-    (void) fprintf(qfile,"%s\n",temps);
-    (void) fprintf(qfile,"%s\n",line);
-    }
+  (void) print_tra(qfile,line,temps);
   }
 return status;
 }
@@ -215,17 +228,18 @@ return action;
 /*      Procedure to free memory used by a TRATYP record*/
 /*                                                      */
 /********************************************************/
-PUBLIC TRATYP *eml_freetra(TRATYP *trans)
+PUBLIC TRATYP *eml_freetra(TRATYP *tra)
 
 {
-if (trans!=(TRATYP *)0) {
-  trans->rcptto=rou_freestr(trans->rcptto);
-  trans->mailfrom=rou_freestr(trans->mailfrom);
-  trans->sessid=rou_freestr(trans->sessid);
-  (void) free(trans);
-  trans=(TRATYP *)0;
+if (tra!=(TRATYP *)0) {
+  tra->rcptto=rou_freestr(tra->rcptto);
+  tra->mailfrom=rou_freestr(tra->mailfrom);
+  tra->sessid=rou_freestr(tra->sessid);
+  tra->resp=(char **)rou_freelist((void **)tra->resp,(genfree_t)rou_freestr);
+  (void) free(tra);
+  tra=(TRATYP *)0;
   }
-return trans;
+return tra;
 }
 /*
 \f
@@ -235,20 +249,29 @@ return trans;
 /*      Procedure to duplicate TRATYP structure         */
 /*                                                      */
 /********************************************************/
-PUBLIC TRATYP *eml_duptra(TRATYP *trans)
+PUBLIC TRATYP *eml_duptra(TRATYP *tra)
 
 {
 TRATYP *dup;
 
 dup=(TRATYP *)0;
-if (trans!=(TRATYP *)0) {
+if (tra!=(TRATYP *)0) {
   dup=(TRATYP *)calloc(1,sizeof(TRATYP));
-  dup->code=trans->code;
-  dup->date=trans->date;
-  dup->delay=trans->delay;
-  dup->rcptto=strdup(trans->rcptto);
-  dup->mailfrom=strdup(trans->mailfrom);
-  dup->sessid=strdup(trans->sessid);
+  dup->code=tra->code;
+  dup->date=tra->date;
+  dup->delay=tra->delay;
+  dup->rcptto=strdup(tra->rcptto);
+  dup->mailfrom=strdup(tra->mailfrom);
+  dup->sessid=strdup(tra->sessid);
+  if (tra->resp!=(char **)0) {
+    char **ptr;
+
+    ptr=tra->resp;
+    while (*ptr!=(char *)0) {
+      dup->resp=(char **)rou_addlist((void **)dup->resp,(void *)strdup(*ptr));
+      ptr++;
+      }
+    }
   }
 return dup;
 }
@@ -338,7 +361,7 @@ REFTYP **domlist;
 domlist=(REFTYP **)0;
 if (list!=(TRATYP **)0) {
   while (*list!=(TRATYP *)0) {
-    domlist=sortref(domlist,*list);
+    domlist=addref(domlist,*list);
     list++;
     }
   }
index 08fef293d681910cb08bdc0b78fe518a509d0948..209d56604e2ee013d12388c9ff8b04e3305bc497 100644 (file)
@@ -23,6 +23,7 @@ typedef struct  {
         char *mailfrom; //EMail Originator
         char *rcptto;   //EMail Recipient
         int sendcode;   //Email sending status;
+        char **resp;    //Transfer response status
         }TRATYP;
 
 //procedure to dump a list of transfert record 
index 396c03d7a2c983fc62d39e786f5a5300c07dc5dc..a01b4d10935127339e48f96b05d35b6088268952 100644 (file)
@@ -847,7 +847,7 @@ return done;
 /*     Procedure to send the data to the remote server */
 /*                                                      */
 /********************************************************/
-static int senddata(RMTTYP *rmt,TRATYP **tosend,const char *sessid)
+static void senddata(RMTTYP *rmt,TRATYP **tosend,const char *sessid)
 
 {
 #define OPEP    "lvleml.c:senddata,"
@@ -888,7 +888,6 @@ while (proceed==true) {
       const char *fmt;
       unsigned int delta;
 
-      
       sent+=1023;
       sent/=1024;       //Sent now in KByes
       fmt="Data stream Sent: %d Kbytes within %d.%03d seconds";
@@ -907,16 +906,34 @@ while (proceed==true) {
           break;
         }
       break;
-    case 4      :       //Updating sending
+    case 4      :      //Updating sending
+      TRATYP **dest;
+
+      dest=tosend;
+      while (*dest!=(TRATYP *)0) {
+        switch ((*dest)->sendcode) {
+          case CMDOK    :
+            if (rspcode==CMDOK) {
+              (*dest)->code='C';  //Data was sent properly
+              }
+            break;
+          case UKNUSER  :       //NO BREAK
+          case BADPAR   :
+            break;
+          default       :
+            (void) rou_alert(0,"%s sessid=<%s>, Unexpected code='%d' (Bug?)",
+                                OPEP,sessid,rspcode);
+            break;
+          }
+        dest++;
+        }
       break;
-    default     :       //SAFE Guard
+    default     :       //SAFE Guard            
       proceed=false;
       break;
     }
   phase++;
   }
-return rspcode;
-
 #undef  OPEP
 }
 /*
@@ -949,7 +966,7 @@ tobesend=0;
 phase=0;
 proceed=true;
 while (proceed==true) {
-  (void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase);
+  //(void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase);
   switch (phase) {
     case 0      :       //process completed?
       if ((*tra)==(TRATYP *)0)
@@ -1041,31 +1058,8 @@ while (proceed==true) {
           }
         dest++;
         }
-      if (tobesend==0)
-        phase++;        //no user accepted (no data)
-      break;
-      }
-    case 7      :  {    //send email data
-      int rspcode;
-      TRATYP **dest;
-
-      rspcode=senddata(&rmt,tosend,sessid); 
-      dest=tosend;
-      while (*dest!=(TRATYP *)0) {
-        switch ((*dest)->sendcode) {
-          case CMDOK    :
-            (*dest)->code='C';  //Data was sent properly
-            break;
-          case UKNUSER  :       //NO BREAK
-          case BADPAR   :
-            break;
-          default       :
-            (void) rou_alert(0,"%s sessid=<%s>, Unexpected code='%d' (Bug?)",
-                                OPEP,sessid,rspcode);
-            break;
-          }
-        dest++;
-        }
+      if (tobesend>=0)
+        (void) senddata(&rmt,tosend,sessid);
       break;
       }
     case 8      :       //cleaning recipient list