count++;
if (((*ptr)->date+(*ptr)->delay)<=isnow) {
(void) eml_add_delay(isnow,*ptr);
+ (void) rou_alert(0,"%s rcpt email <%s> count='%d' sessid=<%s>",
+ OPEP,(*ptr)->rcptto,count,(*ptr)->sessid);
switch ((*ptr)->code) {
case 'L' : //local delivery
- (void) rou_alert(0,"%s local email count='%d'",OPEP,count);
(*ptr)->code='C'; //delivery done 'C'ompleted
if (eml_store_email(*ptr)==false) {
(*ptr)->code='L'; //delivery done 'D'elayed
*/
/********************************************************/
/* */
+/* Procedure to compare 2 transaction struct */
+/* */
+/********************************************************/
+static int cmp_sessid(const void *p1,const void *p2)
+
+
+{
+return strcmp((*((TRATYP **)p1))->sessid,(*((TRATYP **)p2))->sessid);
+}
+/*
+\f
+*/
+/********************************************************/
+/* */
/* Procedure to display/debug TRATYP record content*/
/* */
/********************************************************/
phase=999; //Trouble trouble
break;
case 1 : //dumping TRANS data to file
- if ((action=eml_dumptra(qfile,(*ptr)->todo))==true)
+ (void) eml_sort_list((*ptr)->todo);
+ if ((action=eml_dumptra(qfile,(*ptr)->todo))==true) {
ext=EXTODO;
+ }
break;
case 2 : //Closing file
(void) eml_closeqfile(qfile);
return status;
#undef OPEP
}
+/*
+^L
+*/
+/********************************************************/
+/* */
+/* Procedure to make sure todo list is sorted */
+/* according the session id. */
+/* */
+/********************************************************/
+PUBLIC _Bool eml_sort_list(TRATYP **list)
+
+{
+_Bool result;
+
+result=false;
+if (list!=(TRATYP **)0) {
+ register int num;
+
+ num=rou_nbrlist((void **)list);
+ (void) qsort((void *)list,num,sizeof(TRATYP *),cmp_sessid);
+ result=true;
+ }
+return result;
+}
//procedure to fork a process and start the "sender" process
extern _Bool eml_start_sender(char *todo);
+//procedure to sort a transmission list according sessionid
+extern _Bool eml_sort_list(TRATYP **List);
+
#endif