#test area sub directory
SBINDIR = usr/sbin
DATATST = data-tst
+LOCKDIR = $(TESTDIR)/var/run/$(APPNAME)
+
#managing debugging test
TESTDIR = $(CURDIR)/test_area
TESTIP = 127.127.10.25
#starting email receiver
EMLPAR = \
- -r $(TESTDIR) \
- -d8 \
+ -r $(TESTDIR) \
+ -d 8 \
:$(TESTIP):$(TESTPORT) \
emlrcvr : debug newtest
@ echo
@ echo "--------------"
@ echo "starting $@"
- @ $(TESTDIR)/$(SBINDIR)/$@ $(EMLPAR)
+ @ $(TESTDIR)/$(SBINDIR)/$@ \
+ $(EMLPAR)
@ echo "--------------"
valrcvr : clean debug newtest #valgrin dest
@ valgrind \
--leak-check=full \
--show-leak-kinds=all \
- --track-origins=yes \
- --trace-children=no \
- --track-fds=yes \
$(TESTDIR)/$(SBINDIR)/emlrcvr \
-f \
$(EMLPAR)
+# --track-fds=yes \
+# --track-origins=yes \
+# --trace-children=no \
+
dbgrcvr : clean debug newtest #using gdb
@ gdb --args \
$(TESTDIR)/$(SBINDIR)/emlrcvr \
-f \
$(EMLPAR)
-#--------------------------------------------------------------------
-#preparing a test area
-newtest : deltest
+norcvr :
+ @ - if [ -f $(LOCKDIR)/emlrcvr.lock ]; then \
+ echo "Terminating emlrcvr"; \
+ kill -TERM \
+ `cat $(LOCKDIR)/emlrcvr.lock`; \
+ fi
+
#--------------------------------------------------------------------
#test procedure
#--------------------------------------------------------------------
$(TESTDIR)
deltest :
- @ rm -fr $(TSTDIR)
+ @ rm -fr $(TESTDIR)
#--------------------------------------------------------------------
#Installation procedure
#--------------------------------------------------------------------
#definitions globale
-APPNAME = MAILLEUR
+APPNAME = mailleur
#--------------------------------------------------------------------
#Managing testarea
SBINDIR = usr/sbin
-CURDIR = `pwd`
+CURDIR = $(shell pwd)
#===================================================================
(void) sig_modeunisig(true);
(void) sig_trapsignal(true,sig_alrm);
break;
- case 2 : //doing main task
+ case 2 : //sett lock
+ if (prc_locking(appname,true,5)==false)
+ phase++; //no need to do task
+ break;
+ case 3 : //doing main task
if (foreground==true)
(void) fprintf(stdout,"Running application in foreground\n");
(void) rec_handlesmtp(params->argc,params->argv);
+ (void) prc_locking(appname,false,1);
break;
- case 3 : //doing main task
+ case 4 : //doing main task
(void) prc_cleantitle();
params=par_freeparams(params);
(void) sig_trapsignal(false,sig_alrm);
proceed=true;
while (proceed==true) {
switch (phase) {
- case 0 : //do we have a log name?
- if (log==(LOGTYP *)0) {
- (void) rou_alert(0,"%s log pointer is NULL (Bug!?)",OPEP);
+ case 0 : //do we have a log reference?
+ if (log==(LOGTYP *)0)
phase=999;
- }
break;
- case 1 : //do we have a log name?
+ case 1 : //closing log file
if (fclose(log->file)!=0) {
(void) rou_alert(0,"%s Unable to close log file <%s> (error=<%s>)",
OPEP,log->filename,strerror(errno));
soc->ip=rou_freestr(soc->ip);
soc->port=rou_freestr(soc->port);
soc->carpile=rou_freestr(soc->carpile);
+ soc->EOL=rou_freestr(soc->EOL);
(void) free(soc);
socptr=(SOCPTR *)0;
}
SOCTYP *soc;
soc=(SOCTYP *)calloc(1,sizeof(SOCTYP));
+soc->handle=-1;
soc->maxcarin=MXCARIN;
soc->carin=0;
soc->EOL=strdup(CRLF);
switch (phase) {
case 0 : //First prepare a new socket
newsoc=dupsocket(soc);
+ soc->handle=-1; //handle within sock not open
if (openplain(newsoc)==false)
- proceed=false; //received a termination signal
+ //received a termination signal
+ phase=999; //return a null socket
break;
case 1 : //wait for incoming connexion
switch (newsoc->proto) {
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //checking if soc is available
if (soc==(SOCTYP *)0) {
break;
case 2 : //waiting for new connection
if ((newsoc=waitincoming(soc))==(SOCPTR *)0) {
- (void) rou_core_dump("%s, Contact from Remote not successful",OPEP);
+ (void) rou_alert(0,"%s, Contact from Remote not successful",OPEP);
phase=999; //no need to go further
}
break;
phase=0;
proceed=true;
while (proceed==true) {
+ //(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //checking if soc is available
if (soc==(SOCTYP *)0) {
case 2 : //closing connexion
(void) closeplain(soc);
break;
- case 4 : //fee memory used by socket
+ case 3 : //fee memory used by socket
soc=freesocket(soc);
socptr=(SOCPTR *)soc;
break;
(void) log_fprintlog(contact->logptr,true,"%s",line);
(void) tcp_write(contact->socptr,line,strlen(line));
(void) tcp_write(contact->socptr,CRLF,strlen(CRLF));
+ (void) free(line);
}
va_end(args);
}
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase){
case 0 : //check for binding
if (socptr==(SOCPTR *)0) {
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //waiting contact
if ((contact=eml_getcontact(socptr,pos))==(CONTYP *)0)
case 2 : //do contact
switch (eml_docontact(contact)) {
case -1 : //Signal received
+ (void) rou_alert(0,"JMPDBG got sgnal within contact");
break;
case 0 : //exit under timeout
(void) rou_alert(0,"Contact with peer <%s> closed by timeout",
}
if ((hangup==true)||(reload==true))
phase=999;
- (void) sleep(5);
break;
case 3 : //Relax time
if ((hangup==false)&&(reload==false))
phase=0; //lets continue to check childs
+ if (foreground==true)
+ phase=999; //foreground ->one shot deal
break;
default : //SAFE Guard
(void) prc_killchilds(childs,iterations,maxretry);
phase=0;
proceed=true;
while (proceed==true) {
- //(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //Opening logs
(void) closelog();
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //preparing iteration
if ((nbrbind=prepbinding(&bindings,argc,argv))==0) {
}
break;
case 4 : //relax time
- (void) sleep(5); //Waiting for signal
if ((hangup==false)&&(reload==false))
phase=0; //Normal process, lets restart
break;
//version definition
#define VERSION "0.6"
-#define RELEASE "12"
+#define RELEASE "13"
//Public variables
PUBLIC int debug=0; //debug level
#include <time.h>
-#define APPNAME "maild" //application name
+#define APPNAME "mailleur" //application name
#define PUBLIC //to specify public variable