time_t isnow;
MXTYP **mxs;
+TRATYP **tosend;
+int phase;
+_Bool proceed;
isnow=time((time_t *)0);
mxs=dns_getmx(domain);
-while (*tra!=(TRATYP *)0) {
- if (((*tra)->date+(*tra)->delay)<=isnow) {
- int phase;
- _Bool proceed;
-
- phase=0;
- proceed=true;
- while (proceed==true) {
- switch (phase) {
- case 0 : //is connection open?
- break;
- case 1 : //do we need to reset connection
+tosend=(TRATYP **)0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+ (void) rou_alert(0,"%s JMPDBG phase='%d'",OPEP,phase);
+ switch (phase) {
+ case 0 : //process completed?
+ if ((*tra)==(TRATYP *)0)
+ phase=999; //all scanning done
+ break;
+ case 1 : //collecting email to be sent
+ while (*tra!=(TRATYP *)0) {
+ if (strcmp((*tra)->sessid,sessid)!=0) {
+ sessid=(*tra)->sessid;
break;
- case 2 : //listing recipient
+ }
+ if (((*tra)->date+(*tra)->delay)<=isnow) {
switch ((*tra)->code) {
- case 'R' : //local email (MX is local)
- (void) rou_alert(0,"%s JMPDBG sending to recipient=<%s>",
- OPEP,(*tra)->rcptto);
+ case 'R' : //remote email (MX is remote)
+ (void) eml_add_delay(isnow,*tra);
+ tosend=(TRATYP **)rou_addlist((void **)tosend,(void *)(*tra));
break;
- default : //Unexpected remote? email??
+ default : //Status is not to be send
(void) rou_alert(0,"%s Directive is not! remote email (Bug?)",OPEP);
- (void) rou_alert(0,"%s TRA=<%cs %lu %04u %s %s %s",OPEP,
- (*tra)->code,
- (*tra)->date,
- (*tra)->delay,
- (*tra)->sessid,
- (*tra)->mailfrom,
- (*tra)->rcptto);
break;
}
- break;
- default : //SAFE Guard
- proceed=false;
- break;
+ }
+ tra++;
}
- phase++;
- }
+ break;
+ case 2 : //Checking if we have email to be sent
+ if (tosend==(TRATYP **)0)
+ phase=-1; //lets continue to see other email
+ break;
+ case 3 : //checking if connection is open
+ break;
+ case 4 : //Opening connection if not open
+ break;
+ case 5 : //sending recipient list
+ break;
+ case 6 : //send email data
+ break;
+ case 7 : //cleaning recipient list
+ (void) free(tosend);
+ tosend=(TRATYP **)0;
+ phase=0; //Lets see if we have other recipient
+ break;
+ default : //SAFE Guard
+ proceed=false;
+ break;
}
- (void) eml_add_delay(isnow,*tra);
- tra++;
+ phase++;
}
mxs=dns_freemxlist(mxs);
#undef OPEP