diff --git a/Makefile b/Makefile index 614ab84f123bfb1cff0c06f0f39cdc203d23bbdf..d5896731256f9d6b1d67fa8de2b2866e5a566a94 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 c9914e4af924685b7f74882b0f9815394b825842..1ada0af15d3314b59b09fea03db1d92c223fbd21 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c57eff55ebc0c54973903af5f72bac72762cf4f4 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 f531738996c10711fb2da8b1217480de8076a3d4..78d4f44e4ec49a99f9e46fc5b630abada1e88d10 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 c613beeee7cc0fb16c825506c11173078ab303de..17b2a41fcaa8ecf6f1767d1542c8634b91e7373d 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!"