]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Able to store email within the queue directory
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 7 May 2025 23:23:22 +0000 (19:23 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 7 May 2025 23:23:22 +0000 (19:23 -0400)
lib/lvleml.c
lib/subrou.c
lib/unieml.c
lib/unieml.h

index 3417d6abff20d6ba846c5ac02365e5dd01475609..34c31e84959e35f9ea4052b48db549affd6a7593 100644 (file)
@@ -181,6 +181,7 @@ static _Bool getdata(CONTYP *contact)
 _Bool done;
 char *line;
 _Bool empty;
+FILE *queue;
 int got;
 int phase;
 _Bool proceed;
@@ -188,35 +189,47 @@ _Bool proceed;
 done=false;
 line=(char *)0;
 empty=false;
+queue=(FILE *)0;
 got=0;
 phase=0;
 proceed=true;
 while (proceed==true) {
   //(void) rou_alert(0,"JMPDBG %s phase='%d' empty='%d'",OPEP,phase,empty);
   switch (phase) {
-    case 0      :       //Do we have a parameter
+    case 0      :       //opening the queue email
+      if ((queue=eml_opennewqueue(contact->cursesid))==(FILE *)0) 
+        phase=999;      //trouble trouble
+      break;
+    case 1      :       //Do we have a parameter
       (void) transmit(contact,"%d 3.5.0 %s",
                               DATAOK,"End data with <CR><LF>.<CR><LF>");
       break;
-    case 1      :       //get incoming line
+    case 2      :       //get incoming line
       got=tcp_getline(contact->socptr,WAITLINE,&line);
-      if (got<=0) {     //data timeout
-        }
+      if (got<0)        //data timeout
+        phase=999;      //Trouble trouble
       break;
-    case 2      :       //just display line
+    case 3      :       //just display line
+      (void) fprintf(queue,"%s\n",line);
       if ((empty==false)||(strcmp(line,".")!=0))
-        phase=0;        //Wait for next line
+        phase=1;        //Wait for next line
       empty=false;
       if (strlen(line)==0)
         empty=true;
       line=rou_freestr(line);
       break;
-    case 3      :       //got all data
+    case 4      :       //got all data
+      if (eml_closenewqueue(queue)<0)
+        phase=999;              //Trouble trouble
+    case 5      :       //everything fine
       (void) transmit(contact,"%d 3.5.3 %s",
                               CMDOK,"Message accepted for delivery");
       done=true;
+      proceed=false;    //task done
       break;
     default     :       //SAFE guard
+      (void) transmit(contact,"%d 5.5.4 %s",
+                              DATRJC,"Server does not accept mail");
       proceed=false;
       break;
     }
index 389188f4888d6366718f985a1899a4c0ae1f1524..73199087821d34b29aee83995e9b6add10ac537d 100644 (file)
@@ -528,7 +528,9 @@ crashdir=(char *)0;
 doabort=false;
 phase=0;
 proceed=true;
+(void) rou_valert(0,fmt,args);
 while (proceed==true) {
+  //(void) rou_alert(0,"JMPDBG core phase='%d'",phase);
   switch (phase) {
     case 0      :               //find out if crashdir is existing
       if ((crashdir=get_dropzone())==(char *)0)
@@ -577,7 +579,6 @@ while (proceed==true) {
   phase++;
   }
 (void) sleep(COREDELAY);       /*to avoid crash avalanche      */
-(void) rou_valert(LOG_INFO,fmt,args);
 va_end(args);
 if (doabort==true) 
   (void) abort();      /*doing to do the abort         */
index 68d5868657bfd19fb1525b3564ce29f480254320..4f3a7ee6cb0c12dec182cf83e86b161f734295cf 100644 (file)
@@ -162,12 +162,12 @@ PUBLIC FILE *eml_opennewqueue(char *sessionid)
 {
 #define OPEP    "unieml.c:eml_opennewqueue,"
 
-FILE *fichier;
+FILE *newqueue;
 char *filename;
 int phase;
 int proceed;
 
-fichier=(FILE *)0;
+newqueue=(FILE *)0;
 filename=(char *)0;
 phase=0;
 proceed=true;
@@ -175,7 +175,7 @@ while (proceed==true) {
   //(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
   switch (phase) {
     case 0      :       //Do we have a session ID
-      if ((sessionid=(char *)0)||(strlen(sessionid)==0)) {
+      if ((sessionid==(char *)0)||(strlen(sessionid)==0)) {
         (void) rou_core_dump("%s sessionID is not set (bug?)",OPEP);
         phase=999;      //never reached
         }
@@ -183,7 +183,9 @@ while (proceed==true) {
     case 1      :       //"Computing" the file new queue filename
       filename=rou_apppath(QDIR);
       filename=(char *)realloc(filename,strlen(filename)+strlen(sessionid)+10);
-      if ((fichier=fopen(filename,"w"))==(FILE *)0) {
+      (void) strcat(filename,"/");
+      (void) strcat(filename,sessionid);
+      if ((newqueue=fopen(filename,"w"))==(FILE *)0) {
         (void) rou_alert(0,"%s Unable to open file <%s> (error=<%s>)",
                            OPEP,filename,strerror(errno));
         }
@@ -195,5 +197,28 @@ while (proceed==true) {
     }
   phase++;
   }
-return fichier;
+return newqueue;
+#undef  OPEP
+}
+/*
+^L
+*/
+/********************************************************/
+/*                                                      */
+/*     Procedure to close the file to the email stored */
+/*      stored within queue.                            */
+/*                                                      */
+/********************************************************/
+PUBLIC int eml_closenewqueue(FILE *newqueue)
+
+{
+#define OPEP    "unieml.c:eml_closenewqueue,"
+int status;
+
+if ((status=fclose(newqueue))<0) {
+  (void) rou_alert(0,"%s Unable to close queuefile (error=<%s>)",
+                           OPEP,strerror(errno));
+  }
+return status;
+#undef OPEP
 }
index 29d20e4be0811c12aad7fd7875a262cb811cd58c..fb8e93ab1df9fc7647506c209f335c786ece1723 100644 (file)
@@ -18,6 +18,7 @@
 #define        DATAOK  354             //Ready to accept EMAIL data
 #define BADPAR  501             //error in parameters
 #define CMDBAD  502             //command not implemented
+#define DATRJC  521             //Data Rejected
 
 
 //list of keyword