From 8f5fd02f306518a220e8527e0240813bbbd0e98e Mon Sep 17 00:00:00 2001
From: sdemeesterde <samuel.demeester@student.uclouvain.be>
Date: Sun, 20 Mar 2022 16:22:59 +0100
Subject: [PATCH] make progress on the sender

---
 Makefile                             |  2 +-
 headers/{sender.h => sender_utils.h} |  5 +++
 src/sender.c                         | 57 +++++++++++++++++++++++-----
 src/sender_utils.c                   |  0
 4 files changed, 53 insertions(+), 11 deletions(-)
 rename headers/{sender.h => sender_utils.h} (81%)
 create mode 100644 src/sender_utils.c

diff --git a/Makefile b/Makefile
index c7c6a99..614ab84 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ HEADERS_DIR = -Iheaders
 LDFLAGS = -lz
 
 # Adapt these as you want to fit with your project
-SENDER_SOURCES = $(wildcard src/sender.c src/log.c src/our_utils.c src/packet_interface.c)
+SENDER_SOURCES = $(wildcard src/sender.c src/log.c src/our_utils.c src/packet_interface.c src/sender_utils.c)
 RECEIVER_SOURCES = $(wildcard src/receiver.c src/log.c src/our_utils.c src/packet_interface.c src/receiver_utils.c)
 
 SENDER_OBJECTS = $(SENDER_SOURCES:.c=.o)
diff --git a/headers/sender.h b/headers/sender_utils.h
similarity index 81%
rename from headers/sender.h
rename to headers/sender_utils.h
index be7f4a1..4579923 100644
--- a/headers/sender.h
+++ b/headers/sender_utils.h
@@ -1,3 +1,6 @@
+#ifndef __SENDER_UTILS_H_
+#define __SENDER_UTILS_H_
+
 #include <fcntl.h>
 #include <poll.h>
 #include <stdlib.h>
@@ -14,3 +17,5 @@
 #include "packet_interface.h"
 
 
+
+#endif
\ No newline at end of file
diff --git a/src/sender.c b/src/sender.c
index 06072c4..4e1417d 100644
--- a/src/sender.c
+++ b/src/sender.c
@@ -1,4 +1,4 @@
-#include "../headers/sender.h"
+#include "../headers/sender_utils.h"
 
 int print_usage(char *prog_name) {
     ERROR("Usage:\n\t%s [-f filename] [-s stats_filename] [-c] receiver_ip receiver_port", prog_name);
@@ -55,6 +55,7 @@ int main(int argc, char **argv) {
     DEBUG("You can only see me if %s", "you built me using `make debug`");
     ERROR("This is not an error, %s", "now let's code!");
 
+
     // Now let's code! 
     // Alright :-)
 
@@ -77,8 +78,8 @@ int main(int argc, char **argv) {
     }
 
     // *** Step 2: Prepare to send ***
-    int fd = open(filename, O_RDONLY);
-    if (fd == -1)
+    int sending_fd = open(filename, O_RDONLY);
+    if (sending_fd == -1)
     {
         close(socket_fd);
         ERROR("An error occured while trying to open the file\n");
@@ -88,20 +89,56 @@ int main(int argc, char **argv) {
     
     // *** Step: Time for sending ***
     struct pollfd *pfd = (struct pollfd *) calloc(1, sizeof(struct pollfd));
-    if (pfd == NULL)
+    if (pfds == NULL)
     {
         close(socket_fd);
+        close(sending_fd);
         ERROR("Calloc failed\n");
         return EXIT_FAILURE;
     }
 
-    pfd->fd     = socket_fd;
-    pfd->events = POLLIN | POLLOUT; // want to read and write from the socket
+    // Socket -> we want to read and write from it
+    pfd[0].fd     = socket_fd;
+    pfd[0].events = POLLIN | POLLOUT;
 
-    bool connected = true;
-    while (connected)
+    bool sending_file_read = false;
+    bool ack_received      = false;
+    int rvalue;
+    while (!(sending_file_read && ack_received))
     {
-        /* code */
+        // Blocking calling system
+        rvalue = poll(pfd, 1, -1); // -1 means waits forever
+        if (rvalue == -1)
+        {
+            close(socket_fd);
+            close(sending_fd);
+            ERROR("poll function failed\n");
+            return EXIT_FAILURE;
+        }
+
+        if ( !(sending_file_read) && (pfd->revents & POLLOUT) )
+        {
+            rvalue = read_and_send();
+            if (rvalue == -1)
+            {
+                close(socket_fd);
+                close(sending_fd);
+                ERROR("poll function failed\n");
+                return EXIT_FAILURE;
+            }
+            
+        }
+        else if (pfd->revents & POLLIN)
+        {
+            rvalue = handle_returning_pkt();
+            if (rvalue == -1)
+            {
+                close(socket_fd);
+                close(sending_fd);
+                ERROR("poll function failed\n");
+                return EXIT_FAILURE;
+            }
+        }
     }
     
 
@@ -156,7 +193,7 @@ int main(int argc, char **argv) {
     // }
     // pkt_del(pkt);
 
-    close(fd);
+    close(sending_fd);
     close(socket_fd);
     return EXIT_SUCCESS;
 }
diff --git a/src/sender_utils.c b/src/sender_utils.c
new file mode 100644
index 0000000..e69de29
-- 
GitLab