From 7b98416e88a19bd8a617a40eb1692aec7130f7d1 Mon Sep 17 00:00:00 2001 From: ingenzi <vany.ingenzi@student.uclouvain.be> Date: Fri, 15 Apr 2022 11:03:34 +0200 Subject: [PATCH] Corrected the write stats functions --- src/our_utils.c | 34 ++++++++++++++++++---------------- src/our_utils.h | 14 +++++++++----- src/receiver_utils.c | 2 +- src/sender_utils.c | 2 +- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/our_utils.c b/src/our_utils.c index 3628a19..d944f37 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 8fbbc30..f992c76 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 35772be..8fad4fb 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 58dcbe6..00d055c 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++) -- GitLab