| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #include "PolycodeDownloader.h"
- size_t DownloaderCallback(char *ptr, size_t size, size_t nmemb, void *userdata) {
- PolycodeDownloader *downloader = (PolycodeDownloader*) userdata;
-
- size_t newSize = downloader->size + (size*nmemb);
- downloader->data = (char*)realloc((void*)downloader->data, newSize);
-
- memcpy(downloader->data+downloader->size, ptr, (size*nmemb));
-
- downloader->size = newSize;
- return size * nmemb;
- }
- String PolycodeDownloader::getDataAsString() {
- char *ndata = (char*)malloc(size);
- memcpy(ndata, data, size);
- ndata[size-1] = '\0';
- String ret = String(ndata);
- free(ndata);
- return ret;
- }
-
- PolycodeDownloader::PolycodeDownloader(String url) : Threaded() {
- this->url = url;
- data = (char*)malloc(0);
- size = 0;
- returned = false;
- }
- bool PolycodeDownloader::writeToFile(String fileName) {
- FILE *f = fopen(fileName.c_str(), "wb");
- if(!f)
- return false;
- fwrite(data, 1, size, f);
- fclose(f);
- return true;
- }
- void PolycodeDownloader::runThread() {
- curl = curl_easy_init();
-
- curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, DownloaderCallback);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
-
- CURLcode curl_res = curl_easy_perform(curl);
-
- curl_easy_cleanup(curl);
- returned = true;
- dispatchEvent(new Event(Event::COMPLETE_EVENT), Event::COMPLETE_EVENT);
- }
- PolycodeDownloader::~PolycodeDownloader() {
- free(data);
- }
|