bool RadarServer::send_response(std::string& response) { if (!send_data(response)) { finalize_client(); return false; } return true; }
std::string& RadarServer::get_request(void) { transmit_buffer.clear(); if (sock_client > 0) finalize_client(); if ((sock_listen < 0) && !start_listening()) { DERR << "listener socket invalid, " << "restarting in some seconds..." << std::endl; sleep(5); } else if (accept_client()) { if (sock_getcmd()) shutdown(sock_client, SHUT_RD); else finalize_client(); } return transmit_buffer; }
void *client_thread(void *arg) { client_t *client = (client_t *)arg; for(;;) { netiso_cmd cmd; int ret; ret = recv_all(client->s, (void *)&cmd, sizeof(cmd)); if (ret != sizeof(cmd)) { break; } switch (BE16(cmd.opcode)) { case NETISO_CMD_OPEN_FILE: ret = process_open_cmd(client, (netiso_open_cmd *)&cmd); break; case NETISO_CMD_READ_FILE_CRITICAL: ret = process_read_file_critical(client, (netiso_read_file_critical_cmd *)&cmd); break; case NETISO_CMD_READ_CD_2048_CRITICAL: ret = process_read_cd_2048_critical_cmd(client, (netiso_read_cd_2048_critical_cmd *)&cmd); break; case NETISO_CMD_READ_FILE: ret = process_read_file_cmd(client, (netiso_read_file_cmd *)&cmd); break; case NETISO_CMD_CREATE_FILE: ret = process_create_cmd(client, (netiso_create_cmd *)&cmd); break; case NETISO_CMD_WRITE_FILE: ret = process_write_file_cmd(client, (netiso_write_file_cmd *)&cmd); break; case NETISO_CMD_OPEN_DIR: ret = process_open_dir_cmd(client, (netiso_open_dir_cmd *)&cmd); break; case NETISO_CMD_READ_DIR_ENTRY: ret = process_read_dir_entry_cmd(client, (netiso_read_dir_entry_cmd *)&cmd, 1); break; case NETISO_CMD_DELETE_FILE: ret = process_delete_file_cmd(client, (netiso_delete_file_cmd *)&cmd); break; case NETISO_CMD_MKDIR: ret = process_mkdir_cmd(client, (netiso_mkdir_cmd *)&cmd); break; case NETISO_CMD_RMDIR: ret = process_rmdir_cmd(client, (netiso_rmdir_cmd *)&cmd); break; case NETISO_CMD_READ_DIR_ENTRY_V2: ret = process_read_dir_entry_cmd(client, (netiso_read_dir_entry_cmd *)&cmd, 2); break; case NETISO_CMD_STAT_FILE: ret = process_stat_cmd(client, (netiso_stat_cmd *)&cmd); break; case NETISO_CMD_GET_DIR_SIZE: ret = process_get_dir_size_cmd(client, (netiso_get_dir_size_cmd *)&cmd); break; default: DPRINTF("Unknown command received: %04X\n", BE16(cmd.opcode)); ret = -1; } if (ret != 0) { break; } } finalize_client(client); return NULL; }