summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/arch/storage.c2
-rw-r--r--src/common/packed.c106
-rw-r--r--src/common/packed.h43
3 files changed, 107 insertions, 44 deletions
diff --git a/src/arch/storage.c b/src/arch/storage.c
index 0995f4d..269228c 100644
--- a/src/arch/storage.c
+++ b/src/arch/storage.c
@@ -1007,7 +1007,7 @@ static bool g_asm_storage_compress(const GAsmStorage *storage)
static bool g_asm_storage_read_types(GAsmStorage *storage)
{
bool result; /* Bilan à enregistrer */
- packed_buffer pbuf; /* Tampon des données à écrire */
+ packed_buffer pbuf; /* Tampon des données à lire */
size_t i; /* Boucle de parcours */
unsigned char len; /* Taille d'un nom de type */
char *name; /* Désignation d'un type */
diff --git a/src/common/packed.c b/src/common/packed.c
index b8638b3..117b557 100644
--- a/src/common/packed.c
+++ b/src/common/packed.c
@@ -51,7 +51,7 @@
* *
******************************************************************************/
-void init_packed_buffer(packed_buffer *pbuf)
+void init_packed_buffer(packed_buffer_t *pbuf)
{
pbuf->allocated = PACKET_BLOCK_SIZE;
pbuf->data = malloc(pbuf->allocated * sizeof(uint8_t));
@@ -65,6 +65,27 @@ void init_packed_buffer(packed_buffer *pbuf)
* *
* Paramètres : pbuf = paquet de données à réinitialiser. [OUT] *
* *
+* Description : Rembobine le paquet de données à son départ. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void rewind_packed_buffer(packed_buffer_t *pbuf)
+{
+ pbuf->pos = sizeof(uint32_t);
+
+ assert(pbuf->pos <= pbuf->allocated);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : pbuf = paquet de données à réinitialiser. [OUT] *
+* *
* Description : Réinitialise un paquet réseau pour une constitution. *
* *
* Retour : - *
@@ -73,10 +94,11 @@ void init_packed_buffer(packed_buffer *pbuf)
* *
******************************************************************************/
-void reset_packed_buffer(packed_buffer *pbuf)
+void reset_packed_buffer(packed_buffer_t *pbuf)
{
pbuf->used = 0;
- pbuf->pos = sizeof(uint32_t);
+
+ rewind_packed_buffer(pbuf);
assert(pbuf->pos <= pbuf->allocated);
@@ -95,17 +117,49 @@ void reset_packed_buffer(packed_buffer *pbuf)
* *
******************************************************************************/
-void exit_packed_buffer(packed_buffer *pbuf)
+void exit_packed_buffer(packed_buffer_t *pbuf)
{
#ifndef NDEBUG
assert(pbuf->data != NULL);
#endif
- free(pbuf->data);
+ if (pbuf->data)
+ {
+ free(pbuf->data);
+ pbuf->data = NULL;
+ }
+
+}
+
-#ifndef NDEBUG
- pbuf->data = NULL;
-#endif
+/******************************************************************************
+* *
+* Paramètres : dest = tampon de données à constituer. *
+* src = tampon de données à copier. *
+* *
+* Description : Copie les données d'un tampon dans un autre. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void copy_packed_buffer(packed_buffer_t *dest, const packed_buffer_t *src)
+{
+ size_t len; /* Taille des données à copier */
+
+ exit_packed_buffer(dest);
+
+ len = dest->allocated * sizeof(uint8_t);
+
+ dest->allocated = src->allocated;
+ dest->data = malloc(len);
+
+ memcpy(dest->data, src->data, len);
+
+ dest->used = src->used;
+ dest->pos = src->pos;
}
@@ -122,7 +176,7 @@ void exit_packed_buffer(packed_buffer *pbuf)
* *
******************************************************************************/
-size_t get_packed_buffer_payload_length(const packed_buffer *pbuf)
+size_t get_packed_buffer_payload_length(const packed_buffer_t *pbuf)
{
size_t result; /* Quantité à renvoyer */
@@ -145,7 +199,7 @@ size_t get_packed_buffer_payload_length(const packed_buffer *pbuf)
* *
******************************************************************************/
-bool has_more_data_in_packed_buffer(const packed_buffer *pbuf)
+bool has_more_data_in_packed_buffer(const packed_buffer_t *pbuf)
{
bool result; /* Bilan à retourner */
@@ -159,7 +213,7 @@ bool has_more_data_in_packed_buffer(const packed_buffer *pbuf)
/******************************************************************************
* *
* Paramètres : pbuf = paquet de données à compléter. *
-* buf = nouvelles données à ajouter. *
+* data = nouvelles données à ajouter. *
* len = quantité de ces données. *
* hton = indique si une conversion est à réaliser. *
* *
@@ -171,7 +225,7 @@ bool has_more_data_in_packed_buffer(const packed_buffer *pbuf)
* *
******************************************************************************/
-bool extend_packed_buffer(packed_buffer *pbuf, const void *buf, size_t len, bool hton)
+bool extend_packed_buffer(packed_buffer_t *pbuf, const void *data, size_t len, bool hton)
{
uint16_t tmp16; /* Valeur intermédiaire 16b */
uint32_t tmp32; /* Valeur intermédiaire 32b */
@@ -193,21 +247,21 @@ bool extend_packed_buffer(packed_buffer *pbuf, const void *buf, size_t len, bool
switch (len)
{
case 1:
- *((uint8_t *)(pbuf->data + pbuf->pos)) = *((uint8_t *)buf);
+ *((uint8_t *)(pbuf->data + pbuf->pos)) = *((uint8_t *)data);
break;
case 2:
- tmp16 = htobe16(*(uint16_t *)buf);
+ tmp16 = htobe16(*(uint16_t *)data);
*((uint16_t *)(pbuf->data + pbuf->pos)) = tmp16;
break;
case 4:
- tmp32 = htobe32(*(uint32_t *)buf);
+ tmp32 = htobe32(*(uint32_t *)data);
*((uint32_t *)(pbuf->data + pbuf->pos)) = tmp32;
break;
case 8:
- tmp64 = htobe64(*(uint64_t *)buf);
+ tmp64 = htobe64(*(uint64_t *)data);
*((uint64_t *)(pbuf->data + pbuf->pos)) = tmp64;
break;
@@ -221,7 +275,7 @@ bool extend_packed_buffer(packed_buffer *pbuf, const void *buf, size_t len, bool
*/
assert(!hton);
- memcpy(pbuf->data + pbuf->pos, buf, len);
+ memcpy(pbuf->data + pbuf->pos, data, len);
break;
}
@@ -249,7 +303,7 @@ bool extend_packed_buffer(packed_buffer *pbuf, const void *buf, size_t len, bool
* *
******************************************************************************/
-bool peek_packed_buffer(packed_buffer *pbuf, void *buf, size_t len, bool ntoh)
+bool peek_packed_buffer(packed_buffer_t *pbuf, void *buf, size_t len, bool ntoh)
{
bool result; /* Bilan à retourner */
uint16_t tmp16; /* Valeur intermédiaire 16b */
@@ -322,7 +376,7 @@ bool peek_packed_buffer(packed_buffer *pbuf, void *buf, size_t len, bool ntoh)
* *
******************************************************************************/
-void advance_packed_buffer(packed_buffer *pbuf, size_t len)
+void advance_packed_buffer(packed_buffer_t *pbuf, size_t len)
{
pbuf->pos += len;
@@ -346,7 +400,7 @@ void advance_packed_buffer(packed_buffer *pbuf, size_t len)
* *
******************************************************************************/
-bool extract_packed_buffer(packed_buffer *pbuf, void *buf, size_t len, bool ntoh)
+bool extract_packed_buffer(packed_buffer_t *pbuf, void *buf, size_t len, bool ntoh)
{
bool result; /* Bilan à retourner */
@@ -373,7 +427,7 @@ bool extract_packed_buffer(packed_buffer *pbuf, void *buf, size_t len, bool ntoh
* *
******************************************************************************/
-bool read_packed_buffer(packed_buffer *pbuf, int fd)
+bool read_packed_buffer(packed_buffer_t *pbuf, int fd)
{
bool result; /* Bilan à retourner */
uint32_t used; /* Taille de charge utile */
@@ -414,7 +468,7 @@ bool read_packed_buffer(packed_buffer *pbuf, int fd)
* *
******************************************************************************/
-bool write_packed_buffer(packed_buffer *pbuf, int fd)
+bool write_packed_buffer(packed_buffer_t *pbuf, int fd)
{
bool result; /* Bilan à retourner */
@@ -440,7 +494,7 @@ bool write_packed_buffer(packed_buffer *pbuf, int fd)
* *
******************************************************************************/
-bool recv_packed_buffer(packed_buffer *pbuf, int fd)
+bool recv_packed_buffer(packed_buffer_t *pbuf, int fd)
{
bool result; /* Bilan à retourner */
uint32_t used; /* Taille de charge utile */
@@ -481,7 +535,7 @@ bool recv_packed_buffer(packed_buffer *pbuf, int fd)
* *
******************************************************************************/
-bool send_packed_buffer(packed_buffer *pbuf, int fd)
+bool send_packed_buffer(packed_buffer_t *pbuf, int fd)
{
bool result; /* Bilan à retourner */
@@ -507,7 +561,7 @@ bool send_packed_buffer(packed_buffer *pbuf, int fd)
* *
******************************************************************************/
-bool ssl_recv_packed_buffer(packed_buffer *pbuf, SSL *fd)
+bool ssl_recv_packed_buffer(packed_buffer_t *pbuf, SSL *fd)
{
bool result; /* Bilan à retourner */
uint32_t used; /* Taille de charge utile */
@@ -555,7 +609,7 @@ bool ssl_recv_packed_buffer(packed_buffer *pbuf, SSL *fd)
* *
******************************************************************************/
-bool ssl_send_packed_buffer(packed_buffer *pbuf, SSL *fd)
+bool ssl_send_packed_buffer(packed_buffer_t *pbuf, SSL *fd)
{
bool result; /* Bilan à retourner */
int quantity; /* Nombre de données à traiter */
diff --git a/src/common/packed.h b/src/common/packed.h
index 5bc4fbb..f43b999 100644
--- a/src/common/packed.h
+++ b/src/common/packed.h
@@ -36,7 +36,7 @@
/* Rassemblement de données d'un paquet */
-typedef struct _packed_buffer
+typedef struct _packed_buffer_t
{
uint8_t *data; /* Données à traiter */
size_t allocated; /* Taille allouée */
@@ -44,53 +44,62 @@ typedef struct _packed_buffer
size_t used; /* Quantité de données utiles */
size_t pos; /* Tête de lecture/écriture */
-} packed_buffer;
+} packed_buffer_t;
+
+
+typedef struct _packed_buffer_t packed_buffer; /* REMME */
/* Initialise un paquet réseau pour une constitution. */
-void init_packed_buffer(packed_buffer *);
+void init_packed_buffer(packed_buffer_t *);
+
+/* Rembobine le paquet de données à son départ. */
+void rewind_packed_buffer(packed_buffer_t *);
/* Réinitialise un paquet réseau pour une constitution. */
-void reset_packed_buffer(packed_buffer *);
+void reset_packed_buffer(packed_buffer_t *);
/* Efface les données contenues par un paquet réseau. */
-void exit_packed_buffer(packed_buffer *);
+void exit_packed_buffer(packed_buffer_t *);
+
+/* Copie les données d'un tampon dans un autre. */
+void copy_packed_buffer(packed_buffer_t *, const packed_buffer_t *);
/* Indique le nombre d'octets de la charge utile d'un paquet. */
-size_t get_packed_buffer_payload_length(const packed_buffer *);
+size_t get_packed_buffer_payload_length(const packed_buffer_t *);
/* Détermine si des données sont disponibles en lecture. */
-bool has_more_data_in_packed_buffer(const packed_buffer *);
+bool has_more_data_in_packed_buffer(const packed_buffer_t *);
/* Ajoute des données à un paquet en amont à un envoi. */
-bool extend_packed_buffer(packed_buffer *, const void *, size_t, bool);
+bool extend_packed_buffer(packed_buffer_t *, const void *, size_t, bool);
/* Récupère des données depuis un paquet après une réception. */
-bool peek_packed_buffer(packed_buffer *, void *, size_t, bool);
+bool peek_packed_buffer(packed_buffer_t *, void *, size_t, bool);
/* Avance la tête de lecture dans les données d'un paquet. */
-void advance_packed_buffer(packed_buffer *, size_t);
+void advance_packed_buffer(packed_buffer_t *, size_t);
/* Récupère des données depuis un paquet après une réception. */
-bool extract_packed_buffer(packed_buffer *, void *, size_t, bool);
+bool extract_packed_buffer(packed_buffer_t *, void *, size_t, bool);
/* Lit des données depuis un flux local. */
-bool read_packed_buffer(packed_buffer *, int);
+bool read_packed_buffer(packed_buffer_t *, int);
/* Ecrit des données dans un flux local. */
-bool write_packed_buffer(packed_buffer *, int);
+bool write_packed_buffer(packed_buffer_t *, int);
/* Réceptionne des données depuis un flux réseau. */
-bool recv_packed_buffer(packed_buffer *, int);
+bool recv_packed_buffer(packed_buffer_t *, int);
/* Envoie des données au travers un flux réseau. */
-bool send_packed_buffer(packed_buffer *, int);
+bool send_packed_buffer(packed_buffer_t *, int);
/* Réceptionne des données depuis un flux réseau chiffré. */
-bool ssl_recv_packed_buffer(packed_buffer *, SSL *);
+bool ssl_recv_packed_buffer(packed_buffer_t *, SSL *);
/* Envoie des données au travers un flux réseau chiffré. */
-bool ssl_send_packed_buffer(packed_buffer *, SSL *);
+bool ssl_send_packed_buffer(packed_buffer_t *, SSL *);