diff --git a/src/our_utils.c b/src/our_utils.c index 3628a19d4b55cf266eb41b963f691efd018af50f..d944f373c281cb401cb6057f9fe413737f5f4cc3 100644 --- a/src/our_utils.c +++ b/src/our_utils.c @@ -109,7 +109,7 @@ int wait_for_client(int sfd) return 0; } -void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file) +void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file, agents_t caller) { if (pathname == NULL || stats_file == NULL) return; @@ -150,25 +150,27 @@ void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file) ret = sprintf((char *) &buffer, "packet_ignored:%llu\n", stats_file->packet_ignored); ret = write(fd, buffer, strlen(buffer)); - #ifdef __RECEIVER_UTILS_ - ret = sprintf((char *) &buffer, "packet_duplicated:%llu\n", stats_file->packet_duplicated); - ret = write(fd, buffer, strlen(buffer)); + if (caller == RECEIVER) + { + ret = sprintf((char *) &buffer, "packet_duplicated:%llu\n", stats_file->packet_duplicated); + ret = write(fd, buffer, strlen(buffer)); - ret = sprintf((char *) &buffer, "packet_recovered:%llu\n", stats_file->packet_recovered); - ret = write(fd, buffer, strlen(buffer)); - #endif - #ifdef __SENDER_UTILS_H_ - - ret = sprintf((char *) &buffer, "min_rtt:%llu ms\n", stats_file->min_rtt); - ret = write(fd, buffer, strlen(buffer)); + ret = sprintf((char *) &buffer, "packet_recovered:%llu\n", stats_file->packet_recovered); + ret = write(fd, buffer, strlen(buffer)); + } - ret = sprintf((char *) &buffer, "max_rtt:%llu ms\n", stats_file->max_rtt); - ret = write(fd, buffer, strlen(buffer)); + if (caller == SENDER) + { + ret = sprintf((char *) &buffer, "min_rtt:%llu ms\n", stats_file->min_rtt); + ret = write(fd, buffer, strlen(buffer)); - ret = sprintf((char *) &buffer, "packet_retransmitted:%llu\n", stats_file->packet_retransmitted); - ret = write(fd, buffer, strlen(buffer)); - #endif + ret = sprintf((char *) &buffer, "max_rtt:%llu ms\n", stats_file->max_rtt); + ret = write(fd, buffer, strlen(buffer)); + ret = sprintf((char *) &buffer, "packet_retransmitted:%llu\n", stats_file->packet_retransmitted); + ret = write(fd, buffer, strlen(buffer)); + } + close(fd); ret--; // dump DEBUG("Wrote the transfer statistics to %s.", pathname); diff --git a/src/our_utils.h b/src/our_utils.h index 8fbbc302ed7b7b2c8b9752ece94343ef7af68bfb..f992c76b2c7c84f914b3a52414d0e498f36a9509 100644 --- a/src/our_utils.h +++ b/src/our_utils.h @@ -30,17 +30,19 @@ typedef struct __attribute__((__packed__)) unsigned long long int nack_sent; unsigned long long int nack_received; unsigned long long int packet_ignored; - #ifdef __RECEIVER_UTILS_ unsigned long long int packet_duplicated; unsigned long long int packet_recovered; - #endif - #ifdef __SENDER_UTILS_H_ unsigned long long int min_rtt; unsigned long long int max_rtt; unsigned long long int packet_retransmitted; - #endif } transfer_stats_t; +/* The type of agents */ +typedef enum{ + SENDER, + RECEIVER, +}agents_t; + /** * @brief Resolve the resource name to an usable IPv6 address @@ -83,9 +85,11 @@ int wait_for_client(int sfd); * * @param pathname: The pathname to the stats file. * @param stats_file: Pointer to the stats file output. + * @param caller: To know the caller of the function. + * * * @returns In case of an error it is printed on the stderr. */ -void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file); +void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file, agents_t caller); #endif \ No newline at end of file diff --git a/src/receiver_utils.c b/src/receiver_utils.c index 35772bef0a2a3fa382d78ff55df6721482af01bb..8fad4fb23384cd4c260c337dcf4d411f39035e61 100644 --- a/src/receiver_utils.c +++ b/src/receiver_utils.c @@ -650,7 +650,7 @@ void receiver_read_write_loop(int sfd, const char * pathname) reception_loop(pfd, state); DEBUG("Done the transfer with done status being %s", (state->transfer_done) ? "true" : "false"); - write_stats_to_file(pathname, state->stats); + write_stats_to_file(pathname, state->stats, RECEIVER); state_del(state); free(pfd); } \ No newline at end of file diff --git a/src/sender_utils.c b/src/sender_utils.c index 58dcbe6ded9827a987c657d282cc37a5d9d81fbb..00d055c73100b7ccc873a0aa8b3384668e813dc8 100644 --- a/src/sender_utils.c +++ b/src/sender_utils.c @@ -39,7 +39,7 @@ sender_state_t *state_new(bool fec_enabled) void state_del(sender_state_t *state, const char * pathname) { - write_stats_to_file(pathname, state->stats); + write_stats_to_file(pathname, state->stats, SENDER); // To be sure, we free the pkt that might not have been freed (in case of an error or timeout) for (uint8_t i = 0; i < WINDOW_SIZE; i++)