typedef struct {
char *destip; //IP to connect to
char *destport; //Port to connect to
- char *srcip; //Ip to be used as source
+ char *srcip; //IP to be used as source
+ _Bool commented; //feed in comment mode
SOCPTR *socptr; //connection socket
}FEEDTYP;
+typedef enum { //List of command
+ cmd_gotls, //going in tls mode
+ cmd_restart, //restart connection with remote server
+ cmd_wait, //delay exchange with remote
+ cmd_comment, //Test sequence in int/out comment mode
+ cmd_unknown
+ }CMDTYP;
/*
\f
*/
*/
/************************************************/
/* */
+/* procedure to set feed scan in comment */
+/* mode. */
+/* */
+/************************************************/
+static _Bool setcomment(FEEDTYP *fd,char *action)
+
+{
+_Bool done;
+_Bool flag;
+
+done=false;
+flag=false;
+if (strcmp("START",action)==0)
+ flag=true;
+if (flag!=fd->commented) {
+ fd->commented=flag;
+ done=true;
+ }
+return done;
+}
+/*
+^L
+*/
+/************************************************/
+/* */
/* procedure to set the link in TLS mode */
/* */
/************************************************/
int code;
const char *cmd;
}cmdavail[]={
- {1,"GOTLS"},
- {2,"SLEEP"},
- {0,(const char *)0}
+ {cmd_comment,"COMMENT"},
+ {cmd_gotls,"GOTLS"},
+ {cmd_restart,"RESTART"},
+ {cmd_wait,"WAIT"},
+ {cmd_unknown,(const char *)0}
};
int code;
-code=0;
+code=cmd_unknown;
for (int i=0;cmdavail[i].cmd!=(const char *)0;i++) {
if (strcasecmp(cmdavail[i].cmd,command)==0) {
code=cmdavail[i].code;
/* protocol. */
/* */
/********************************************************/
-static _Bool docommand(SOCPTR *socptr,int numline,char *line)
+static _Bool docommand(FEEDTYP *fd,int numline,char *line)
{
_Bool status;
param++; //pointer on parameter
}
switch (getcmd(line)) {
- case 1 : //GOTLS
- if ((status=gomodetls(socptr))==false)
+ case cmd_gotls : //GOTLS
+ if ((status=gomodetls(fd->socptr))==false)
(void) report(numline,line,"Unable to set TLS mode");
break;
- case 2 : //SLEEP
+ case cmd_wait : //SLEEP mode
if (param!=(char *)0)
(void) sleep(atoi(param));
else {
status=false;
}
break;
+ case cmd_restart : //restart link
+ fd->socptr=soc_closefeedsock(fd->socptr);
+ (void) usleep(100000); //wait 10 millisec
+ fd->socptr=soc_openfeedsock(pro_smtp,fd->srcip,fd->destip,fd->destport);
+ if (fd->socptr==(SOCPTR *)0) {
+ (void) report(numline,line,"Unable to restart feed socket!");
+ status=false;
+ }
+ break;
+ case cmd_comment : //restart link
+ if (setcomment(fd,param)==false)
+ (void) report(numline,line,"Unable to set comment mode");
+ break;
+ case cmd_unknown :
default :
(void) report(numline,line,"Unknown command");
status=false;
case 2 : //discarding comment
switch (action) {
case 'C' : //command to execute
- status=docommand(fd->socptr,numline,line);
- break;
- case 'L' : //Restart Session
- fd->socptr=soc_closefeedsock(fd->socptr);
- (void) usleep(100000); //wait 10 millisec
- fd->socptr=soc_openfeedsock(pro_smtp,fd->srcip,fd->destip,fd->destport);
- if (fd->socptr==(SOCPTR *)0) {
- (void) report(numline,line,"Unable to restart feed socket!");
- status=false;
- phase=999; //Aborting feed job
- }
+ status=docommand(fd,numline,line);
break;
case 'R' : //Receiving data
status=doincoming(fd->socptr,numline,line);
case 'T' : //Get the test titre
status=strncpy(testname,line,sizeof(testname));
break;
- case 'W' : //Wait X second
- (void) sleep(atoi(line));
- break;
default : //Unexpected
line-=2;
(void) report(numline,line,"Unexpected directive");
numline++;
while ((ptr=strrchr(line,'\n'))!=(char *)0)
*ptr='\000';
+ if ((fd->commented==true)&&(strncmp(line,"C:",2)!=0))
+ continue;
if (scanline(fd,numline,line)==false) {
phase=999; //Trouble trouble exiting
break;