$(TESTPORT) \
$(TESTDIR)/$(DATATST)/feed*.tst \
+onefeed : debug
+ @ bin/feeder \
+ -d 3 \
+ $(TESTIP) \
+ $(TESTPORT) \
+ $(TESTDIR)/$(DATATST)/feed00.tst
+
#direct test
tstfeed : debug
@ bin/feeder $(FEEDPAR)
-d 8 \
:$(TESTIP):$(TESTPORT) \
-emlrcvr : debug newtest
+emlrcvr : clean debug newtest #starting email receiver
@ echo
@ echo "--------------"
@ echo "starting $@"
@ $(TESTDIR)/$(SBINDIR)/$@ \
+ -f \
$(EMLPAR)
@ echo "--------------"
-valrcvr : clean debug newtest #valgrin dest
+valrcvr : clean debug newtest #valgring of emlrcvr
@ echo "emlrec valgrind test"
@ valgrind \
--leak-check=full \
# --track-origins=yes \
# --trace-children=no \
-dbgrcvr : clean debug newtest #using gdb
+dbgrcvr : clean debug newtest #debugging emlrcvr
@ gdb --args \
$(TESTDIR)/$(SBINDIR)/emlrcvr \
-f \
@ mkdir -p $(TESTDIR)/var/run
@ mkdir -p $(TESTDIR)/var/spool/clement/{in,out}-logs
@ mkdir -p $(TESTDIR)/$(SBINDIR)
- @ cp -a \
- bin/{chkspf,emlrcvr} \
+ @ cp -a \
+ bin/{chkspf,emlrcvr} \
$(TESTDIR)/$(SBINDIR)
- @ cp -a \
- $(DATATST) \
+ @ cp -a \
+ $(DATATST) \
$(TESTDIR)
deltest :
@ echo $@ need to implemented
#--------------------------------------------------------------------
-SUBDIR = \
- lib \
- app \
+SUBDIR = \
+ lib \
+ app \
#--------------------------------------------------------------------
#definitions globale
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //sanity check
if (soc==(SOCTYP *)0) {
}
break;
case 1 : //check if time to retry binding
- if ((soc->lasttry+5)>time((time_t)0))
+ if ((soc->lasttry+5)>time((time_t)0)) {
phase=999; //no need to go further
+ }
break;
case 2 : //to have the right address infp
int status;
soc->handle=-1;
break;
default : //SAFE Guard
+ soc->lasttry=(time_t)0;
proceed=false;
break;
}
PUBLIC int soc_waitforchar(SOCPTR *socptr,TIMESPEC *attend)
{
+#define OPEP "devsoc.c:soc_waitforchar"
register int status;
SOCTYP *soc;
if (soc!=(SOCTYP *)0) {
struct pollfd polling[1];
- polling[0].events=POLLIN|POLLPRI;
+ polling[0].events=POLLIN|POLLPRI|POLLERR|POLLHUP;
polling[0].revents=(short)0;
switch (soc->modtls) {
case true :
break;
}
status=ppoll(polling,1,attend,(sigset_t *)0);
+ switch (status) {
+ case -1 :
+ (void) rou_alert(0,"%s Polling error (error=<%s>)",OPEP,strerror(errno));
+ break;
+ case 0 :
+ (void) rou_alert(0,"%s Polling timeout",OPEP);
+ break;
+ case 1 :
+ if ((polling[0].revents&POLLHUP)==POLLHUP) {
+ (void) close(soc->handle);
+ soc->handle=-1;
+ status=0;
+ }
+ if ((polling[0].revents&POLLERR)==POLLERR) {
+ (void) rou_alert(0,"%s Polling POLLERR detection",OPEP);
+ }
+ break;
+ default :
+ break;
+ }
}
return status;
+#undef OPEP
}
/*
^L
PUBLIC int soc_writebuffer(SOCPTR *socptr,char *buffer,int tosend)
{
+#define OPEP "devsoc.c:soc_writebuffer"
+
int sent;
SOCTYP *soc;
sent=send(soc->handle,buffer,tosend,0);
break;
}
+ if (sent<0) {
+ (void) rou_alert(0,"%s Unable to send data, error=%d <%s> (Bug)",
+ OPEP,errno,strerror(errno));
+ }
}
return sent;
+#undef OPEP
}
/*
^L
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 :
if (socptr==(SOCPTR *)0) {
case 1 : //get nextline
if ((got=soc_getnextline(socptr,lineptr))>0)
phase=999; //we got a line.
+ (void) rou_alert(0,"JMPDBG %s phase='%d' got='%d'",OPEP,phase,got);
break;
case 2 : //waiting for new character presence
got=soc_waitforchar(socptr,attend);
+ (void) rou_alert(0,"JMPDBG %s phase='%d' got='%d'",OPEP,phase,got);
switch (got) {
case -1 : //trouble? signal?
if ((hangup==true)||(reload==true))
attend.tv_sec=60;
attend.tv_nsec=0;
status=tcp_getline(contact->socptr,&attend,&line);
- if (status<=0) //timeout or trouble?
+ (void) rou_alert(0,"%s, JMPDBG tcp_getline status='%d'",OPEP,status);
+ if (status<=0) { //timeout or trouble?
+ (void) rou_alert(0,"%s, lost contact",OPEP);
break; //no need to go further
+ }
(void) log_fprintlog(contact->logptr,false,"%s",line);
switch (eml_getcode(line)) {
case c_helo : //HELO SMTP protocol
static int prepbinding(SOCPTR ***bindings,int argc,char *argv[])
{
-#define OPEP "moderec.c:prepbinding"
+#define OPEP "modrec.c:prepbinding"
*bindings=(SOCPTR **)0;
for (int i=0;i<argc;i++) {
static void docontact(SOCPTR *socptr,int pos)
{
-#define OPEP "modrec.c:contact"
+#define OPEP "modrec.c:docontact"
#define TESTL 8
CONTYP *contact;
case 2 : //do contact
switch (eml_docontact(contact)) {
case -1 : //Signal received
- (void) rou_alert(0,"JMPDBG got sgnal within contact");
+ (void) rou_alert(0,"JMPDBG got signal within contact");
break;
case 0 : //exit under timeout
(void) rou_alert(0,"Contact with peer <%s> closed by timeout",
contact->peerip);
break;
default : //exit under quit
+ (void) rou_alert(0,"JMPDBG exit under quit");
break;
}
break;
static void startwaiter(SOCPTR *socptr)
{
-#define OPEP "moderec.c:startwaiter"
+#define OPEP "modrec.c:startwaiter"
int phase;
_Bool proceed;
}
phase++;
}
+(void) rou_alert(0,"JMPDBG %s exiting",OPEP);
#undef OPEP
}
//version definition
#define VERSION "0.6"
-#define RELEASE "14"
+#define RELEASE "15"
//Public variables
PUBLIC int debug=0; //debug level
(void) sigaction(SIGQUIT,newsa,olds[4]);
(void) sigaction(SIGHUP,newsa,olds[5]);
(void) sigaction(SIGALRM,newsa,olds[6]);
+ (void) sigaction(SIGPIPE,newsa,olds[6]);
(void) free(newsa);
}
else {
int i;
+ (void) sigaction(SIGPIPE,olds[6],(struct sigaction *)0);
(void) sigaction(SIGALRM,olds[6],(struct sigaction *)0);
(void) sigaction(SIGHUP,olds[5],(struct sigaction *)0);
(void) sigaction(SIGQUIT,olds[4],(struct sigaction *)0);