예제 #1
0
파일: data.c 프로젝트: Partmedia/marp
/**
 * Load recorded data from a file.
 */
void data_load(FILE *file) {
    char buf[64];
    int line = 1, origin_az = 0;

    while (fgets(buf, sizeof(buf), file) != NULL) {
        if (buf[0] == '#') {
            if (sscanf(buf, "# @%s %d,%*d\n", buf, &origin_az) >= 1) {
                if (strcmp(buf, "origin") == 0) {
                    printf("# Origin: %d\n", origin_az);
                } else if (strcmp(buf, "azimuth") == 0) {
                    printf("#### Azimuth ####\n");
                    data_clear(&set);
                    set.elevation = false;
                } else if (strcmp(buf, "elevation") == 0) {
                    data_pattern_dump(origin_az);
                    printf("#### Elevation ####\n");
                    data_clear(&set);
                    set.elevation = true;
                } else {
                    fprintf(stderr, "%d: warning: unknown command\n", line);
                }
            }
        } else {
            float azimuth, elevation;
            int strength;

            if (sscanf(buf, format, &azimuth, &elevation, &strength) != 3) {
                fprintf(stderr, "%d: error: invalid data format\n", line);
                exit(EXIT_FAILURE);
            }

            if (!set.elevation) {
                data_add(azimuth, strength);
            } else {
                data_add(elevation, strength);
            }
        }

        line++;
    }

    // Dump the data from the elevation pattern.
    data_pattern_dump(origin_az);
}
예제 #2
0
// BRICK DATA
void *add_brick_data(t_data_type type,void *data)
{
	if(data)
	{
		return data;
	}
	else
	{
		return data_add(type,data);
	}
}
예제 #3
0
static void* do_server_read(void *arg)
{
	struct connection_data *data = (struct connection_data *) arg;

	char *temp_buf = malloc((SOCKET_BUFFER_SIZE + 1) * sizeof(char));

	while (1)
	{
		int readed = read(data->connfd, temp_buf, SOCKET_BUFFER_SIZE);
		if (readed <= 0)
			break;

		printf("S->L readed %d bytes\n", readed);
		data_add(params->client_buffer, temp_buf, readed, data);
	}

	free(temp_buf);

	printf("Server finished sending data to connection %d\n", data->connid);
	data_add(params->client_buffer, NULL, 0, data);

	pthread_exit(NULL);
}
예제 #4
0
static void* do_icmp_parse(void *arg)
{
	if (arg) {}

	while (1)
	{
		struct itun_packet *packet = packets_take(params->packets_receive);
		if (packet == NULL)
			break;

		struct connection_data *data = (struct connection_data *) packet->connection;

		switch (packet->header->type)
		{
			case TYPE_CONNECT:
			{
				struct connection_data *data = init_connection_data(packet);
				if (data == NULL)
					break;

				struct in_addr addr = {packet->client_ip};
				char *from_ip = inet_ntoa(addr);

				printf("Received connect packet from %s\n", from_ip);

				if (pthread_create(&data->server_connect, NULL, do_server_connect, (void *) data) == -1)
					error("Error %d occured in pthread_create(server_connect)", errno);
				break;
			}
			case TYPE_SHUTDOWN_READ:
			{
				if (is_shutdown_done(data, SHUTDOWN_WRITE))
					break;

				printf("Received SHUTDOWN_READ command\n");
				data_add(params->client_buffer, NULL, 0, data);

				break;
			}
			case TYPE_SHUTDOWN_WRITE:
			{
				if (is_shutdown_done(data, SHUTDOWN_READ))
					break;

				printf("Received SHUTDOWN_WRITE command\n");
				data_add(data->client_buffer, NULL, 0, data);

				break;
			}
			case TYPE_DATA:
			{
				printf("I->L readed %d bytes\n", packet->header->length);

				data_add(data->client_buffer, packet->data, packet->header->length, data);
				break;
			}
		}

		packets_free_packet(packet);
	}

	pthread_exit(NULL);
}
예제 #5
0
static data_t
sum(void* _, data_t a, data_t b) {
  return data_add(a, b);
}