コード例 #1
0
ファイル: streams.c プロジェクト: digideskio/moped
uint16_t handle_StreamsCommand(TCF_Command* command, char* buf) {
	TCF_Streams_Command streams_cmd;

	/* Start building return message */
	start_tcf_field(buf, (char *)TCF_S_R); /* Start */
	append_tcf_field(buf, command->token);  /* Token */

	if (strcmp(command->commandName, Streams_Read) == 0) {
		/* C • <token> • Streams • read • <string: stream ID> • <int: size> • */
		/* R • <token> • <string: data> • <error report> • <int: lost size> • <boolean: EOS> */
		if(parse_read(command->arguments,&streams_cmd,command->args_len) != E_OK){
			return 0;
		}

		/* Add data field */
		mystrcat(buf, JSON_Stringify);
		int len = TCF_TTY_ReadString(tmp_stream, 199);
        if(len >= 200){
            return 0;
        }
		tmp_stream[len] = '\0'; /* Terminate to be sure */
		mystrcat(buf, tmp_stream);
		mystrcat(buf, JSON_Stringify);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);

		/* Add error field */
		mystrcat(buf, JSON_null);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);

		//mystrcat(buf, Streams_LostSize);
		ultoa(0,tmp_stream,10);
		mystrcat(buf,tmp_stream);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);

		//mystrcat(buf, Streams_EOS);
		mystrcat(buf, Streams_false);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);
	} else if (strcmp(command->commandName, Streams_Write) == 0) {
		/* C • <token> • Streams • write • <string: stream ID> • <int: size> • <string: data> • */
		/* R • <token> • <error report> */
		if(parse_write(command->arguments,&streams_cmd,command->args_len) != E_OK){
			return 0;
		}

		/* Add error field */
		mystrcat(buf, JSON_null);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);
	} else if (strcmp(command->commandName, Streams_Subscribe) == 0) {
		/* R • <token> • <error report> */
		if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){
			return 0;
		}
		/* Add error field */
		mystrcat(buf, JSON_null);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);
	}else if (strcmp(command->commandName, Streams_Unsubscribe) == 0) {
		/* R • <token> • <error report> */
		if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){
			return 0;
		}
		/* Add error field */
		mystrcat(buf, JSON_null);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);
	}else if (strcmp(command->commandName, Streams_Connect) == 0) {
		/* R • <token> • <error report> */
		if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){
			return 0;
		}
		/* Add error field */
		mystrcat(buf, JSON_null);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);
	}else if (strcmp(command->commandName, Streams_Disconnect) == 0) {
		/* R • <token> • <error report> */
		if(parse_id(command->arguments,&streams_cmd,command->args_len) != E_OK){
			return 0;
		}
		/* Add error field */
		mystrcat(buf, JSON_null);
		mystrcat(buf, TCF_S_EOFIELD_MARKER);
	}

	convert_to_tcf_message(buf);
	uint16_t len = message_length(buf, TCF_MAX_FIELD_LENGTH);

	return len;
}
コード例 #2
0
ファイル: main.c プロジェクト: pedrovanzella/lrusimul
int main(int argc, char* argv[])
{
	if (argc != 2) {
		fprintf(stderr, "[-] Error: usage: %s config_file\n", argv[0]);
		return EXIT_FAILURE;
	}

	char* filename = argv[1];

	FILE* fp = fopen(filename, "r");
	if (!fp) {
		fprintf(stderr, "[-] Error: failed to open file %s\n", filename);
		return EXIT_FAILURE;
	}

	/* File buffer */
	char* buffer;
	int nbytes = 128;

	buffer = (char*)malloc(2048*sizeof(char));

	/* Parsing vars */
	int m_size;
	int p_id;
	int p_size;
	int r_page;
	int r_id;
	int w_page;
	int w_id;
	int e_id;

	init_process_table();

	/* Main loop */
	while ((getline(&buffer, (size_t*)&nbytes, fp) != -1)) {

		/* Todas as operações começam com letras diferentes */
		switch(buffer[0]) {
			case 'M': /* MEMSIZE SIZE */
			case 'm':
				parse_memsize(buffer, &m_size);
				printf("[+] MEMSIZE %d\n", m_size);
				memsize(m_size);
				break;

			case 'P': /* PROCSIZE ID SIZE */
			case 'p':
				parse_procsize(buffer, &p_id, &p_size);
				printf("[+] PROCSIZE %d %d\n", p_id, p_size);
				procsize(p_id, p_size);
				break;

			case 'R': /* READ PAGE ID */
			case 'r':
				parse_read(buffer, &r_page, &r_id);
				printf("[+] READ %d %d\n", r_page, r_id);
				read_p(r_page, r_id);
				break;

			case 'W': /* WRITE PAGE ID */
			case 'w':
				parse_write(buffer, &w_page, &w_id);
				printf("[+] WRITE %d %d\n", w_page, w_id);
				write_p(w_page, w_id);
				break;

			case 'E': /* ENDPROC ID */
			case 'e':
				parse_endproc(buffer, &e_id);
				printf("[+] ENDPROC %d\n", e_id);
				endproc(e_id);
				break;

			default:
				printf("[-] Invalid Operation!\n");
		}
	}

	/* Write stats here */
	write_stats();

	fclose(fp);
	return EXIT_SUCCESS;
}