#define OPEP "lvleml.c:getdata,"
_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=setdirectives(contact,"tmp");
while (proceed==true) {
(void) transmit(contact,"%d 3.5.0 %s",
DATAOK,"End data with <CR><LF>.<CR><LF>");
break;
- case 3 : //get incoming line
- got=tcp_getline(contact->socptr,WAITLINE,&line);
- if (got<0) //data timeout
- phase=999; //Trouble trouble
+ case 3 : //get incoming line, detect 'single dot' as end
+ while (proceed==true) {
+ int completed;
+ int got;
+ char *line;
+
+ completed=false;
+ got=tcp_getline(contact->socptr,WAITLINE,&line);
+ if (got<0) { //data timeout
+ phase=999; //trouble trouble
+ break; //exiting loop
+ }
+ if ((empty==false)||(strcmp(line,".")!=0)) {
+ if (strcmp(line,"..")==0)
+ line[1]='\000';
+ (void) fprintf(queue,"%s\n",line);
+ }
+ else
+ completed=true;
+ empty=(strlen(line)==0);
+ line=rou_freestr(line);
+ if (completed==true)
+ break;
+ }
break;
case 4 : //just display line
- if ((empty==false)||(strcmp(line,".")!=0)) {
- (void) fprintf(queue,"%s\n",line);
- phase=1; //Wait for next line
- }
empty=false;
- if (strlen(line)==0)
- empty=true;
- line=rou_freestr(line);
break;
case 5 : //got all data
if (eml_closeqfile(queue)<0)