summaryrefslogtreecommitdiff
path: root/server/modules/downloaders/curl/src/curl_download.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-08-25 13:17:30 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-08-25 13:17:30 +0300
commit1fdf82ec8346c12d19c9a013080ca4c26a3cb6d6 (patch)
treed50030c765ed83ebf49557c1a0c8ca1f38b0d4c9 /server/modules/downloaders/curl/src/curl_download.cpp
parent493733c837eb74b902e3db1521689fb8f088f6d1 (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.cpp61
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);
+
+}