From d3ed91a06898f69bcea899e4664a9bcddd3e382b Mon Sep 17 00:00:00 2001
From: sdemeesterde <samuel.demeester@student.uclouvain.be>
Date: Sat, 9 Apr 2022 16:58:01 +0200
Subject: [PATCH] sender handle the window of receiver better

---
 src/packet_interface.h | 2 +-
 src/sender.c           | 3 ++-
 src/sender_utils.c     | 4 ++--
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/packet_interface.h b/src/packet_interface.h
index 181dc94..7428389 100644
--- a/src/packet_interface.h
+++ b/src/packet_interface.h
@@ -68,7 +68,7 @@ typedef enum {
 #define TR_MASK                         0x20
 #define WINDOW_MASK                     0x1F
 #define TR_SETTER_TO_ZERO               0xDF
-#define SECOND_TO_LAST_PKT              0xFFFFFFFF // Use to specify it was the second to last pkt sent by the sender
+#define SECOND_TO_LAST_PKT              0x3AB33922 // Use to specify it was the second to last pkt sent by the sender -> Need to be random ?
 
 #define TYPE_SHIFT                      6
 #define TR_SHIFT                        5
diff --git a/src/sender.c b/src/sender.c
index 4b81e0a..017f825 100644
--- a/src/sender.c
+++ b/src/sender.c
@@ -156,7 +156,8 @@ int main(int argc, char **argv) {
         }
         else if (can_send(state) && (pfd->revents & POLLOUT))
         {
-            DEBUG("The sender will send a pkt on the socket, the current sender window size is: %d", state->s_window_size);
+            DEBUG("The sender will send a pkt on the socket, the current sender window size is: %d | receiver window size: %d", 
+            state->s_window_size, state->r_window_size);
             rvalue = read_and_send(state, sending_fd, socket_fd);
             if (rvalue == -1)
             {
diff --git a/src/sender_utils.c b/src/sender_utils.c
index bdcdea1..27aed81 100644
--- a/src/sender_utils.c
+++ b/src/sender_utils.c
@@ -146,8 +146,8 @@ int handle_returning_ack_nack(sender_state_t *state, int socket_fd)
             }
             else
             {
-                DEBUG("The receiver is asking AGAIN, the seqnum: %d", seqnum_nack);
-                state->r_window_size = r_window;
+                DEBUG("The receiver is asking AGAIN, the seqnum: %d so the sender sends it back", seqnum_nack);
+                state->r_window_size = r_window - 1; // -1 Because the receiver doesn't count yet the sended pkt
                 pkt_t *n_pkt = state->buffer[place_last_nack];
                 if (send_pkt(state, n_pkt, place_last_nack, socket_fd) == -1) return -1;
                 return 0;
-- 
GitLab