]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Adding eml_countqfile procedure
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Fri, 13 Jun 2025 08:32:33 +0000 (04:32 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Fri, 13 Jun 2025 08:32:33 +0000 (04:32 -0400)
Makefile
data-feed/feed01.tst
data-feed/feed02.tst
data-feed/feed11.tst
lib/geseml.c
lib/unieml.c
lib/unieml.h

index 5d7858ca68b378db98d6a925a68b2168555bd066..28335a9362b13c02fa3de99054ed647940c2ac91 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -123,6 +123,7 @@ FEEDPAR     =                                               \
                $(TESTIP)                               \
                $(TESTPORT)                             \
                ./$(DATATST)/feed*.tst
+ONEFEED=feed01.tst
 
 #to test with an external server
 extfeed        :       debug
@@ -132,8 +133,7 @@ extfeed     :       debug
                        -c ./conf/feeder.conf.dvl       \
                        $(EXTIP)                        \
                        $(EXTPORT)                      \
-                       ./$(DATATST)/extfeed00.tst
-ONEFEED=feed00.tst
+                       ./$(DATATST)/$(ONEFEED)
 onefeed        :  debug
           @ rm -fr ./data-queue/*
           @ rm -fr $(TESTDIR)/var/spool/$(APPNAME)/queue/*
@@ -189,7 +189,7 @@ valfeed     :  debug                        #valgring of emlrcvr
                          -c ./conf/feeder.conf.dvl     \
                          $(TESTIP)                     \
                          $(TESTPORT)                   \
-                         ./$(DATATST)/feed.tst
+                         ./$(DATATST)/$(ONEFEED)
 
             
 #              --track-fds=yes                         \
index acc97202ff02f5473582d876684f99166c1bd02f..d48e1cee2bb94f8ed2936661ecf98253d0a3c7cf 100644 (file)
@@ -13,8 +13,6 @@ S:RCPT TO: <dom1user1@subdom1.example.com>
 R:250 2.6.4 Address accepted
 S:RCPT TO: <dom1user2@subdom1.example.com>
 R:250 2.6.4 Address accepted
-S:RCPT TO: <dom1user3@subdom1.example.com>
-R:250 2.6.4 Address accepted
 #-------------------------------------------------------------------------
 #-sending data
 C:DATA 354 3.5.0 End data with <CR><LF>.<CR><LF>
index a3888edd9f5e215d29f7cb8656d011a314542d6f..aa3b18816875b442abfa109ac1a97e7bc0cea0c0 100644 (file)
@@ -24,7 +24,7 @@ S:RCPT TO: <dom2user2@subdom2.example.com>
 R:250 2.6.4 Address accepted
 #-------------------------------------------------------------------------
 #-sending data
-C:DATA
+C:DATA 354 3.5.0 End data with <CR><LF>.<CR><LF>
 D:Subject: Very Simple email contents
 D:From: Maitre Post <postmaster@example.com>
 D:To: Maitre WEB <webmaster@example.com>
@@ -64,7 +64,7 @@ S:RCPT TO: <postmaster@example.com>
 R:250 2.6.4 Address accepted
 #-------------------------------------------------------------------------
 #-sending data
-C:DATA
+C:DATA 354 3.5.0 End data with <CR><LF>.<CR><LF>
 D:Subject: Second email contents
 D:
 D:SECOND FIRST Line
@@ -95,7 +95,7 @@ S:RCPT TO: <dom2user2@subdom2.example.com>
 R:250 2.6.4 Address accepted
 #-------------------------------------------------------------------------
 #-sending data
-C:DATA
+C:DATA 354 3.5.0 End data with <CR><LF>.<CR><LF>
 D:Subject: Third email contents
 D:
 D:THIRD FIRST Line
index 7e4672d7109974fe96a983b70bd7dc160ac8189b..a2bbe64dac9e26460d97de48e681cecc26f63782 100644 (file)
@@ -14,7 +14,7 @@ S:RCPT TO: <dom1user3@example.com>
 R:250 2.6.4 Address accepted
 #-------------------------------------------------------------------------
 #-sending data
-C:DATA
+C:DATA 354 3.5.0 End data with <CR><LF>.<CR><LF>
 D:Subject: A email to not exitsing user
 D:From: Trouble maker <subdom1.example.com
 D:To: Not existing <dom1user3@subdom1.example.com>
index d33729cb6a949f655173e1a67251ff854c2693fb..48247944b119a9691d8c8a5ca7d70bdff8beb12d 100644 (file)
@@ -421,7 +421,7 @@ if (domlist!=(REFTYP **)0) {
   REFTYP **ptr;
 
   iter=0;
-  (void) time(&current );
+  (void) time(&current);
   tinfo=localtime(&current);
   (void) strftime(buffer,sizeof(buffer),"%s",tinfo);
   ptr=domlist;
@@ -436,7 +436,7 @@ if (domlist!=(REFTYP **)0) {
     qfile=(FILE *)0;
     action=false;
     ext=EXTRANS;
-    (void) snprintf(qname,sizeof(qname),"%s-%s-%04d",(*ptr)->domain,buffer,iter);
+    (void) snprintf(qname,sizeof(qname),"%08ld-%08d-%04d",current,getpid(),iter);
     phase=0;
     proceed=true;
     while (proceed==true) {
@@ -458,9 +458,8 @@ if (domlist!=(REFTYP **)0) {
           (void) eml_renameqfile(qname,EXTOBE,ext);          
           break;
         case 4  :       //do we need to start sender
-          if (action==true) {
+          if ((action==true)&&(foreground==false)) 
             (void) eml_start_sender(qname);
-            }
           break;
         default :       //SAFE Guard
           proceed=false;
index f320e89e6a803d065cc010a9e2728168060f16b1..3b19f87d6a6e9485a2bfa746ff2e69de454d61f6 100644 (file)
@@ -663,6 +663,109 @@ while (proceed==true) {
   }
 filename=rou_freestr(filename);
 return status;
+#undef  OPEP
+}
+/*
+^L
+*/
+/********************************************************/
+/*                                                      */
+/*     Procedure to increase or decrase the "count"    */
+/*      session id file.                                */
+/*      return 0 or a positive count number.            */
+/*      return -1 if trouble.                           */
+/*                                                      */
+/********************************************************/
+PUBLIC int eml_countqfile(char *qfilename,int count)
+
+{
+#define OPEP    "unieml.c:eml_countqfile,"
+
+int result;
+FILE *fcount;
+char *filename;
+int phase;
+_Bool proceed;
+
+result=-1;
+fcount=(FILE *)0;
+filename=rou_apppath(QDIR);
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+   case 0      :        //lets open the queue directory
+      if (qfilename==(char *)0) {
+        (void) rou_alert(0,"%s filename=<%s> missing (Bug?)",OPEP,qfilename);
+        phase=999;      //Big trouble
+        }
+      break;
+    case 1      :       //opening count file
+      char name[300];
+
+      (void) snprintf(name,sizeof(name),"%s.%s/%s",filename,qfilename,EXTCNT);
+      if ((fcount=fopen(name,"rw"))==(FILE *)0) {
+        (void) rou_alert(0,"%s unable to open count file <%s> (error=<%s>)",
+                             OPEP,name,strerror(errno));
+        phase=999;    //Big trouble
+        }
+      break;
+    case 2      :       //locking access
+      int try;
+
+      try=100;          //wait 1 sec total
+      while (try>0) {
+        if (flock(fileno(fcount),LOCK_EX|LOCK_NB)==0) 
+          break;        //We have the lock
+        else {
+          switch (errno) {
+            case (EWOULDBLOCK)  :
+              try--;
+              if (try>0)
+                (void) usleep(10000);   //Wait 10 millisec
+              else
+                (void) rou_alert(0,"%s unable to lock count file <%s> in time",
+                                  OPEP,name);
+              break;
+            default             :
+              (void) rou_alert(0,"%s unable to lock count file <%s> (error=<%s>)",
+                                  OPEP,name,strerror(errno));
+              (void) fclose(fcount);
+              phase=999;// trouble trouble
+              try=0;
+              break;
+            }
+          }
+        }
+      break;
+    case 3      :       //reading count
+      if (fscanf(fcount,"%d",&result)!=1) {
+        (void) rou_alert(0,"%s unable to read file <%s> contents (error=<%s>)",
+                             OPEP,name,strerror(errno));
+        (void) fclose(fcount);
+        phase=999;      //trouble trouble
+        } 
+      break;
+    case 4      :       //doing count
+      result+=count;
+      if (result<0)
+        result=-1;
+      (void) rewind(fcount);
+      if (fprintf(fcount,"%d\n",result)<0) {
+        (void) rou_alert(0,"%s unable to write file <%s> count value (error=<%s>)",
+                             OPEP,name,strerror(errno));
+        }
+      (void) fclose(fcount);
+      break;
+    default     :       //SAFE Guard
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+filename=rou_freestr(filename);
+return result;
+
 #undef  OPEP
 }
 /*
index 5083877113c45f01689eb96b3e84b279bbc7dbe2..f2be473b9fbc8cc2e32239facc4dedc6b4272511 100644 (file)
@@ -115,6 +115,9 @@ extern FILE *eml_openqfile(const char *qfilename,const char *ext);
 //procedure to duplicate a specific qfile to another file
 extern _Bool eml_dupqfile(char *qfilename,const char *dest);
 
+//procedure to increase or decrease the "count" file contents
+extern int eml_countqfile(char *qfilename,int count);
+
 //procedure to check email address format
 //of an email address
 extern RCPTYP *eml_isemailok(char *email,char **report);