From: Jean-Marc Pigeon (Delson) Date: Tue, 10 Jun 2025 09:29:36 +0000 (-0400) Subject: Adding resp field to trans record X-Git-Tag: tag-0.8~39 X-Git-Url: https://jmp-git.ovh.safe.ca/?a=commitdiff_plain;h=5b5fa5b8ea1f3e90580644e200247725bf5a6e9f;p=jmp%2Fmailleur Adding resp field to trans record --- diff --git a/lib/geseml.c b/lib/geseml.c index fff34d9..b6c11e8 100644 --- a/lib/geseml.c +++ b/lib/geseml.c @@ -68,13 +68,14 @@ return found; */ /********************************************************/ /* */ -/* Procedure to display/debug TRATYP record content*/ +/* Procedure to add a add domain reference to a */ +/* list of reference. */ /* */ /********************************************************/ -static REFTYP **sortref(REFTYP **reflist,TRATYP *trans) +static REFTYP **addref(REFTYP **reflist,TRATYP *trans) { -#define OPEP "geseml.c:sortref," +#define OPEP "geseml.c:addref," char *dom; REFTYP *ref; @@ -134,6 +135,24 @@ return reflist; */ /********************************************************/ /* */ +/* Procedure to display/debug TRATYP record content*/ +/* */ +/********************************************************/ +static void print_tra(FILE *qfile,char *line,char *temps) + +{ +if (qfile==(FILE *)0) + (void) rou_alert(0,"TRA=<%s>",line); +else { + (void) fprintf(qfile,"%s\n",temps); + (void) fprintf(qfile,"%s\n",line); + } +} +/* + +*/ +/********************************************************/ +/* */ /* Procedure to display/debug ONE TRATYP record */ /* content */ /* */ @@ -159,13 +178,7 @@ if (tra!=(TRATYP *)0) { tra->mailfrom, tra->rcptto ); - if (qfile==(FILE *)0) { - (void) rou_alert(0,"TRA=<%s>",line); - } - else { - (void) fprintf(qfile,"%s\n",temps); - (void) fprintf(qfile,"%s\n",line); - } + (void) print_tra(qfile,line,temps); } return status; } @@ -215,17 +228,18 @@ return action; /* Procedure to free memory used by a TRATYP record*/ /* */ /********************************************************/ -PUBLIC TRATYP *eml_freetra(TRATYP *trans) +PUBLIC TRATYP *eml_freetra(TRATYP *tra) { -if (trans!=(TRATYP *)0) { - trans->rcptto=rou_freestr(trans->rcptto); - trans->mailfrom=rou_freestr(trans->mailfrom); - trans->sessid=rou_freestr(trans->sessid); - (void) free(trans); - trans=(TRATYP *)0; +if (tra!=(TRATYP *)0) { + tra->rcptto=rou_freestr(tra->rcptto); + tra->mailfrom=rou_freestr(tra->mailfrom); + tra->sessid=rou_freestr(tra->sessid); + tra->resp=(char **)rou_freelist((void **)tra->resp,(genfree_t)rou_freestr); + (void) free(tra); + tra=(TRATYP *)0; } -return trans; +return tra; } /* @@ -235,20 +249,29 @@ return trans; /* Procedure to duplicate TRATYP structure */ /* */ /********************************************************/ -PUBLIC TRATYP *eml_duptra(TRATYP *trans) +PUBLIC TRATYP *eml_duptra(TRATYP *tra) { TRATYP *dup; dup=(TRATYP *)0; -if (trans!=(TRATYP *)0) { +if (tra!=(TRATYP *)0) { dup=(TRATYP *)calloc(1,sizeof(TRATYP)); - dup->code=trans->code; - dup->date=trans->date; - dup->delay=trans->delay; - dup->rcptto=strdup(trans->rcptto); - dup->mailfrom=strdup(trans->mailfrom); - dup->sessid=strdup(trans->sessid); + dup->code=tra->code; + dup->date=tra->date; + dup->delay=tra->delay; + dup->rcptto=strdup(tra->rcptto); + dup->mailfrom=strdup(tra->mailfrom); + dup->sessid=strdup(tra->sessid); + if (tra->resp!=(char **)0) { + char **ptr; + + ptr=tra->resp; + while (*ptr!=(char *)0) { + dup->resp=(char **)rou_addlist((void **)dup->resp,(void *)strdup(*ptr)); + ptr++; + } + } } return dup; } @@ -338,7 +361,7 @@ REFTYP **domlist; domlist=(REFTYP **)0; if (list!=(TRATYP **)0) { while (*list!=(TRATYP *)0) { - domlist=sortref(domlist,*list); + domlist=addref(domlist,*list); list++; } } diff --git a/lib/geseml.h b/lib/geseml.h index 08fef29..209d566 100644 --- a/lib/geseml.h +++ b/lib/geseml.h @@ -23,6 +23,7 @@ typedef struct { char *mailfrom; //EMail Originator char *rcptto; //EMail Recipient int sendcode; //Email sending status; + char **resp; //Transfer response status }TRATYP; //procedure to dump a list of transfert record diff --git a/lib/lvleml.c b/lib/lvleml.c index 396c03d..a01b4d1 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -847,7 +847,7 @@ return done; /* Procedure to send the data to the remote server */ /* */ /********************************************************/ -static int senddata(RMTTYP *rmt,TRATYP **tosend,const char *sessid) +static void senddata(RMTTYP *rmt,TRATYP **tosend,const char *sessid) { #define OPEP "lvleml.c:senddata," @@ -888,7 +888,6 @@ while (proceed==true) { const char *fmt; unsigned int delta; - sent+=1023; sent/=1024; //Sent now in KByes fmt="Data stream Sent: %d Kbytes within %d.%03d seconds"; @@ -907,16 +906,34 @@ while (proceed==true) { break; } break; - case 4 : //Updating sending + case 4 : //Updating sending + TRATYP **dest; + + dest=tosend; + while (*dest!=(TRATYP *)0) { + switch ((*dest)->sendcode) { + case CMDOK : + if (rspcode==CMDOK) { + (*dest)->code='C'; //Data was sent properly + } + break; + case UKNUSER : //NO BREAK + case BADPAR : + break; + default : + (void) rou_alert(0,"%s sessid=<%s>, Unexpected code='%d' (Bug?)", + OPEP,sessid,rspcode); + break; + } + dest++; + } break; - default : //SAFE Guard + default : //SAFE Guard proceed=false; break; } phase++; } -return rspcode; - #undef OPEP } /* @@ -949,7 +966,7 @@ tobesend=0; phase=0; proceed=true; while (proceed==true) { - (void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase); + //(void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase); switch (phase) { case 0 : //process completed? if ((*tra)==(TRATYP *)0) @@ -1041,31 +1058,8 @@ while (proceed==true) { } dest++; } - if (tobesend==0) - phase++; //no user accepted (no data) - break; - } - case 7 : { //send email data - int rspcode; - TRATYP **dest; - - rspcode=senddata(&rmt,tosend,sessid); - dest=tosend; - while (*dest!=(TRATYP *)0) { - switch ((*dest)->sendcode) { - case CMDOK : - (*dest)->code='C'; //Data was sent properly - break; - case UKNUSER : //NO BREAK - case BADPAR : - break; - default : - (void) rou_alert(0,"%s sessid=<%s>, Unexpected code='%d' (Bug?)", - OPEP,sessid,rspcode); - break; - } - dest++; - } + if (tobesend>=0) + (void) senddata(&rmt,tosend,sessid); break; } case 8 : //cleaning recipient list