From 8f695e047994d31fe8dc66fea1c4a86ccf0385fe Mon Sep 17 00:00:00 2001 From: Armando Rivera Date: Thu, 1 Nov 2018 04:20:09 -0400 Subject: [PATCH] Added CURL module --- curl.inc | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 curl.inc diff --git a/curl.inc b/curl.inc new file mode 100644 index 0000000..f9a39ea --- /dev/null +++ b/curl.inc @@ -0,0 +1,63 @@ + +#ifdef USE_CURL + #include + + typedef int (*JADE_PROGRESS_CALLBACK)(void*,double,double,double,double); + typedef int (*JADE_WRITE_CALLBACK)(void*,long,long,void*); + + void downloadFile(CSTRING url, CSTRING downloadFileName, void *progress_callback); + void downloadPage(CSTRING url, CSTRING buffer, void *write_callback); + + + + + int jade_curl_progress_callback(void* clientp, double dltotal, double dlnow, double ultotal, double ulnow ) { + printf("Downloaded %d of %d bytes\r",(int)dlnow,(int)dltotal); + return 0; + } + + int jade_curl_write_data_callback (void* content, long size, long nmemb, void* stream) { + ((std::string*)stream)->append((char*)content, size * nmemb); + return size * nmemb; + } + + std::string downloadPage(CSTRING url,JADE_WRITE_CALLBACK write_callback = jade_curl_write_data_callback) { + void* handle; + int success; + std::string buffer$; + + handle = curl_easy_init(); + curl_easy_setopt(handle, CURLOPT_URL, url.c_str()); + curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION,1); + curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_callback); + curl_easy_setopt(handle, CURLOPT_WRITEDATA, &buffer$); + + + success = curl_easy_perform(handle); + + curl_easy_cleanup(handle); + + return buffer$; + } + void downloadFile(CSTRING url, CSTRING downloadFileName, JADE_PROGRESS_CALLBACK progress_callback=jade_curl_progress_callback) { + void* handle; + int success; + FILE *fp; + + handle = curl_easy_init(); + if ((fp = fopen(downloadFileName.c_str(), "wb+"))) { + curl_easy_setopt(handle, CURLOPT_URL, url.c_str()); + curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION,1); + curl_easy_setopt(handle, CURLOPT_WRITEDATA, fp); + curl_easy_setopt(handle, CURLOPT_NOPROGRESS,0); + curl_easy_setopt(handle, CURLOPT_PROGRESSDATA,downloadFileName.c_str()); + curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION,progress_callback); + + success = curl_easy_perform(handle); + fclose(fp); + } + curl_easy_cleanup(handle); + printf("\n\nDownload of '%s' Complete.\n\n", downloadFileName.c_str()); + } + +#endif