diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-25 13:17:30 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-25 13:17:30 +0300 |
commit | 1fdf82ec8346c12d19c9a013080ca4c26a3cb6d6 (patch) | |
tree | d50030c765ed83ebf49557c1a0c8ca1f38b0d4c9 /server/modules/downloaders/curl/src/curl_download.cpp | |
parent | 493733c837eb74b902e3db1521689fb8f088f6d1 (diff) |
protocol:
use int32 instead of strings for id's in structures
server:
curl module:
work in progress
Diffstat (limited to 'server/modules/downloaders/curl/src/curl_download.cpp')
-rw-r--r-- | server/modules/downloaders/curl/src/curl_download.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/server/modules/downloaders/curl/src/curl_download.cpp b/server/modules/downloaders/curl/src/curl_download.cpp new file mode 100644 index 0000000..d474464 --- /dev/null +++ b/server/modules/downloaders/curl/src/curl_download.cpp @@ -0,0 +1,61 @@ +#include "curl_download.h" + +#include <boost/thread.hpp> + + +size_t curl_w_callback(char *ptr, size_t size, size_t nmemb, void *userdata) +{ + curl_download *d = (curl_download*)userdata; + if(d->get_cancel_state()) + return -1; //cancel transfer + //TODO: implement pause + size_t size_ = size * nmemb; + if(size_) + { + + } + return size_; +} + +curl_download::curl_download(std::map<std::string, std::string> params, core_api *a) : cancel_transfer(false), state(stopped) +{ + //for now we use single transfer connection for url + //TODO: support multiple connections in parallel for multithreaded download + easy_handle = curl_easy_init(); + if(!easy_handle) + ; //TODO: handle error + + curl_easy_setopt(easy_handle, CURLOPT_URL, params["0"].c_str()); //Url as set in module_info + curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, curl_w_callback); + curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, this); + if(!params["0"].empty()) + download_path = params["0"]; + else + download_path = a->get_core_settings()["download_dir"]; + //curl_easy_setopt(h, CURLOPT_DEFAULT_PROTOCOL, "http"); //require curl >= 7.45 + + +} + +void curl_download::start() +{ + boost::thread(boost::bind(&curl_download::perform_internal, this)); + state = running; +} + +void curl_download::stop() +{ + cancel_transfer = true; +} + + +void curl_download::perform_internal() +{ + curl_easy_perform(easy_handle); +} + +curl_download::~curl_download() +{ + curl_easy_cleanup(easy_handle); + +} |