From c73d17a2b98f96e4748d549be182fd1f091e505b Mon Sep 17 00:00:00 2001 From: ingenzi <vany.ingenzi@student.uclouvain.be> Date: Mon, 21 Mar 2022 08:20:49 +0100 Subject: [PATCH] Fixed bug in ACK SEQNUM for the receiver --- Makefile | 6 +++--- src/receiver_utils.c | 10 ++++++---- test_files/greeting.txt | 1 + test_files/long_message.txt | 2 +- tests/simple_test.sh | 11 ++++++----- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 614ab84..d589673 100644 --- a/Makefile +++ b/Makefile @@ -19,13 +19,13 @@ RECEIVER = receiver all: $(SENDER) $(RECEIVER) $(SENDER): $(SENDER_OBJECTS) - @$(CC) $(SENDER_OBJECTS) -o $@ $(LDFLAGS) + $(CC) $(SENDER_OBJECTS) -o $@ $(LDFLAGS) $(RECEIVER): $(RECEIVER_OBJECTS) - @$(CC) $(RECEIVER_OBJECTS) -o $@ $(LDFLAGS) + $(CC) $(RECEIVER_OBJECTS) -o $@ $(LDFLAGS) %.o: %.c - @$(CC) $(HEADERS_DIR) $(CFLAGS) $< -o $@ $(LDFLAGS) + $(CC) $(HEADERS_DIR) $(CFLAGS) $< -o $@ $(LDFLAGS) .PHONY: clean mrproper cleanlogs diff --git a/src/receiver_utils.c b/src/receiver_utils.c index c9914e4..1ada0af 100644 --- a/src/receiver_utils.c +++ b/src/receiver_utils.c @@ -112,12 +112,14 @@ int update_buffer_upon_new_data(con_state_t * state, pkt_t * pkt) int update_state_data_pkt(con_state_t * state, pkt_t * pkt) { if (update_buffer_upon_new_data(state, pkt) != 0) return -1; + uint8_t expecting = (state->last_received_in_order + 1) % TWO_EXP_EIGHT; if ( state->ack_to_send != NULL ) /* There's an unsent ack to send */ { - if (pkt_set_seqnum(state->ack_to_send, state->last_received_in_order) != 0) + if (pkt_set_window(state->ack_to_send, state->curr_recv_window) != 0 || + pkt_set_seqnum(state->ack_to_send, expecting) != 0) { - ERROR("When setting the seqnum of an existing ack that hasn't been sent yet."); + ERROR("When updating an ACK that hasn't been done."); return -1; } } else /* We have to create an ack to send */ @@ -130,7 +132,7 @@ int update_state_data_pkt(con_state_t * state, pkt_t * pkt) } if (pkt_set_type(state->ack_to_send, PTYPE_ACK) != 0 || pkt_set_tr(state->ack_to_send, 0) || - pkt_set_seqnum(state->ack_to_send, state->last_received_in_order) != 0) + pkt_set_seqnum(state->ack_to_send, expecting) != 0) { ERROR("Setting up a ACK packet to send."); return -1; @@ -224,7 +226,7 @@ void reception_loop(struct pollfd * pfd, con_state_t * state) { int ready = poll(pfd, 1, -1); gettimeofday(&curr, NULL); - if (ready == -1 || (curr.tv_sec - last_recv.tv_sec) > 2) + if (ready == -1 || (curr.tv_sec - last_recv.tv_sec) > 3) { DEBUG("Timed out."); return; diff --git a/test_files/greeting.txt b/test_files/greeting.txt index e69de29..c57eff5 100644 --- a/test_files/greeting.txt +++ b/test_files/greeting.txt @@ -0,0 +1 @@ +Hello World! \ No newline at end of file diff --git a/test_files/long_message.txt b/test_files/long_message.txt index f531738..78d4f44 100644 --- a/test_files/long_message.txt +++ b/test_files/long_message.txt @@ -7,7 +7,7 @@ PS: Drink a beer when you pass the test. Share your knowledge to others, compute science isn't a field for selfishness. If you want to switch to Law, Economy, some shit Hi Vany I love reading from you. As you know I'm working sometime a bit late in the night. -In a few hour you'll be in th famous "Salle Intel" to be really productive as you are. +In a few hour you'll be in the famous "Salle Intel" to be really productive as you are. Best regards, diff --git a/tests/simple_test.sh b/tests/simple_test.sh index c613bee..17b2a41 100755 --- a/tests/simple_test.sh +++ b/tests/simple_test.sh @@ -7,13 +7,14 @@ fi FILENAME=$1 BASENAME=$(basename $FILENAME) BASENAME_PREFIX="${BASENAME%.*}" +BASENAME_EXTENSION="${BASENAME##*.}" # cleanup d'un test précédent -rm -f ./unwanted_logs/${BASENAME_PREFIX}_received_file ./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log ./unwanted_logs/${BASENAME_PREFIX}_valgrind_sender.log -touch ./unwanted_logs/${BASENAME_PREFIX}_received_file ./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log ./unwanted_logs/${BASENAME_PREFIX}_valgrind_sender.log +rm -f ./unwanted_logs/${BASENAME_PREFIX}_received_file.${BASENAME_EXTENSION} ./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log ./unwanted_logs/${BASENAME_PREFIX}_valgrind_sender.log +touch ./unwanted_logs/${BASENAME_PREFIX}_received_file.${BASENAME_EXTENSION} ./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log ./unwanted_logs/${BASENAME_PREFIX}_valgrind_sender.log # On lance le receiver et capture sa sortie standard -valgrind --leak-check=full --log-file=./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log ./receiver ::1 12345 1> ./unwanted_logs/${BASENAME_PREFIX}_received_file 2> ./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log & +valgrind --leak-check=full --log-file=./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log ./receiver ::1 12345 1> ./unwanted_logs/${BASENAME_PREFIX}_received_file.${BASENAME_EXTENSION} 2> ./unwanted_logs/${BASENAME_PREFIX}_valgrind_receiver.log & receiver_pid=$! cleanup() @@ -46,10 +47,10 @@ else # On teste la valeur de retour du receiver fi # On vérifie que le transfert s'est bien déroulé -if [[ "$(md5sum ${FILENAME} | awk '{print $1}')" != "$(md5sum ./unwanted_logs/${BASENAME_PREFIX}_received_file | awk '{print $1}')" ]]; then +if [[ "$(md5sum ${FILENAME} | awk '{print $1}')" != "$(md5sum ./unwanted_logs/${BASENAME_PREFIX}_received_file.${BASENAME_EXTENSION} | awk '{print $1}')" ]]; then echo "Le transfert a corrompu le fichier!" echo "Diff binaire des deux fichiers: (attendu vs produit)" - diff -C 9 <(od -Ax -t x1z ${FILENAME}) <(od -Ax -t x1z ./unwanted_logs/${BASENAME_PREFIX}_received_file) + diff -C 9 <(od -Ax -t x1z ${FILENAME}) <(od -Ax -t x1z ./unwanted_logs/${BASENAME_PREFIX}_received_file.${BASENAME_EXTENSION}) exit 1 else echo "Le transfert est réussi!" -- GitLab