From ccba889757d4f5bd7a4261fa63774aa4bd09d7b0 Mon Sep 17 00:00:00 2001 From: sdemeesterde <samuel.demeester@student.uclouvain.be> Date: Thu, 17 Mar 2022 20:01:17 +0100 Subject: [PATCH] sender handling crc now --- headers/packet_interface.h | 11 +++++++++++ src/packet_interface.c | 7 ------- src/sender.c | 30 +++++++++++++++++++++++++++--- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/headers/packet_interface.h b/headers/packet_interface.h index 0e66828..c4d5583 100644 --- a/headers/packet_interface.h +++ b/headers/packet_interface.h @@ -94,6 +94,17 @@ pkt_t* pkt_new(); * ressources associées */ void pkt_del(pkt_t*); + +/** + * @brief Calculates the CRC32 + * + * @param buffer : The buffer on which to calculate CRC32. + * @param len : The number of bytes of the buffer. + * @return uint32_t + */ +uint32_t calculate_crc(const char * buffer, uint32_t len); + + /* * Retourne la longueur du header en bytes. */ diff --git a/src/packet_interface.c b/src/packet_interface.c index 098ba94..6ca0328 100644 --- a/src/packet_interface.c +++ b/src/packet_interface.c @@ -13,13 +13,6 @@ void pkt_del(pkt_t *pkt) free(pkt); } -/** - * @brief Calculates the CRC32 - * - * @param buffer : The buffer on which to calculate CRC32. - * @param len : The number of bytes of the buffer. - * @return uint32_t - */ uint32_t calculate_crc(const char * buffer, uint32_t len) { return (uint32_t) crc32(0L, (const void *) buffer, len); diff --git a/src/sender.c b/src/sender.c index 9073275..cffb22b 100644 --- a/src/sender.c +++ b/src/sender.c @@ -86,7 +86,11 @@ int main(int argc, char **argv) { } - // *** Step : Time for sending *** + // *** Step: Time for sending *** + pkt_t buffer[MAX_WINDOW_SIZE]; + int buffer_space = MAX_WINDOW_SIZE; + int seqnum = 0; + pkt_t *pkt = pkt_new(); ssize_t nbr_byte_read = read(fd, pkt->payload, MAX_PAYLOAD_SIZE); while (nbr_byte_read > 0) @@ -95,9 +99,29 @@ int main(int argc, char **argv) { pkt_set_type(pkt, PTYPE_DATA); pkt_set_length(pkt, nbr_byte_read); - ssize_t sent = send(socket_fd, pkt, PKT_MAX_LEN, 0); + // We set the TR to 0 in order to calculcate the CRC on the header + char modified_header[8]; + memcpy((void *) &modified_header, (void *) &pkt->header, 8); + modified_header[0] = modified_header[0] & TR_SETTER_TO_ZERO; + uint32_t crc1 = htonl(calculate_crc(modified_header, 8)); + pkt_set_crc1(pkt, crc1); + + uint32_t crc2 = htonl(calculate_crc(pkt->payload, (uint32_t) pkt_get_length(pkt))); + pkt_set_crc2(pkt, crc2); + + char paquet_to_be_sent[PKT_MAX_LEN]; + if (pkt_encode(pkt, paquet_to_be_sent, PKT_MAX_LEN) != PKT_OK) + { + close(fd); + close(socket_fd); + ERROR("An error occured when trying to encode a paquet\n"); + return EXIT_FAILURE; + } + + ssize_t sent = send(socket_fd, paquet_to_be_sent, PKT_MAX_LEN, 0); if (sent == -1) { + close(fd); close(socket_fd); ERROR("An error occured when trying to send a paquet\n"); return EXIT_FAILURE; @@ -108,7 +132,7 @@ int main(int argc, char **argv) { nbr_byte_read = read(fd, pkt->payload, MAX_PAYLOAD_SIZE); } pkt_del(pkt); - + close(fd); close(socket_fd); return EXIT_SUCCESS; -- GitLab