diff --git a/Makefile b/Makefile
index c7c6a99aea19e2ee18c5c8682eed9aa887785118..614ab84f123bfb1cff0c06f0f39cdc203d23bbdf 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 be7f4a11815e006b0ed3d37c3873dccc70e5d660..457992323b2ce7929325629d231f445a33037a86 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 06072c4932f632a55eab35d4333ace7429eb7989..4e1417d8399cee848e974a8fccaa896ed8671acd 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391