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;
}
示例#3
0
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;
}