Ejemplo n.º 1
0
void ProjectHandle::clearProject(){
    emit cleanGl();
    emit cleanWindow();

    if(map!=NULL){
        if(map->data!=NULL){
            delete map->data;
        }
        delete map;
        map=NULL;
    }
    if(colorMap!=NULL){
        delete colorMap;
        colorMap = NULL;
    }
    projName="Default project";
    projPath="";
    projObjects.clear();
}
Ejemplo n.º 2
0
int metaconnectcommand (struct connection_t* co, char* inputbuffer, fd_set* read_set) {
	int inputcount = 0;
	char** buffer = parse(inputbuffer, &inputcount);

	/* Resets the terminal to it's original launch settings */
	if (!strcmp(buffer[0], RESET)) {
		/* Reset Terminal */
		endwin();

		/* Close active sockets */
		close(co->LEFT_FACING_SOCKET);
		close(co->RIGHT_FACING_SOCKET);
		close(co->LEFT_FACING_SOCKET_LISTENING);

		cleanWindowUpper(co->OUTGOING_LEFT_WINDOW);
		cleanWindowUpper(co->INCOMING_LEFT_WINDOW);
		cleanWindowUpper(co->OUTGOING_RIGHT_WINDOW);
		cleanWindowUpper(co->INCOMING_RIGHT_WINDOW);

		cleanWindow(co->OUTGOING_LEFT_WINDOW);
		cleanWindow(co->INCOMING_LEFT_WINDOW);
		cleanWindow(co->OUTGOING_RIGHT_WINDOW);
		cleanWindow(co->INCOMING_RIGHT_WINDOW);

		cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
		putInPromptLower(co->PROMPT_WINDOW, "Instance Reset");

		/* Handle initial NO_RIGHT */
		if (ORIGINAL_SETTINGS.NO_RIGHT) {
			putInWindowUpper(co->OUTGOING_RIGHT_WINDOW, "[NO RIGHT]");
			putInWindowUpper(co->INCOMING_RIGHT_WINDOW, "[NO RIGHT]");
		}

		/* Handle initial NO_LEFT */
		if (ORIGINAL_SETTINGS.NO_LEFT) {
			putInWindowUpper(co->OUTGOING_LEFT_WINDOW, "[NO LEFT]");
			putInWindowUpper(co->INCOMING_LEFT_WINDOW, "[NO LEFT]");
		}

		activate(ORIGINAL_SETTINGS);
	}

	/* Puts the left side in passive listening mode */
	else if (!strcmp(buffer[0], LISTENL)) {
		co->LEFT_REMOTE_PORT = 0;

		if (co->LEFT_FACING_SOCKET != SOCKET_RESET) {
			guiError ("Left side is already connected. Please drop left side.", *co);
			free (buffer);
			return 1;
		}

		if (inputcount > 1) {
			int port = atoi(buffer[1]);

			if (port < 1 || port > 65535) {
				cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
				putInPromptLower(co->PROMPT_WINDOW, "Specified port out of range [1 - 65535]");
				free(buffer);
				return 1;
			}

			co->LEFT_LOCAL_PORT = port;
			establish_passive_left(co, read_set);
		}
		else 
			establish_passive_left(co, read_set);

		co->NO_LEFT = 0;
	}

	/* Puts the right side in passive listening mode */
	else if (!strcmp(buffer[0], LISTENR)) {
		co->RIGHT_REMOTE_PORT = 0;

		if (co->RIGHT_FACING_SOCKET != SOCKET_RESET) {
			guiError ("Right side is already connected. Please drop right side.", *co);
			free (buffer);
			return 1;
		}

		if (inputcount > 1) {
			int port = atoi(buffer[1]);

			if (port < 1 || port > 65535) {
				cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
				putInPromptLower(co->PROMPT_WINDOW, "Specified port out of range [1 - 65535]");
				free(buffer);
				return 1;
			}

			co->RIGHT_LOCAL_PORT = port;
			establish_passive_right(co, read_set);
		}
		else 
			establish_passive_right(co, read_set);

		co->NO_RIGHT = 0;
	}

	/* Attempts an active connection on the right side */
	else if (!strcmp(buffer[0], CONNECTR)) {

		if (co->RIGHT_FACING_SOCKET != SOCKET_RESET) {
			guiError ("Right side is already connected. Please drop right side.", *co);
			free (buffer);
			return 1;
		}

		if (inputcount > 2) {
			int port = atoi(buffer[2]);

			if (port < 1 || port > 65535) {
				guiError ("Specified port out of range [1 - 65535]", *co);
				free(buffer);
				return 1;
			}

			co->RIGHT_REMOTE_PORT = port;
			co->RIGHT_REMOTE_ADDR = ipbydns(buffer[1]);
			co->RIGHT_REMOTE_DNS  = buffer[1]; 

			if (!strcmp(co->RIGHT_REMOTE_DNS, co->RIGHT_REMOTE_ADDR)) 
				co->RIGHT_REMOTE_DNS = NULL;

			establish_active_right(co, read_set);
		} 
		else if (inputcount > 1){
			co->RIGHT_REMOTE_PORT = DEFAULT_PORT;
			co->RIGHT_REMOTE_ADDR = ipbydns(buffer[1]);
			co->RIGHT_REMOTE_DNS  = buffer[1]; 

			if (!strcmp(co->RIGHT_REMOTE_DNS, co->RIGHT_REMOTE_ADDR)) 
				co->RIGHT_REMOTE_DNS = NULL;

			establish_active_right(co, read_set);
		}
		else {
			cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
			putInPromptLower(co->PROMPT_WINDOW, "Must specify address for active connection attempt.");
			free(buffer);
			return 1;
		}

		cleanWindowUpper(co->INCOMING_RIGHT_WINDOW);
		cleanWindowUpper(co->OUTGOING_RIGHT_WINDOW);
		resetPrompt(co->PROMPT_WINDOW, co->PROMPT, 0);

		if (co->NO_RIGHT) {
			co->OUTPUT_DIRECTION = 1;
			co->NO_RIGHT = 0;
		}
	}

	/* Attempts an active connection on the left side */
	else if (!strcmp(buffer[0], CONNECTL)) {

		if (co->LEFT_FACING_SOCKET != SOCKET_RESET) {
			guiError ("Left side is already connected. Please drop left side.", *co);
			free (buffer);
			return 1;
		}

		if (inputcount > 2) {
			int port = atoi(buffer[2]);

			if (port < 1 || port > 65535) {
				cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
				putInPromptLower(co->PROMPT_WINDOW, "Specified port out of range [1 - 65535]");
				free(buffer);
				return 1;
			}

			co->LEFT_REMOTE_PORT = port;
			co->LEFT_REMOTE_ADDR = ipbydns(buffer[1]);
			co->LEFT_REMOTE_DNS  = buffer[1]; 

			if (!strcmp(co->LEFT_REMOTE_DNS, co->LEFT_REMOTE_ADDR)) 
				co->LEFT_REMOTE_DNS = NULL;

			establish_active_left(co, read_set);
		} 
		else if (inputcount > 1){
			co->LEFT_REMOTE_PORT = DEFAULT_PORT;
			co->LEFT_REMOTE_ADDR = ipbydns(buffer[1]);
			co->LEFT_REMOTE_DNS  = buffer[1]; 

			if (!strcmp(co->LEFT_REMOTE_DNS, co->LEFT_REMOTE_ADDR)) 
				co->LEFT_REMOTE_DNS = NULL;

			establish_active_left(co, read_set);
		}
		else {
			cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
			putInPromptLower(co->PROMPT_WINDOW, "Must specify address for active connection attempt.");
			free(buffer);
			return 1;
		}

		cleanWindowUpper(co->INCOMING_LEFT_WINDOW);
		cleanWindowUpper(co->OUTGOING_LEFT_WINDOW);
		resetPrompt(co->PROMPT_WINDOW, co->PROMPT, 0);

		if (co->NO_LEFT) {
			co->OUTPUT_DIRECTION = 0;
			co->NO_LEFT = 0;
		}
	}

	/* Reads input from a file and injects it into the current data stream */
	else if (!strcmp(buffer[0], READ)) {
		char temp[100];

		if (inputcount > 1) {
			char readsend[BUFFER_SIZE];
			FILE *fp = fopen(buffer[1], "r");

			if (fp == 0) {
				cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
				putInPromptLower(co->PROMPT_WINDOW, "Failed to open specified file.");
				free(buffer);
				return 1;
			}

			fgets(readsend, BUFFER_SIZE-1, fp);
			readsend[BUFFER_SIZE] = '\0';

			fclose(fp);

			if (!co->NO_RIGHT && (co->OUTPUT_DIRECTION || co->NO_LEFT) && co->RIGHT_FACING_SOCKET != SOCKET_RESET) {
				if (!co->LOOP_RIGHT) 
					datatoright(readsend, co);
				else 
					datatoleft(readsend, co);
			}

			if (!co->NO_LEFT && (!co->OUTPUT_DIRECTION || co->NO_RIGHT) && co->LEFT_FACING_SOCKET != SOCKET_RESET) {
				if (!co->LOOP_LEFT)
					datatoleft(readsend, co);
				else 
					datatoright(readsend, co);
			}

			if (co->OUTPUT_DIRECTION)
				snprintf(temp, 100, "'%s' read and sent to right side", buffer[1]);
			else
				snprintf(temp, 100, "'%s' read and sent to left side", buffer[1]);

			cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
			putInPromptLower(co->PROMPT_WINDOW, temp);
		}

		else {
			cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
			putInPromptLower(co->PROMPT_WINDOW, "Must specify read file.");
		}
	}

	/* Default escape action */
	else {
		cleanPrompt(co->PROMPT_WINDOW, &co->PROMPT);
		free (buffer);
		return 0;
	}

	free(buffer);
	return 1;
}