summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client-qt/udm-client-qt/udm_main.cpp1
-rw-r--r--server/modules/downloaders/curl/include/curl_download.h6
-rw-r--r--server/modules/downloaders/curl/src/curl_download.cpp54
3 files changed, 59 insertions, 2 deletions
diff --git a/client-qt/udm-client-qt/udm_main.cpp b/client-qt/udm-client-qt/udm_main.cpp
index 4110f03..5df22a7 100644
--- a/client-qt/udm-client-qt/udm_main.cpp
+++ b/client-qt/udm-client-qt/udm_main.cpp
@@ -543,5 +543,6 @@ void udm_main::client_disconnected()
btn_del->setEnabled(false);
btn_start->setEnabled(false);
btn_stop->setEnabled(false);
+ //TODO: disable all actions which require alive connection
lbl_state->setText(tr("State") + ": " + tr("Disconnected"));
}
diff --git a/server/modules/downloaders/curl/include/curl_download.h b/server/modules/downloaders/curl/include/curl_download.h
index c98b64e..5aea97e 100644
--- a/server/modules/downloaders/curl/include/curl_download.h
+++ b/server/modules/downloaders/curl/include/curl_download.h
@@ -23,6 +23,7 @@
#include <api_module_downloader.h>
#include <curl/curl.h>
+#include <fstream>
class curl_download : public download_s
{
@@ -41,6 +42,10 @@ class curl_download : public download_s
{
return download_path;
}
+ std::ofstream &get_ofile()
+ {
+ return ofile;
+ }
private:
void perform_internal();
CURL *easy_handle = nullptr;
@@ -49,6 +54,7 @@ class curl_download : public download_s
std::string download_path;
core_api *api = nullptr;
module_base *module = nullptr;
+ std::ofstream ofile;
};
#endif // CURL_DOWNLOAD_H
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
}