diff options
Diffstat (limited to 'src/common/packed.c')
-rw-r--r-- | src/common/packed.c | 79 |
1 files changed, 78 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; + +} |