#--------------------------------------------------------------------
#testing feed
-ONEFEED=feed01.tst
+ONEFEED=feed03.tst
FEEDPAR = \
$(TESTIP) \
break;
case 3 : //dispatching email
if (dispatcher(tra)==false) { //trouble backtracking file
+ (void) rou_alert(0,"%s JMPDBG <%s> dispatcher FALSE (Bug?)",OPEP,fname);
+
(void)eml_renameqfile(fname,EXDOING,EXTODO);
phase=999; //No need to go further
}
break;
case 5 : //updating transfile
(void) eml_dump_list_tra(qfile,tra);
+ tra=(TRATYP **)rou_freelist((void **)tra,(genfree_t)eml_freetra);
break;
case 6 : //closing file
qfile=eml_closeqfile(qfile);
status=true;
break;
default : //SAFE Guard
+ //tra=(TRATYP **)rou_freelist((void **)tra,(genfree_t)eml_freetra);
qfile=eml_closeqfile(qfile);
proceed=false;
break;
*/
/********************************************************/
/* */
+/* Procedure to duplcate an resp list within a tra */
+/* record. */
+/* */
+/********************************************************/
+PUBLIC void eml_duptra_resp(TRATYP *tra,char **resp)
+
+{
+if (tra!=(TRATYP *)0) {
+ (void) eml_freetra_resp(tra);
+ if (resp!=(char **)0) {
+ while (*resp!=(char *)0) {
+ tra->resp=(char **)rou_addlist((void **)tra->resp,strdup(*resp));
+ resp++;
+ }
+ }
+ }
+}
+/*
+\f
+*/
+/********************************************************/
+/* */
/* Procedure to duplicate TRATYP structure */
/* */
/********************************************************/
//procedure to dump a list of transfert record
extern _Bool eml_dump_list_tra(FILE *out,TRATYP **tra);
-//procedure to fee memory used by the resp rercord within TRATYP structure
+//procedure to fee memory used by the resp record within TRATYP structure
extern void eml_freetra_resp(TRATYP *tra);
+//procedure to fee memory used to duplicate a resp list to tra resp
+extern void eml_duptra_resp(TRATYP *tra,char **resp);
+
//procedure to fee memory used by a TRATYP structure
extern TRATYP *eml_freetra(TRATYP *tra);
static _Bool reset_mx(RMTTYP *rmt)
{
+#define OPEP "lvleml.c:reset_mx,"
+
_Bool ok;
-int phase;
-_Bool proceed;
+int rspcode;
+char **resp;
ok=false;
-phase=0;
-proceed=true;
-while (proceed==true) {
- switch (phase) {
- break;
- default : //SAFE Guard
- proceed=false;
- break;
- }
- phase++;
+resp=(char **)0;
+rspcode=tcp_smtp_command(rmt,&resp,"RSET");
+switch (rspcode) {
+ case CMDOK : //Everythin fine
+ ok=true;
+ break;
+ default :
+ (void) rou_alert(0,"%s Unexpected code='%d' (Code?)",OPEP,rspcode);
+ for (int i=0;resp[i]!=(char *)0;i++)
+ (void) rou_alert(0,"%s resp[%d]=<%s>",OPEP,i,resp[i]);
+ break;
}
+resp=(char **)rou_freelist((void **)resp,(genfree_t)rou_freestr);
return ok;
+
+#undef OPEP
}
/*
^L
int sent;
TIMESPEC start;
char *sessid;
+char **resp;
int phase;
_Bool proceed;
rspcode=0;
sent=0;
sessid=(*tosend)->sessid;
+resp=(char **)0;
phase=0;
proceed=true;
(void) clock_gettime(CLOCK_REALTIME,&start);
break;
case 2 : //send the text termination
(void) tcp_write(rmt->socptr,".");
- rspcode= tcp_get_smtp_reply(rmt,WAITRMT,(char ***)0);
+ rspcode= tcp_get_smtp_reply(rmt,WAITRMT,&resp);
break;
case 3 : //sending session data
const char *fmt;
dest=tosend;
while (*dest!=(TRATYP *)0) {
+ (void) eml_duptra_resp(*dest,resp);
switch ((*dest)->sendcode) {
case CMDOK :
if (rspcode==CMDOK) {
}
phase++;
}
+resp=(char **)rou_freelist((void **)resp,(genfree_t)rou_freestr);
#undef OPEP
}
/*
*ptr='\000';
(void) snprintf(cmt,sizeof(cmt),"main-session-id=%s",mainsesid);
logptr=log_openlog(mainsesid,false,cmt);
+ mainsesid=rou_freestr(mainsesid);
break;
case 3 : //sending all email within transaction
(void) sending_email(logptr,tra);
APPNAME,debug);
break;
case SIGPIPE :
+ (void) rou_alert(0,"%s JMPDBG got SIGPIPE",APPNAME);
break;
default :
(void) rou_alert(0,"Unexpected Signal [%d]/<%s> received",
(void) sigaction(SIGQUIT,newsa,olds[4]);
(void) sigaction(SIGHUP,newsa,olds[5]);
(void) sigaction(SIGALRM,newsa,olds[6]);
- (void) sigaction(SIGPIPE,newsa,olds[7]);
- (void) sigaction(SIGCHLD,newsa,olds[8]);
+ (void) sigaction(SIGCHLD,newsa,olds[7]);
+ (void) sigaction(SIGPIPE,newsa,olds[8]);
(void) free(newsa);
if ((sfd=signalfd(-1, &mask, 0))<0) {
(void) rou_alert(0,"%s Unable to set signalfd (error=<%s>)",
else {
int i;
- (void) sigaction(SIGCHLD,olds[8],(struct sigaction *)0);
- (void) sigaction(SIGPIPE,olds[7],(struct sigaction *)0);
+ (void) sigaction(SIGPIPE,olds[8],(struct sigaction *)0);
+ (void) sigaction(SIGCHLD,olds[7],(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);
#include <sys/socket.h>
#include <netdb.h>
#include <poll.h>
+#include <signal.h>
#include <stdio.h>
#include <unistd.h>
}
break;
case 1 : //set certificate
+ //valgrind is trapping SIGPIPE and stop
+ struct sigaction oldsa;
+
+ (void) sigaction(SIGPIPE,(struct sigaction *)0,&oldsa);
+ (void) signal(SIGPIPE, SIG_IGN);
status=SSL_shutdown(tls->ssl);
if (status<0)
(void) rou_alert(0,"%s, Link with [%s], ssl_shutdown status='%d'",
OPEP,tls->peerip,status);
+ (void) sigaction(SIGPIPE,&oldsa,(struct sigaction *)0);
break;
default : //SAFE guard
tls=freetls(tls);