diff options
Diffstat (limited to 'server/modules/downloaders/curl/src/curl_download.cpp')
-rw-r--r-- | server/modules/downloaders/curl/src/curl_download.cpp | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/server/modules/downloaders/curl/src/curl_download.cpp b/server/modules/downloaders/curl/src/curl_download.cpp index 054ce22..d80a6e4 100644 --- a/server/modules/downloaders/curl/src/curl_download.cpp +++ b/server/modules/downloaders/curl/src/curl_download.cpp @@ -21,6 +21,7 @@ #include "curl_download.h" #include <boost/thread.hpp> +#include <boost/log/trivial.hpp> size_t curl_w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) @@ -29,10 +30,34 @@ size_t curl_w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) if(d->get_cancel_state()) return -1; //cancel transfer //TODO: implement pause + std::ofstream &of(d->get_ofile()); + if(!of.is_open()) + { + //TODO: sanity check and path validation + try{ + of.open(d->get_download_path(), std::ios::out | std::ios::binary); + } + catch(...) //TODO: handle exception + { + } + } size_t size_ = size * nmemb; if(size_) { - //TODO: write data + if(of.is_open()) + { + try{ + of.write(ptr, size_); + } + catch(...) //TODO: handle exception + { + } + } + else + { + return -1; + //TODO: handle error + } } return size_; @@ -78,6 +103,7 @@ bool curl_download::delete_download() { cancel_transfer = true; curl_easy_cleanup(easy_handle); + //TODO: cleanup metadata return true; //TODO: } @@ -88,6 +114,30 @@ void curl_download::perform_internal() state = core_events::download_error; else state = core_events::download_completed; + ofile.close(); + {//curl debug + char *url; + curl_easy_getinfo(easy_handle, CURLINFO_EFFECTIVE_URL, &url); + BOOST_LOG_TRIVIAL(debug)<<__FILE__<<":"<<__LINE__<<"\t"<<__func__<<"\nCURLINFO_EFFECTIVE_URL:\t"<<url; + long code = 0; + curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE, &code); + BOOST_LOG_TRIVIAL(debug)<<"\nCURLINFO_RESPONSE_CODE:\t"<<code; + curl_easy_getinfo(easy_handle, CURLINFO_HTTP_CONNECTCODE, &code); + BOOST_LOG_TRIVIAL(debug)<<"\nCURLINFO_HTTP_CONNECTCODE:\t"<<code; + curl_easy_getinfo(easy_handle, CURLINFO_REDIRECT_COUNT, &code); + BOOST_LOG_TRIVIAL(debug)<<"\nCURLINFO_REDIRECT_COUNT:\t"<<code; + curl_easy_getinfo(easy_handle, CURLINFO_SIZE_DOWNLOAD, &code); + BOOST_LOG_TRIVIAL(debug)<<"\nCURLINFO_SIZE_DOWNLOAD:\t"<<code; + curl_easy_getinfo(easy_handle, CURLINFO_HEADER_SIZE, &code); + BOOST_LOG_TRIVIAL(debug)<<"\nCURLINFO_HEADER_SIZE:\t"<<code; + double length = 0; + curl_easy_getinfo(easy_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &length); + BOOST_LOG_TRIVIAL(debug)<<"\nCURLINFO_CONTENT_LENGTH_DOWNLOAD:\t"<<length; + curl_easy_getinfo(easy_handle, CURLINFO_CONTENT_TYPE, &url); + BOOST_LOG_TRIVIAL(debug)<<"\nCURLINFO_CONTENT_TYPE:\t"<<url; + + std::cout<<std::endl; + } std::list<core_events::download_state_info> l; core_events::download_state_info i; i.download_id = id; @@ -99,6 +149,6 @@ void curl_download::perform_internal() curl_download::~curl_download() { - curl_easy_cleanup(easy_handle); + //curl_easy_cleanup(easy_handle); //this crashes for some reason } |