From 0065b4b2acc2269904cca32684c9499a9d4f891c Mon Sep 17 00:00:00 2001
From: sdemeesterde <samuel.demeester@student.uclouvain.be>
Date: Mon, 21 Mar 2022 00:34:53 +0100
Subject: [PATCH] almost done

---
 headers/sender_utils.h |   2 +-
 log.tx                 | Bin 0 -> 3683 bytes
 log.txt                | Bin 0 -> 3683 bytes
 src/sender.c           |   2 ++
 src/sender_utils.c     |  12 ++++++------
 5 files changed, 9 insertions(+), 7 deletions(-)
 create mode 100644 log.tx
 create mode 100644 log.txt

diff --git a/headers/sender_utils.h b/headers/sender_utils.h
index a723d24..e6b3359 100644
--- a/headers/sender_utils.h
+++ b/headers/sender_utils.h
@@ -30,7 +30,7 @@ typedef struct state {
     pkt_t      *buffer[WINDOW_SIZE];
     uint8_t head;  // place last element insert +1 in the buffer (free place)
     uint8_t tail;  // place oldest element insert in the buffer
-    uint8_t last_sent_seqnum;
+    uint8_t next_seqnum;
     uint8_t map_seqnum_to_buffer_place[SEQNUM_RANGE];
 } sender_state_t;
 
diff --git a/log.tx b/log.tx
new file mode 100644
index 0000000000000000000000000000000000000000..bd306f91425c0a9be3415d5a8a4f3b700c4c5784
GIT binary patch
literal 3683
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

literal 0
HcmV?d00001

diff --git a/log.txt b/log.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c46e8c3e7e45a68de72ac17adf3281936e3f1060
GIT binary patch
literal 3683
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

literal 0
HcmV?d00001

diff --git a/src/sender.c b/src/sender.c
index 7e908b9..d8751fd 100644
--- a/src/sender.c
+++ b/src/sender.c
@@ -126,6 +126,7 @@ int main(int argc, char **argv) {
 
         if (pfd->revents & POLLIN)
         {
+            DEBUG("The sender is reading from the socket");
             ack_received_done = handle_returning_ack_nack(state, socket_fd);
             rvalue            = loop_over_timers(state, socket_fd);
             if ((ack_received_done == -1) || (rvalue == -1))
@@ -138,6 +139,7 @@ int main(int argc, char **argv) {
         }
         else if ( !(sending_file_read_done) && (pfd->revents & POLLOUT) )
         {
+            DEBUG("The sender will send a pkt on the socket");
             sending_file_read_done = read_and_send(state, sending_fd, socket_fd);
             if (sending_file_read_done == -1)
             {
diff --git a/src/sender_utils.c b/src/sender_utils.c
index 1c7531e..e30695c 100644
--- a/src/sender_utils.c
+++ b/src/sender_utils.c
@@ -45,22 +45,22 @@ int handle_returning_ack_nack(sender_state_t *state, int socket_fd)
         return 0;
     }
     // From here we consider a valid ack
-    DEBUG("The ACK of: %d has been received", pkt_get_seqnum(pkt));
+    DEBUG("The ACK with the seqnum: %d has been received", pkt_get_seqnum(pkt));
     uint8_t place = state->map_seqnum_to_buffer_place[pkt_get_seqnum(pkt)];
     pkt_del(state->buffer[place]);
     state->buffer[place] = NULL;
+    state->r_window_size = pkt_get_window(pkt);
 
     if (place == state->tail)
     {
-        for (uint8_t i = place; (state->buffer[i] == NULL) && place != state->head; i++)
+        for (uint8_t i = place; (state->buffer[i] == NULL) && i != state->head; i++)
         {
             state->tail++;
             state->s_window_size++;
         }
-        
     }
     pkt_del(pkt);
-    return 0;
+    return state->s_window_size == MAX_WINDOW_SIZE;
 }
 
 int loop_over_timers(sender_state_t *state, int socket_fd)
@@ -98,7 +98,6 @@ int read_and_send(sender_state_t *state, int sending_fd, int socket_fd)
     if ((state->r_window_size == 0) || (state->s_window_size == 0)) return 0;
 
     state->s_window_size--;
-    state->last_sent_seqnum = (uint8_t) (((uint16_t) state->last_sent_seqnum) + 1) % SEQNUM_RANGE; // Careful we need to convert to uint16_t to avoid overflow
 
     pkt_t *pkt = pkt_new();    
     ssize_t nbr_byte_read = read(sending_fd, pkt->payload, MAX_PAYLOAD_SIZE);
@@ -106,7 +105,7 @@ int read_and_send(sender_state_t *state, int sending_fd, int socket_fd)
     pkt_set_tr(pkt, 0);
     pkt_set_window(pkt, state->s_window_size);
     pkt_set_length(pkt, nbr_byte_read);
-    pkt_set_seqnum(pkt, state->last_sent_seqnum);
+    pkt_set_seqnum(pkt, state->next_seqnum);
     pkt_set_timestamp(pkt, 0); // We're free to use as we want
     
     // We set the TR to 0 in order to calculcate the CRC on the header
@@ -134,6 +133,7 @@ int read_and_send(sender_state_t *state, int sending_fd, int socket_fd)
     state->map_seqnum_to_buffer_place[pkt_get_seqnum(pkt)] = state->head;
     state->head = (state->head + 1) % WINDOW_SIZE;
 
+    state->next_seqnum = (uint8_t) (((uint16_t) state->next_seqnum) + 1) % SEQNUM_RANGE; // Careful we need to convert to uint16_t to avoid overflow
     DEBUG("The pkt with seqnum: %d has been sent", pkt_get_seqnum(pkt));
 
     // Checking if we're at the end of the file
-- 
GitLab