#include #include #include #include /* perror */ #include #include #include #include "misc.h" struct memory_struct { char *memory; size_t size; }; static size_t write_memory_callback(void *ptr, size_t size, size_t nmemb, void *data) { int realsize = size * nmemb; struct memory_struct *mem = (struct memory_struct *)data; mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory) { memcpy(&(mem->memory[mem->size]), ptr, realsize); mem->size += realsize; mem->memory[mem->size] = 0; } return realsize; } char* kuna_get_actual_value(cfg *helium_cfg) { char rbuf[80]; int d,mo,y,h,m,s; float temp; CURL *curl; struct memory_struct chunk; chunk.memory = NULL; chunk.size = 0; curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, helium_cfg->params.kuna.url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_memory_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); curl_easy_perform(curl); curl_easy_cleanup(curl); if (chunk.memory && (sscanf(chunk.memory, "%d.%d.%d, %d:%d:%d, %f", &d, &mo, &y, &h, &m, &s, &temp) == 7)) { sprintf(rbuf, "%3.1f", temp); return strdup(rbuf); } else { return NULL; } };