-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) \
/********************************************************/
#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
//(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);
(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);
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;
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>
+++ /dev/null
-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
+++ /dev/null
-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
+++ /dev/null
-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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+L,1747652129,0 24634-20250519065528-0893-0000 postmaster@example.com webmaster@example.com
+++ /dev/null
-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
--- /dev/null
+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
+++ /dev/null
-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
--- /dev/null
+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
{
#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;
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
(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;
(void) free(domlist);
}
return done;
+#undef EXTOBE
#undef OPEP
}
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
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) {
#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