diff options
Diffstat (limited to 'src/common/packed.c')
-rw-r--r-- | src/common/packed.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/common/packed.c b/src/common/packed.c index 39df330..03796b1 100644 --- a/src/common/packed.c +++ b/src/common/packed.c @@ -239,6 +239,73 @@ bool extract_packed_buffer(packed_buffer *pbuf, void *buf, size_t len, bool ntoh * Paramètres : pbuf = paquet de données à constituer. [OUT] * * fd = flux ouvert en lecture. * * * +* Description : Lit des données depuis un flux local. * +* * +* Retour : true si toutes les données ont été reçues, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool read_packed_buffer(packed_buffer *pbuf, int fd) +{ + bool result; /* Bilan à retourner */ + uint32_t used; /* Taille de charge utile */ + + result = safe_read(fd, &used, sizeof(uint32_t)); + + if (!result) + init_packed_buffer(pbuf); + + else + { + pbuf->allocated = sizeof(uint32_t) + used; + pbuf->data = malloc(pbuf->allocated * sizeof(uint8_t)); + + pbuf->used = used; + pbuf->pos = sizeof(uint32_t); + + result = safe_read(fd, pbuf->data + pbuf->pos, used); + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : pbuf = paquet de données à émettre. * +* fd = flux ouvert en écriture. * +* * +* Description : Ecrit des données dans un flux local. * +* * +* Retour : true si toutes les données ont été émises, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool write_packed_buffer(packed_buffer *pbuf, int fd) +{ + bool result; /* Bilan à retourner */ + + *((uint32_t *)pbuf->data) = pbuf->used; + + result = safe_write(fd, pbuf->data, sizeof(uint32_t) + pbuf->used); + + 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. * * * * Retour : true si toutes les données ont été reçues, false sinon. * |