diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/packed.c | 79 | ||||
-rw-r--r-- | src/common/packed.h | 7 |
2 files changed, 85 insertions, 1 deletions
diff --git a/src/common/packed.c b/src/common/packed.c index d956a42..e06e4bb 100644 --- a/src/common/packed.c +++ b/src/common/packed.c @@ -343,7 +343,6 @@ bool write_packed_buffer(packed_buffer *pbuf, int fd) } - /****************************************************************************** * * * Paramètres : pbuf = paquet de données à constituer. [OUT] * @@ -409,3 +408,81 @@ bool send_packed_buffer(packed_buffer *pbuf, int fd) return result; } + + +/****************************************************************************** +* * +* Paramètres : pbuf = paquet de données à constituer. [OUT] * +* fd = flux ouvert en lecture. * +* * +* Description : Réceptionne des données depuis un flux réseau chiffré. * +* * +* Retour : true si toutes les données ont été reçues, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool ssl_recv_packed_buffer(packed_buffer *pbuf, SSL *fd) +{ + bool result; /* Bilan à retourner */ + uint32_t used; /* Taille de charge utile */ + int got; /* Quantité de données traitées*/ + + got = SSL_read(fd, &used, sizeof(uint32_t)); + + result = (got == sizeof(uint32_t)); + + if (result) + { + assert(pbuf->pos == sizeof(uint32_t)); + + if ((pbuf->pos + used) > pbuf->allocated) + { + pbuf->allocated = pbuf->pos + used; + pbuf->data = realloc(pbuf->data, pbuf->allocated * sizeof(uint8_t)); + } + + pbuf->used = used; + + got = SSL_read(fd, pbuf->data + pbuf->pos, used); + + result = (got == used); + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : pbuf = paquet de données à émettre. * +* fd = flux ouvert en écriture. * +* * +* Description : Envoie des données au travers un flux réseau chiffré. * +* * +* Retour : true si toutes les données ont été émises, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool ssl_send_packed_buffer(packed_buffer *pbuf, SSL *fd) +{ + bool result; /* Bilan à retourner */ + int quantity; /* Nombre de données à traiter */ + int sent; /* Quantité de données traitées*/ + + *((uint32_t *)pbuf->data) = pbuf->used; + + quantity = sizeof(uint32_t) + pbuf->used; + + sent = SSL_write(fd, pbuf->data, quantity); + + result = (quantity == sent); + + return result; + +} diff --git a/src/common/packed.h b/src/common/packed.h index d25c947..5c724e0 100644 --- a/src/common/packed.h +++ b/src/common/packed.h @@ -27,6 +27,7 @@ #include <stdbool.h> #include <stdint.h> +#include <openssl/ssl.h> #include <sys/types.h> @@ -76,6 +77,12 @@ bool recv_packed_buffer(packed_buffer *, int); /* Envoie des données au travers un flux réseau. */ bool send_packed_buffer(packed_buffer *, int); +/* Réceptionne des données depuis un flux réseau chiffré. */ +bool ssl_recv_packed_buffer(packed_buffer *, SSL *); + +/* Envoie des données au travers un flux réseau chiffré. */ +bool ssl_send_packed_buffer(packed_buffer *, SSL *); + #endif /* _COMMON_PACKED_H */ |