// // Get values in username and password. // pwr_tStatus CoLoginGtk::get_values() { char passwd[40]; char username[40]; char *value; pwr_tStatus sts; /* Get UserName */ value = gtk_editable_get_chars( GTK_EDITABLE(widgets.usernamevalue), 0, -1); strcpy(username, value); g_free( value); /* Get Password */ value = gtk_editable_get_chars( GTK_EDITABLE(widgets.passwordvalue), 0, -1); strcpy(passwd, value); sts = user_check( groupname, username, passwd); if ( EVEN(sts)) return sts; return LOGIN__SUCCESS; }
void loop_process(int cfd) { DEBUG(" Child=======> In child!\n"); int acceptfd; int recved; fd_set readfds; int delay = 300; struct timeval timeout; timeout.tv_sec = 10; timeout.tv_usec = 0; struct sockaddr_in client_addr; socklen_t sock_len = sizeof(struct sockaddr); char buffer[512]; ctl_hdr *hdr; uint16 ret_code = 0; //服务器对web服务器的回复报文 struct replay_packet replay; replay.head.len = 2; replay.head.encrpyt = ENCRPYT_NO; replay.head.mo = MO_SERVER; replay.head.ttl = 0; replay.head.ki = KI_REPLAY; while (1) { DEBUG(" Child=======> Waiting for connect! In child thread!\n"); FD_ZERO(&readfds); FD_SET(cfd, &readfds); timeout.tv_sec = delay; timeout.tv_usec = 0; int tt; switch(tt = select(cfd + 1, &readfds, NULL, NULL, &timeout)) { case -1: //error continue; break; default: if (FD_ISSET(cfd, &readfds)) { acceptfd = accept(cfd,(struct sockaddr *) &client_addr, &sock_len); if (acceptfd <=0) { DEBUG(" Child=======> accept failed!\n"); exit(-1); } recved = recv(acceptfd, buffer, sizeof(buffer), 0); DEBUG(" Child=======> Listen socket: %d\tAccept socket: %d\n", cfd, acceptfd); struct common_packet * common = (struct common_packet *)buffer; DEBUG(" Child=======> Received KI: %d\n", common->head.ki); DEBUG(" Child=======> Received data length: %d\n", recved); if (recved > 0) { hdr = (ctl_hdr *)buffer; //如果是登录请求 if (hdr->ki == KI_LOGIN) { //判断用户名和密码是否正确 struct register_struct * user_struct = (struct register_struct *)buffer; if (user_check(&(user_struct->user_struct)) == 0) { //登录成功 replay.data = RPL_LOGIN_SUCCESS; replay.head.extent = 111; writen(acceptfd, (void *)&replay, sizeof(replay)); DEBUG(" Child=======> Login successful!\n"); tcp_close(acceptfd); } else { replay.data = RPL_LOGIN_FALLED; writen(acceptfd, (void *)&replay, sizeof(replay)); DEBUG(" Child=======> Login failed!\n"); tcp_close(acceptfd); } } else if (hdr->ki == KI_REGISTER) { //用户注册 struct register_struct * user_struct = (struct register_struct *)buffer; if (user_register(&(user_struct->user_struct)) == 0) { //注册成功 replay.data = RPL_REGISTER_SUCCESS; writen(acceptfd, (void *)&replay, sizeof(replay)); DEBUG("Register User Successful\n"); tcp_close(acceptfd); } else { replay.data = RPL_REGISTER_FALLED; writen(acceptfd, (void *)&replay, sizeof(replay)); DEBUG("Register User Failed\n"); tcp_close(acceptfd); } //如果是发送的数据包,判断extent值,看是否已登录成功 } else { hdr = (ctl_hdr *)buffer; DEBUG(" Child=======> extent is : %d\tttl is : %d\n", hdr->extent, hdr->ttl); if ((hdr->extent) == 111) { ret_code = proc_packet(buffer, acceptfd); if (ret_code == RPL_NO_COMMON_REPLAY) { } else { replay.data = ret_code; writen(acceptfd, (void *)&replay, sizeof(replay)); } tcp_close(acceptfd); } } } } break; } tcp_close(acceptfd); DEBUG(" Child=======> tt is %d\n", tt); } }