summaryrefslogtreecommitdiff
path: root/src/common/packed.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-12-01 11:16:12 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-12-01 11:16:12 (GMT)
commit29eae5126251eb0f10d02700bb87dac9893bb445 (patch)
tree34e8906f0d6f3948b80cf59b86f2d5179fa379ad /src/common/packed.c
parent09f07c9a523dce7b8d7e013857f988f727f1a72b (diff)
Encrypted all communications using TLS.
Diffstat (limited to 'src/common/packed.c')
-rw-r--r--src/common/packed.c79
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;
+
+}