summaryrefslogtreecommitdiff
path: root/includes/CurlTask.h
diff options
context:
space:
mode:
authorNicolas "Pixel" Noble <pixel@nobis-crew.org>2014-06-19 15:38:02 -0700
committerNicolas "Pixel" Noble <pixel@nobis-crew.org>2014-06-19 15:38:02 -0700
commitc83a8a951cce9b7ed541c293993f708f720bf28d (patch)
treee2c92a5778de9829eef0b03bb49bca4acdba2396 /includes/CurlTask.h
parent948dd878a4060bac728f0af1cf7c0d0048ddace0 (diff)
Finishing up basic curl integration and adding a basic DownloadTask.
Diffstat (limited to 'includes/CurlTask.h')
-rw-r--r--includes/CurlTask.h39
1 files changed, 32 insertions, 7 deletions
diff --git a/includes/CurlTask.h b/includes/CurlTask.h
index 0aa62a0..41243ec 100644
--- a/includes/CurlTask.h
+++ b/includes/CurlTask.h
@@ -7,20 +7,45 @@
namespace Balau {
class CurlTask : public StacklessTask {
-public:
- CurlTask();
+ public:
+ CurlTask();
+ ~CurlTask();
friend class TaskMan;
protected:
CURL * m_curlHandle;
-private:
- void curlDone(CURLcode result);
+ void registerCurlHandle() { getTaskMan()->registerCurlHandle(this); }
+ void unregisterCurlHandle() { getTaskMan()->unregisterCurlHandle(this); }
+ private:
+ virtual size_t writeFunction(char * ptr, size_t size, size_t nmemb) { return size * nmemb; }
+ virtual size_t readFunction(void * ptr, size_t size, size_t nmemb) { return CURL_READFUNC_ABORT; }
+ virtual int debugFunction(curl_infotype info, char * str, size_t str_len) { return 0; }
+ virtual void curlDone(CURLcode result) { }
static size_t writeFunctionStatic(char * ptr, size_t size, size_t nmemb, void * userdata);
- virtual size_t writeFunction(char * ptr, size_t size, size_t nmemb) { return size * nmemb; }
static size_t readFunctionStatic(void * ptr, size_t size, size_t nmemb, void * userdata);
- virtual size_t readFunction(void * ptr, size_t size, size_t nmemb) { return CURL_READFUNC_ABORT; }
static int debugFunctionStatic(CURL * easy, curl_infotype info, char * str, size_t str_len, void * userdata);
- virtual int debugFunction(curl_infotype info, char * str, size_t str_len) { return 0; }
+};
+
+class DownloadTask : public CurlTask {
+ public:
+ DownloadTask(const String & url);
+ const String & getData() const { return m_data; }
+ bool isDone() { return m_done; }
+ long responseCode() { return m_responseCode; }
+
+ protected:
+ String m_data;
+ CURLcode m_curlResult;
+ long m_responseCode;
+
+ private:
+ virtual const char * getName() const override { return m_name.to_charp(); }
+ virtual void Do() override;
+ virtual void curlDone(CURLcode result) override;
+ virtual size_t writeFunction(char * ptr, size_t size, size_t nmemb) override { m_data += ptr; return size * nmemb; }
+ String m_name;
+ Events::Custom m_evt;
+ bool m_done = false;
};
};