2
0

PolycodeDownloader.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "PolycodeDownloader.h"
  2. size_t DownloaderCallback(char *ptr, size_t size, size_t nmemb, void *userdata) {
  3. PolycodeDownloader *downloader = (PolycodeDownloader*) userdata;
  4. size_t newSize = downloader->size + (size*nmemb);
  5. downloader->data = (char*)realloc((void*)downloader->data, newSize);
  6. memcpy(downloader->data+downloader->size, ptr, (size*nmemb));
  7. downloader->size = newSize;
  8. return size * nmemb;
  9. }
  10. String PolycodeDownloader::getDataAsString() {
  11. char *ndata = (char*)malloc(size);
  12. memcpy(ndata, data, size);
  13. ndata[size-1] = '\0';
  14. String ret = String(ndata);
  15. free(ndata);
  16. return ret;
  17. }
  18. PolycodeDownloader::PolycodeDownloader(String url) : Threaded() {
  19. this->url = url;
  20. data = (char*)malloc(0);
  21. size = 0;
  22. returned = false;
  23. }
  24. bool PolycodeDownloader::writeToFile(String fileName) {
  25. FILE *f = fopen(fileName.c_str(), "wb");
  26. if(!f)
  27. return false;
  28. fwrite(data, 1, size, f);
  29. fclose(f);
  30. return true;
  31. }
  32. void PolycodeDownloader::runThread() {
  33. curl = curl_easy_init();
  34. curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
  35. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, DownloaderCallback);
  36. curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
  37. curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
  38. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
  39. curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
  40. CURLcode curl_res = curl_easy_perform(curl);
  41. curl_easy_cleanup(curl);
  42. returned = true;
  43. dispatchEvent(new Event(Event::COMPLETE_EVENT), Event::COMPLETE_EVENT);
  44. }
  45. PolycodeDownloader::~PolycodeDownloader() {
  46. free(data);
  47. }