=================================================================== RCS file: /home/cvs/OpenXM/src/asir-port/cgi/webasir2.c,v retrieving revision 1.1 retrieving revision 1.4 diff -u -p -r1.1 -r1.4 --- OpenXM/src/asir-port/cgi/webasir2.c 2014/08/30 12:25:56 1.1 +++ OpenXM/src/asir-port/cgi/webasir2.c 2014/08/31 10:20:33 1.4 @@ -1,10 +1,14 @@ -/* $OpenXM$ +/* $OpenXM: OpenXM/src/asir-port/cgi/webasir2.c,v 1.3 2014/08/31 07:53:57 takayama Exp $ */ /* (httpd-asir2.sm1) run webasir2 + >log 2>&1 + Todo, timer(limit, command, message) implement in sm1. */ #include +#include #include +#include #include #include #include @@ -12,8 +16,13 @@ #include #define SIZE 0x10000 +#define MKEY "oxMessageBody=" +char *byteArrayToUrlEncoding(char *s,int size); +static int cgiHex(int p); +char *urlEncodedStringToString(char *s); int Debug=1; +int SetTimer=0; int main(int argc,char *argv[]) { int dataPort; struct hostent *servhost; @@ -21,17 +30,46 @@ int main(int argc,char *argv[]) { FILE *fp; char s[1]; char fname[SIZE]; - int i; + int i,j,c; char key[SIZE]; char comm[SIZE]; + char asircomm[SIZE]; int quit; + char workf[SIZE]; quit = 0; + strcpy(asircomm,"3-2;"); + strcpy(asircomm,"oxMessageBody=1%2B3%3B"); for (i=1; i SIZE-3) { + fprintf(stderr,"error, too big input.\n"); return(-1); + } + } + } else { + usage(); return(0); + } } - system("ls /tmp/webasir*.txt >tmp-webasir.txt"); - fp = fopen("tmp-webasir.txt","r"); + sprintf(workf,"/tmp/tmp-webasir-%d.txt",(int) getpid()); + sprintf(comm,"ls /tmp/webasir*.txt >%s",workf); + system(comm); + fp = fopen(workf,"r"); if (fp == NULL) { fprintf(stderr,"No webasir2 is running.\n"); return(-1); } @@ -55,6 +93,8 @@ int main(int argc,char *argv[]) { } if (Debug) printf("key=%s\n",key); fclose(fp); + sprintf(comm,"rm -f %s",workf); + system(comm); if ((servhost = gethostbyname("localhost")) == NULL) { fprintf(stderr,"bad server name.\n"); return(-1); @@ -72,15 +112,32 @@ int main(int argc,char *argv[]) { if (Debug) fprintf(stderr,"Trying to connect port %d ",ntohs(dServer.sin_port)); if (connect(dataPort,(struct sockaddr *)&dServer,sizeof(dServer)) == -1) { - fprintf(stderr,"cannot connect\n"); - }else{ fprintf(stderr,"Connected\n"); } + fprintf(stderr,"error: cannot connect\n"); + }else{ if (Debug) fprintf(stderr,"Connected\n"); } + /* If the input is MKEY=..., extract ... */ + if (strncmp(asircomm,MKEY,strlen(MKEY))==0) { + strcpy(comm,&(asircomm[strlen(MKEY)])); + strcpy(asircomm,comm); + strcpy(asircomm,urlEncodedStringToString(asircomm)); + if (Debug) fprintf(stderr,"oxMessageBody, asircomm=%s\n",asircomm); + } + + if (SetTimer) { + strcpy(comm,asircomm); + for (i=strlen(comm)-1; i>=0; i--) { + if ((comm[i] == ';') || (comm[i] <= ' ')) comm[i] = 0; + else break; + } + sprintf(asircomm,"timer(%d,%s,\"error(timeout %d sec)\");", + SetTimer,comm,SetTimer); + } if (quit) { sprintf(comm,"GET /?msg=httpdAsirMeta+quit HTTP/1.1\n\n"); write(dataPort,comm,strlen(comm)); fflush(NULL); }else{ - sprintf(comm,"GET /?%s=10-21;\n\n",key); + sprintf(comm,"GET /?%s=%s;\n\n",key,byteArrayToUrlEncoding(asircomm,strlen(asircomm))); write(dataPort,comm,strlen(comm)); fflush(NULL); } @@ -91,3 +148,88 @@ int main(int argc,char *argv[]) { printf("%s\n",comm); } +/* from kan96xx/plugin/oxcgi.c */ +/* . - _ A-Z a-z 0-9 + space --> + +*/ +static int isUrlEncoding3(char s) { + if ((s == '.') || (s == '-') || (s == '_')) return(0); + if ((s >= 'A') && (s <= 'Z')) return(0); + if ((s >= 'a') && (s <= 'z')) return(0); + if ((s >= '0') && (s <= '9')) return(0); + if (s == ' ') return(0); + return(1); +} + +char *byteArrayToUrlEncoding(char *s,int size) { + int n,i,j; + char *r; + n = 0; + /* get Size */ + for (i=0; i= '0' && p <= '9') return (p-'0'); + if (p >= 'A' && p <= 'F') return (p-'A'+10); + if (p >= 'a' && p <= 'f') return (p-'a'+10); + if (Debug) fprintf(stderr,"%s\n","Invalid argument to cgiHex."); +} + +usage() { + fprintf(stderr,"webasir2 [--quit] [--asir command_string]\n"); + fprintf(stderr," [--debug level]\n"); + fprintf(stderr," [--settimer seconds]\n"); + fprintf(stderr,"webasir2 --stdin ; command is obtained from the stdin.\n"); +}