summaryrefslogtreecommitdiff
path: root/src/common/packed.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-11-26 12:56:21 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-11-26 12:56:21 (GMT)
commit84efc00d07f9574c3867f96a3a7333b0f9d154e6 (patch)
tree1ee73538123b0157a91f9cba04985ca67b02a8e0 /src/common/packed.c
parent22e16ebcda77b8b03eae05cee3609c9c7c0e2df2 (diff)
Extended the internal interface providing file inputs/outputs.
Diffstat (limited to 'src/common/packed.c')
-rw-r--r--src/common/packed.c67
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. *