/* $OpenXM: OpenXM/src/asir-port/cgi/webasir2.c,v 1.2 2014/08/30 22:47:20 takayama Exp $ */ /* (httpd-asir2.sm1) run webasir2 */ #include #include #include #include #include #include #include #include #define SIZE 0x10000 char *byteArrayToUrlEncoding(char *s,int size); int Debug=1; int main(int argc,char *argv[]) { int dataPort; struct hostent *servhost; struct sockaddr_in dServer; FILE *fp; char s[1]; char fname[SIZE]; int i; char key[SIZE]; char comm[SIZE]; char *asircomm; int quit; quit = 0; asircomm="3-2;"; for (i=1; itmp-webasir.txt"); fp = fopen("tmp-webasir.txt","r"); if (fp == NULL) { fprintf(stderr,"No webasir2 is running.\n"); return(-1); } fgets(fname,SIZE-2,fp); for (i=strlen(fname)-1; i>=0; i--) { if (fname[i] <= ' ') fname[i]=0; else break; } fclose(fp); if (strlen(fname)==0) { fprintf(stderr,"No webasir2 pid file.\n"); return(-1); } fp = fopen(fname,"r"); if (fp == NULL) { fprintf(stderr,"Open error of %s\n",fname); return(-1); } fgets(key,SIZE-2,fp); sscanf(key,"%d",&dataPort); if (Debug) printf("dataPort=%d\n",dataPort); fgets(key,SIZE-2,fp); for (i=strlen(key)-1; i>=0; i--) { if (key[i] <= ' ') key[i]=0; else break; } if (Debug) printf("key=%s\n",key); fclose(fp); if ((servhost = gethostbyname("localhost")) == NULL) { fprintf(stderr,"bad server name.\n"); return(-1); } /* Connecting to the data port */ bzero((char *)&dServer,sizeof(dServer)); dServer.sin_family = AF_INET; dServer.sin_port = htons(dataPort); bcopy(servhost->h_addr, (char *)&dServer.sin_addr,servhost->h_length); if ((dataPort = socket(AF_INET,SOCK_STREAM,0)) <0) { fprintf(stderr,"socket allocation is failed.\n"); } 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"); } 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=%s;\n\n",key,byteArrayToUrlEncoding(asircomm,strlen(asircomm))); write(dataPort,comm,strlen(comm)); fflush(NULL); } /* get result */ for (i=0; i + */ 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