Skip to content
Extraits de code Groupes Projets
Valider ccba8897 rédigé par Samuel de Meester de Ravestein's avatar Samuel de Meester de Ravestein
Parcourir les fichiers

sender handling crc now

parent 22567e48
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -94,6 +94,17 @@ pkt_t* pkt_new(); ...@@ -94,6 +94,17 @@ pkt_t* pkt_new();
* ressources associées */ * ressources associées */
void pkt_del(pkt_t*); 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. * Retourne la longueur du header en bytes.
*/ */
......
...@@ -13,13 +13,6 @@ void pkt_del(pkt_t *pkt) ...@@ -13,13 +13,6 @@ void pkt_del(pkt_t *pkt)
free(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) uint32_t calculate_crc(const char * buffer, uint32_t len)
{ {
return (uint32_t) crc32(0L, (const void *) buffer, len); return (uint32_t) crc32(0L, (const void *) buffer, len);
......
...@@ -86,7 +86,11 @@ int main(int argc, char **argv) { ...@@ -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(); pkt_t *pkt = pkt_new();
ssize_t nbr_byte_read = read(fd, pkt->payload, MAX_PAYLOAD_SIZE); ssize_t nbr_byte_read = read(fd, pkt->payload, MAX_PAYLOAD_SIZE);
while (nbr_byte_read > 0) while (nbr_byte_read > 0)
...@@ -95,9 +99,29 @@ int main(int argc, char **argv) { ...@@ -95,9 +99,29 @@ int main(int argc, char **argv) {
pkt_set_type(pkt, PTYPE_DATA); pkt_set_type(pkt, PTYPE_DATA);
pkt_set_length(pkt, nbr_byte_read); 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) if (sent == -1)
{ {
close(fd);
close(socket_fd); close(socket_fd);
ERROR("An error occured when trying to send a paquet\n"); ERROR("An error occured when trying to send a paquet\n");
return EXIT_FAILURE; return EXIT_FAILURE;
...@@ -108,7 +132,7 @@ int main(int argc, char **argv) { ...@@ -108,7 +132,7 @@ int main(int argc, char **argv) {
nbr_byte_read = read(fd, pkt->payload, MAX_PAYLOAD_SIZE); nbr_byte_read = read(fd, pkt->payload, MAX_PAYLOAD_SIZE);
} }
pkt_del(pkt); pkt_del(pkt);
close(fd); close(fd);
close(socket_fd); close(socket_fd);
return EXIT_SUCCESS; return EXIT_SUCCESS;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter