_Bool done;
char *line;
_Bool empty;
+FILE *queue;
int got;
int phase;
_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;
}
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)
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 */
{
#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;
//(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
}
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));
}
}
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
}
#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