From e3ce461fec70fd638b415edef4ce3aa9d939d772 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Mon, 9 Sep 2024 10:38:13 +0200 Subject: Collect the quantity of data received or sent with cURL. --- src/common/curl.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/core/global.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/core/global.h | 6 ++++++ 3 files changed, 116 insertions(+) diff --git a/src/common/curl.c b/src/common/curl.c index 2cf7f3a..e9fb92f 100644 --- a/src/common/curl.c +++ b/src/common/curl.c @@ -28,6 +28,12 @@ #include +#include "../core/global.h" + + + +/* Mémorise un volume de données transférées. */ +static int track_curl_data_transfers(CURL *, curl_infotype, char *, size_t, void *); /* Mémorise les données reçues en réponse à une requête. */ static size_t receive_data_from_internet(void *, size_t, size_t, sized_binary_t *); @@ -36,6 +42,48 @@ static size_t receive_data_from_internet(void *, size_t, size_t, sized_binary_t /****************************************************************************** * * +* Paramètres : handle = gestionnaire de la requête cURL concernée. * +* type = type de transfert réalisé. * +* data = pointeur vers les données manipulées. * +* size = quantité de données transférées. * +* unused = adresse non utilisée ici. * +* * +* Description : Mémorise un volume de données transférées. * +* * +* Retour : CURLE_OK. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static int track_curl_data_transfers(CURL *handle, curl_infotype type, char *data, size_t size, void *unused) +{ + switch (type) + { + case CURLINFO_HEADER_IN: + case CURLINFO_DATA_IN: + /*case CURLINFO_SSL_DATA_IN:*/ + update_network_stats(size, 0); + break; + + case CURLINFO_HEADER_OUT: + case CURLINFO_DATA_OUT: + /*case CURLINFO_SSL_DATA_OUT:*/ + update_network_stats(0, size); + break; + + default: + break; + + } + + return 0; + +} + + +/****************************************************************************** +* * * Paramètres : contents = contenu nouveau en arrivance d'Internet. * * size = taille d'un élément reçu. * * nmemb = quantité de ces éléments. * @@ -100,6 +148,9 @@ bool send_http_get_request(const char *url, char * const headers[], size_t hcoun req = curl_easy_init(); if (req == NULL) goto exit; + curl_easy_setopt(req, CURLOPT_DEBUGFUNCTION, track_curl_data_transfers); + curl_easy_setopt(req, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(req, CURLOPT_URL, url); /* Entêtes à transmettre */ @@ -179,6 +230,9 @@ bool send_http_post_request(const char *url, char * const headers[], size_t hcou req = curl_easy_init(); if (req == NULL) goto exit; + curl_easy_setopt(req, CURLOPT_DEBUGFUNCTION, track_curl_data_transfers); + curl_easy_setopt(req, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(req, CURLOPT_URL, url); /* Entêtes à transmettre */ diff --git a/src/core/global.c b/src/core/global.c index 83d8f4a..d38656b 100644 --- a/src/core/global.c +++ b/src/core/global.c @@ -28,10 +28,66 @@ +/* Décompte des émissions et réceptions */ +static GMutex _network_mutex; +static size_t _bytes_received = 0; +static size_t _bytes_sent = 0; + /* Gestionnaire de tâches parallèles */ static GWorkQueue *_queue = NULL; + +/****************************************************************************** +* * +* Paramètres : received = quantité d'octets reçus jusqu'à présent. [OUT] * +* sent = quantité d'octets émis jusqu'à présent. [OUT] * +* * +* Description : Fournit les volumes d'octets échangés sur le réseau. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void get_network_stats(size_t *received, size_t *sent) +{ + g_mutex_lock(&_network_mutex); + + *received = _bytes_received; + *sent = _bytes_sent; + + g_mutex_unlock(&_network_mutex); + +} + + +/****************************************************************************** +* * +* Paramètres : received = quantité d'octets reçus supplémentaire. * +* sent = quantité d'octets émis supplémentaire. * +* * +* Description : Augmente les volumes d'octets échangés sur le réseau. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void update_network_stats(size_t received, size_t sent) +{ + g_mutex_lock(&_network_mutex); + + _bytes_received += received; + _bytes_sent += sent; + + g_mutex_unlock(&_network_mutex); + +} + + /****************************************************************************** * * * Paramètres : queue = nouveau gestionnaire à mémoriser ou NULL. * diff --git a/src/core/global.h b/src/core/global.h index 61b7712..b861ad8 100644 --- a/src/core/global.h +++ b/src/core/global.h @@ -29,6 +29,12 @@ +/* Fournit les volumes d'octets échangés sur le réseau. */ +void get_network_stats(size_t *, size_t *); + +/* Augmente les volumes d'octets échangés sur le réseau. */ +void update_network_stats(size_t, size_t); + /* Définit le gestionnaire de traitements parallèles courant. */ void set_work_queue(/* __steal */GWorkQueue *); -- cgit v0.11.2-87-g4458