/* * Automatic page selection : AutoPage.c * * Kim, Jinsuk * jskim@bioinfo.kordic.re.kr */ #include #include #define HAN "h_index.html" /* Hangul Page */ #define ENG "e_index.html" /* English Page */ #define KR_DOMAIN "/usr/www/DOCS/domains.kr" /* kr domain data */ #define ACC_NUM_FILE "acc_counter.dat" #define YES 1 #define NO 0 void loadbody(char *body) { FILE *fp; char buf[255]; if ( (fp = fopen(body, "r")) == NULL ) { printf("File open error\n"); exit(1); } while( fgets(buf, 255, fp) ) printf("%s", buf); fclose(fp); } main() { int j, tmp[6]; long int i, n; int kr_domain=NO, use_han=NO; char buf[80], rev_host[80]; char *host, *hostip, *agent, *query; FILE *fp; printf("Content-type: text/html%c%c",10,10); host = getenv("REMOTE_HOST"); hostip = getenv("REMOTE_ADDR"); agent = getenv("HTTP_USER_AGENT"); query = getenv("QUERY_STRING"); /* Reverse host name */ for (i=strlen(host), j=0; i > 0; i--, j++) buf[j] = host[i-1]; if ( (!strncmp(buf, "ten.irun.", 9) || !strncmp(buf, "rk.", 3)) ) kr_domain = YES; else if ( !strcmp(host, hostip) ){ /* if name resolving failed */ if ( (fp = fopen(KR_DOMAIN, "r")) == NULL ) { printf("File open error"); exit(1); } while (fgets(buf, 80, fp)) { if ( !strncmp(buf, hostip, strlen(buf)-1) ){ kr_domain = YES; break; } } fclose(fp); } else kr_domain = NO; if ( strstr(agent, "Window") || strstr(agent, "Win95") || strstr(agent, "Mozilla/2.0") ) use_han = YES; if (strlen(query) > 0) { if (strstr(query, "English")) loadbody(ENG); else if (strstr(query, "Korean")) loadbody(HAN); } else if (kr_domain && use_han) { loadbody(HAN); } else { loadbody(ENG); } if((fp=fopen(ACC_NUM_FILE, "r"))==NULL){ printf("OOPS! Counter File Open Error"); exit(1); } fscanf(fp,"%d",&n); fclose(fp); if((fp=fopen(ACC_NUM_FILE, "w"))==NULL){ printf("OOPS! Counter File Open Error"); exit(1); } fprintf(fp,"%d\n",n+1); fclose(fp); for (i=0; i<6; i++) { tmp[i] = n%10; n = (long) n/10; } for (i=5; i >= 0; i--) { switch ( tmp[i]) { case 0: printf(""); break; case 1: printf(""); break; case 2: printf(""); break; case 3: printf(""); break; case 4: printf(""); break; case 5: printf(""); break; case 6: printf(""); break; case 7: printf(""); break; case 8: printf(""); break; case 9: printf(""); break; default: break; } } exit(0); }