diff --git a/Makefile b/Makefile index 439875a458691671964b8d6b2c8540a26f8e5eb1..40722a22918c419784982b9371a603d8a2d44260 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ all: frewe-client frewe-client: frewe-client.c http_fetcher.c http_error_codes.c - gcc frewe-client.c http_fetcher.c http_error_codes.c -o frewe-client -lusb -lm -lcrypto + gcc frewe-client.c http_fetcher.c http_error_codes.c -o frewe-client -lusb -lm -lcrypto -lcurl install: frewe-client cp rc.frewe-client /etc/init.d/frewe-client diff --git a/frewe-client.c b/frewe-client.c index ecb78b79b44f9ff51e99fb00351de09f6539b29a..c34e858146bce71c4814d31dc235c883fbe8d2ec 100644 --- a/frewe-client.c +++ b/frewe-client.c @@ -63,6 +63,7 @@ * 2015-04-24 Handle lasttime as UTC * 2015-08-20 Don't write fhem.txt for older records * 2016-01-16 Separate read interval for fhem.txt, run each 48 seconds for FHEM + * 2018-11-10 switch to libcurl * TODO: Handle rain counter overflow */ @@ -81,6 +82,7 @@ #include #include #include "http_fetcher.h" +#include #define PROGRAM_VERSION "1.19" @@ -250,6 +252,8 @@ int main(int argc, char **argv) for (i=0;i150) { logger(LOG_ERROR,"ws_parse","Rainhour is out of range, rain=%f, lastrain=%f",w.rain,lastrain); @@ -1637,6 +1642,31 @@ static size_t write_callback(char *buffer, size_t size,size_t nitems,void *outpu return size*nitems; } */ +size_t write_data(void *ptr, size_t size, size_t nmemb, char **filebuf){ + + logger(LOG_DEBUG,"write_data"," %i times %i bytes", nmemb, size); + char *pagebuf = (char*)malloc(nmemb*size); + if(pagebuf==NULL){ + logger(LOG_ERROR,"write_data","malloc failed"); + return 1; + } + logger(LOG_DEBUG,"write_data","malloc success: %i", nmemb*size); + char *cptr=(char*)ptr; + size_t written=0; + int pos=0; + while(((char*)ptr)[pos]!='\0' && pos=0) - { logger(LOG_DEBUG,"ws_submit","http_fetcher performed OK content: %s", *filebuf); + /* int l=http_fetch(server_url, filebuf);*/ + curl = curl_easy_init(); + if(!curl){ + logger(LOG_ERROR,"ws_submit","curl init failed"); + return 1; + } + + curl_easy_setopt(curl, CURLOPT_URL, server_url); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, *filebuf); + int l=curl_easy_perform(curl); + curl_easy_cleanup(curl); + curl_global_cleanup(); + + /*if (l>=0)*/ + if (l == CURLE_OK) +/* { logger(LOG_DEBUG,"ws_submit","http_fetcher performed OK content: %s", *filebuf);*/ + { logger(LOG_DEBUG,"ws_submit","curl performed OK content: %s", *filebuf); return 0; } else - { logger(LOG_WARNING,"ws_submit","http_fetcher failed with message \"%s\"", http_strerror()); + /*{ logger(LOG_WARNING,"ws_submit","http_fetcher failed with message \"%s\"", http_strerror());*/ + { logger(LOG_WARNING,"ws_submit","curl failed with message \"%s\"", curl_easy_strerror(l)); return 1; } }