]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Starting to implement the "sender" program
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Mon, 19 May 2025 11:40:57 +0000 (07:40 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Mon, 19 May 2025 11:40:57 +0000 (07:40 -0400)
22 files changed:
Makefile
app/sender.c
app/sorter.c
data-feed/feed02.tst
data-queue/00313-20250517142512-0184-0000.trans [deleted file]
data-queue/00317-20250517142513-0859-0000.trans [deleted file]
data-queue/00326-20250517142515-0493-0000.trans [deleted file]
data-queue/24634-20250519065528-0893-0000 [moved from data-queue/00313-20250517142512-0184-0000 with 100% similarity]
data-queue/24634-20250519065528-0893-0000.trans [new file with mode: 0644]
data-queue/24643-20250519065530-0650-0000 [moved from data-queue/00317-20250517142513-0859-0000 with 100% similarity]
data-queue/24643-20250519065530-0650-0000.trans [new file with mode: 0644]
data-queue/24649-20250519065532-0284-0000 [moved from data-queue/00326-20250517142515-0493-0000 with 100% similarity]
data-queue/24649-20250519065532-0284-0000.trans [new file with mode: 0644]
data-queue/example.com-1747652224-0002.todo [new file with mode: 0644]
data-queue/subdom1.example.com-1747523810-0000.todo [deleted file]
data-queue/subdom1.example.com-1747652224-0000.todo [new file with mode: 0644]
data-queue/subdom2.example.com-1747523810-0001.todo [deleted file]
data-queue/subdom2.example.com-1747652224-0001.todo [new file with mode: 0644]
lib/geseml.c
lib/lvleml.c
lib/unieml.c
lib/unieml.h

index 1ef9110ffd861582e2ff8b3b65a6ca70b3145364..5b9fd4934d8132907cab9bc40cca86c443e70303 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -45,6 +45,23 @@ sorter       :       clean debug
                   -r $(TESTDIR) 
 
 #--------------------------------------------------------------------
+#To test sender
+sender :       clean debug newtest
+               @ bin/$@                                \
+                  -d 2                                 \
+                  -c ./conf/feeder.conf.dvl            \
+                  -r $(TESTDIR)                        \
+                  example.com-1747652224-0002.todo
+
+dbgsend        :       clean debug
+          @ gdb                                        \
+               --args                                  \
+                       bin/sender                      \
+                         -f                            \
+                         -d2                           \
+                         -c ./conf/feeder.conf.dvl     \
+                         -r $(TESTDIR) 
+#--------------------------------------------------------------------
 #testing feed
 FEEDPAR        =                                               \
                $(TESTIP)                               \
index 25a015a8eaca3601f8d9419b0b6fed8edac11696..0efa306e3ed33e79323f82de8bcfb8acfc93f5ae 100644 (file)
@@ -10,6 +10,7 @@
 /********************************************************/
 #include        <dirent.h>
 #include        <stdlib.h>
+#include        <string.h>
 #include        <syslog.h>
 #include        <unistd.h>
 
 /*     procedure to scan all files                     */
 /*                                                     */
 /********************************************************/
-static _Bool scantrans()
+static _Bool scantodo(char *fname)
 
 {
-#define OPEP    "sorter.c:scantrans,"
+#define OPEP    "sorter.c:scantodo,"
 
 _Bool status;
-char **fname;
-TRATYP **trans;
 int phase;
 _Bool proceed;
 
 status=false;
-fname=(char **)0;
-trans=(TRATYP **)0;
 phase=0;
 proceed=true;
 while (proceed==true) {
   switch (phase) {
     case 0      :       //Getting the list of file
-      fname=eml_getqfilelist(fname,".trans");
-      if (fname==(char **)0)
-        phase=999;      //Nothing to do
+      if (eml_renameqfile(fname,EXTODO,EXDOING)==false) {
+        (void) rou_alert(0,"%s Unable to rename file <%s.%s>",OPEP,fname,EXDOING);
+        phase=999;      //No need to go further
+        }
       break;
     case 1      :       //Building the "trans" list
-      if (fname!=(char **)0) {  //walways
-        char **ptr;
-
-        ptr=fname; 
-        while (*ptr!=(char *)0) {
-          FILE *qfile;
-
-          (void) rou_alert(0,"%s fame=<%s>",OPEP,*ptr);
-          if ((qfile=eml_openqfile(*ptr))!=(FILE *)0) {
-            trans=eml_scanqfile(trans,qfile);
-            (void) eml_closeqfile(qfile);
-            (void) eml_deleteqfile(*ptr);
-            }
-          ptr++;
-          }
-        fname=(char **)rou_freelist((void *)fname,(genfree_t)rou_freestr); 
-        }
       break;
-    case 2      :       //scanning translit
-      if (trans!=(TRATYP **)0) {
-        TRATYP **ptr;
-
-        ptr=trans;
-        (void) eml_todoqfile(ptr);
-        trans=(TRATYP **)rou_freelist((void **)trans,(genfree_t)eml_freetra);
-        status=true;
+    case 2      :       //job completed
+      if (eml_renameqfile(fname,EXDOING,EXDONE)==false) {
+        (void) rou_alert(0,"%s Unable to rename file <%s.%s>",OPEP,fname,EXDONE);
+        phase=999;      //No need to go further
         }
       break;
     default     :       //SAFE Guard
@@ -115,11 +92,17 @@ while (proceed==true) {
   //(void) fprintf(stdout,"JMPDBG main phase='%d'\n",phase);
   switch (phase) {
     case 0      :       //checking parameters
-      if ((params=par_getparams(argc,argv,"c:d:fhi:r:v"))==(ARGTYP *)0) {
+      if ((params=par_getparams(argc,argv,"c:d:fh:r:v"))==(ARGTYP *)0) {
+        proceed=false;      //no need to go further
+        }
+      break;
+    case 1      :       //do we have a parameter
+      if (params->argc<=0) {
+        (void) rou_alert(0,"%s todo filename missing (exiting)",SENDER);
         proceed=false;      //no need to go further
         }
       break;
-    case 1      :       //Preparing scan
+    case 2      :       //Preparing scan
       (void) rou_modesubrou(true);
       (void) sig_modeunisig(true);
       (void) rou_setappname(SENDER);
@@ -127,13 +110,34 @@ while (proceed==true) {
       (void) openlog(appname,LOG_NDELAY|LOG_PID,LOG_DAEMON);
       (void) closelog();
       break;
-    case 2      :       //Scanning all file             
-      phase--;          //Looping on same phase
-      if ((hangup==true)||(reload==true))
-        phase=999;      //Process 
-      if (scantrans()==false)
-        phase=999;
-      (void) sleep(5);
+    case 3      :       //scanning parameters list
+      if (params!=(ARGTYP *)0) {        //always
+        int num;
+
+        num=0;
+        while (num<params->argc) {
+          char *fname;
+          char *ptr;
+
+          fname=params->argv[num];
+          if ((hangup==true)||(reload==true))
+            break;
+          if ((ptr=strrchr(fname,'.'))==(char *)0) {
+            (void) rou_alert(0,"%s unable to find <%s> extension",SENDER,fname);
+            break;
+            }
+          *ptr='\000';
+          ptr++;
+          if (strcmp(ptr,EXTODO)!=0) {
+            (void) rou_alert(0,"%s wrong extension for file <%s.%s>",
+                                SENDER,fname,ptr);
+            break;
+            }
+          if (scantodo(fname)==false)
+            break;
+          num++;
+          }
+        }
       break;
     default     :       //end of task
       params=par_freeparams(params);
index ff427f4487f41105605e69898ddf5f659706697c..c6a335e6e12ed80c684ca85af3e3e9400c75293c 100644 (file)
@@ -44,7 +44,7 @@ proceed=true;
 while (proceed==true) {
   switch (phase) {
     case 0      :       //Getting the list of file
-      fname=eml_getqfilelist(fname,".trans");
+      fname=eml_getqfilelist(fname,EXTRANS);
       if (fname==(char **)0)
         phase=999;      //Nothing to do
       break;
index 2dcf94f8d7612fd60048bfb63c77198f3c284e82..39c56c4a4f8738da9802cc3f1fa2076759ed2478 100644 (file)
@@ -11,6 +11,8 @@ S:HELO example.com
 R:250-mailleur.example.com, link (cleartext) ready,...
 S:MAIL FROM: <postmaster@example.com>
 R:250 2.1.3 postmaster@example.com.. sender ok
+S:RCPT TO: <webmaster@example.com>
+R:250 2.6.4 Address accepted
 S:RCPT TO: <dom1user1@subdom1.example.com>
 R:250 2.6.4 Address accepted
 S:RCPT TO: <dom2user1@subdom2.example.com>
diff --git a/data-queue/00313-20250517142512-0184-0000.trans b/data-queue/00313-20250517142512-0184-0000.trans
deleted file mode 100644 (file)
index 2d29ccc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-R 1747506312 0 00313-20250517142512-0184-0000 postmaster@example.com dom1user1@subdom1.example.com
-R 1747506312 0 00313-20250517142512-0184-0000 postmaster@example.com dom2user1@subdom2.example.com
-R 1747506312 0 00313-20250517142512-0184-0000 postmaster@example.com dom2user2@subdom2.example.com
diff --git a/data-queue/00317-20250517142513-0859-0000.trans b/data-queue/00317-20250517142513-0859-0000.trans
deleted file mode 100644 (file)
index bbe8b52..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom1user1@subdom1.example.com
-R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom1user2@subdom1.example.com
-R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom2user1@subdom2.example.com
-R 1747506314 0 00317-20250517142513-0859-0000 webmaster@example.com dom2user2@subdom2.example.com
diff --git a/data-queue/00326-20250517142515-0493-0000.trans b/data-queue/00326-20250517142515-0493-0000.trans
deleted file mode 100644 (file)
index 1a1488e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom1user1@subdom1.example.com
-R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom1user2@subdom1.example.com
-R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom2user1@subdom2.example.com
-R 1747506315 0 00326-20250517142515-0493-0000 noreply@example.com dom2user2@subdom2.example.com
diff --git a/data-queue/24634-20250519065528-0893-0000.trans b/data-queue/24634-20250519065528-0893-0000.trans
new file mode 100644 (file)
index 0000000..e883f2c
--- /dev/null
@@ -0,0 +1,4 @@
+L 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com webmaster@example.com
+R 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com dom1user1@subdom1.example.com
+R 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com dom2user1@subdom2.example.com
+R 1747652129 0 24634-20250519065528-0893-0000 postmaster@example.com dom2user2@subdom2.example.com
diff --git a/data-queue/24643-20250519065530-0650-0000.trans b/data-queue/24643-20250519065530-0650-0000.trans
new file mode 100644 (file)
index 0000000..8b85ccd
--- /dev/null
@@ -0,0 +1,4 @@
+R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom1user1@subdom1.example.com
+R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom1user2@subdom1.example.com
+R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom2user1@subdom2.example.com
+R 1747652131 0 24643-20250519065530-0650-0000 webmaster@example.com dom2user2@subdom2.example.com
diff --git a/data-queue/24649-20250519065532-0284-0000.trans b/data-queue/24649-20250519065532-0284-0000.trans
new file mode 100644 (file)
index 0000000..5a54423
--- /dev/null
@@ -0,0 +1,4 @@
+R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom1user1@subdom1.example.com
+R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom1user2@subdom1.example.com
+R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom2user1@subdom2.example.com
+R 1747652132 0 24649-20250519065532-0284-0000 noreply@example.com dom2user2@subdom2.example.com
diff --git a/data-queue/example.com-1747652224-0002.todo b/data-queue/example.com-1747652224-0002.todo
new file mode 100644 (file)
index 0000000..2e9bd5c
--- /dev/null
@@ -0,0 +1 @@
+L,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com webmaster@example.com
diff --git a/data-queue/subdom1.example.com-1747523810-0000.todo b/data-queue/subdom1.example.com-1747523810-0000.todo
deleted file mode 100644 (file)
index de7f6db..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom1user1@subdom1.example.com
-R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom1user2@subdom1.example.com
-R,1747506312,0 00313-20250517142512-0184-0000 postmaster@example.com dom1user1@subdom1.example.com
-R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom1user1@subdom1.example.com
-R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom1user2@subdom1.example.com
diff --git a/data-queue/subdom1.example.com-1747652224-0000.todo b/data-queue/subdom1.example.com-1747652224-0000.todo
new file mode 100644 (file)
index 0000000..6f4e7ea
--- /dev/null
@@ -0,0 +1,5 @@
+R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom1user1@subdom1.example.com
+R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom1user2@subdom1.example.com
+R,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com dom1user1@subdom1.example.com
+R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom1user1@subdom1.example.com
+R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom1user2@subdom1.example.com
diff --git a/data-queue/subdom2.example.com-1747523810-0001.todo b/data-queue/subdom2.example.com-1747523810-0001.todo
deleted file mode 100644 (file)
index 2b6bc9c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom2user1@subdom2.example.com
-R,1747506314,0 00317-20250517142513-0859-0000 webmaster@example.com dom2user2@subdom2.example.com
-R,1747506312,0 00313-20250517142512-0184-0000 postmaster@example.com dom2user1@subdom2.example.com
-R,1747506312,0 00313-20250517142512-0184-0000 postmaster@example.com dom2user2@subdom2.example.com
-R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom2user1@subdom2.example.com
-R,1747506315,0 00326-20250517142515-0493-0000 noreply@example.com dom2user2@subdom2.example.com
diff --git a/data-queue/subdom2.example.com-1747652224-0001.todo b/data-queue/subdom2.example.com-1747652224-0001.todo
new file mode 100644 (file)
index 0000000..4bf9286
--- /dev/null
@@ -0,0 +1,6 @@
+R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom2user1@subdom2.example.com
+R,1747652132,0 24649-20250519065532-0284-0000 noreply@example.com dom2user2@subdom2.example.com
+R,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com dom2user1@subdom2.example.com
+R,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com dom2user2@subdom2.example.com
+R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom2user1@subdom2.example.com
+R,1747652131,0 24643-20250519065530-0650-0000 webmaster@example.com dom2user2@subdom2.example.com
index ca2941c316dd4a9d5f05c1e5b83fea04b0773346..2564fdaf7957e3fa7903fac8ed01b214b8923699 100644 (file)
@@ -236,11 +236,10 @@ PUBLIC _Bool eml_todoqfile(TRATYP **list)
 
 {
 #define OPEP    "geseml.c:eml_todoqfile,"
+#define EXTOBE  "tobedone"
 
 _Bool done;
 REFTYP **domlist;
-const char *tobedone="tobedone";
-const char *todo="todo";
 
 done=false;
 domlist=(REFTYP **)0;
@@ -273,7 +272,7 @@ if (domlist!=(REFTYP **)0) {
     while (proceed==true) {
       switch (phase) {
         case 0  :       //Opening qfile
-          if ((qfile=eml_createqfile(qname,tobedone))==(FILE *)0) 
+          if ((qfile=eml_createqfile(qname,EXTOBE))==(FILE *)0) 
             phase=999;  //Trouble trouble
           break;
         case 1  :       //Opening qfile
@@ -291,7 +290,7 @@ if (domlist!=(REFTYP **)0) {
           (void) eml_closeqfile(qfile);
           break;
         case 3  :       //file ready, renaming file, 
-          (void) eml_renameqfile(qname,tobedone,todo);
+          (void) eml_renameqfile(qname,EXTOBE,EXTODO);
           break;
         default :       //SAFE Guard
           proceed=false;
@@ -306,5 +305,6 @@ if (domlist!=(REFTYP **)0) {
   (void) free(domlist);
   }
 return done;
+#undef  EXTOBE
 #undef  OPEP
 }
index 463e9c95a262bac393b98678f8102f4f0e08e301..ed565a22dbbccf765cb105a965c584a35f60428a 100644 (file)
@@ -329,7 +329,7 @@ while (proceed==true) {
         phase=999;              //Trouble trouble
       break;
     case 5      :       //renameing directive
-      if (eml_renameqfile(contact->cursesid,"tmp","trans")==false)
+      if (eml_renameqfile(contact->cursesid,"tmp",EXTRANS)==false)
         phase=999;              //Trouble trouble
       break;
     case 6      :       //everything fine
index 49190d8f761766ee23b01928815cb302964b8709..f93f1617b4300703b88986af0606852dcd01bd36 100644 (file)
@@ -405,7 +405,7 @@ while (proceed==true) {
         ptr=data->d_name;
         if (taille>0) {
           ptr=strstr(data->d_name,ext);
-          if ((ptr!=(char *)0)&&(strlen(ptr)!=taille)) 
+          if ((ptr!=(char *)0)&&(strlen(ptr)!=taille)&&(*(ptr-1)!='.')
             ptr=(char *)0;
           }
         if (ptr!=(char *)0) {
index 0b33d6272fc9b8c553a9cc1f5348a6d8a9c7030d..5ed8f8ab06b3c81505adf41f80057035a7e9bb47 100644 (file)
 #define NOTEML  553             //Not an email address
 #define MISSMX  563             //NO MX found for recipient
 
+//defining extensions
+#define EXTODO  "todo"          //todo qfile extension
+#define EXDONE  "done"          //todo file processing completed
+#define EXDOING "doing"         //todo file in sending mode
+#define EXTRANS "trans"         //trans qfile extension
 
 //list of keyword
 typedef enum    {               //list of SMTP protocol keyword