diff --git a/include/transport/HTTPRequest.h b/include/transport/HTTPRequest.h index 667651a2b5a910540cdd65ae4720fe0351e155e5..313dff2b0695f01cedc50e595996936148441fa4 100644 --- a/include/transport/HTTPRequest.h +++ b/include/transport/HTTPRequest.h @@ -1,20 +1,27 @@ -#ifndef HTTPREQ_H -#define HTTPREQ_H + +#pragma once #include "curl/curl.h" #include "transport/Logging.h" +#include "transport/ThreadPool.h" #include #include #include #include "rapidjson/document.h" +#include + namespace Transport { -class HTTPRequest { +class HTTPRequest : public Thread { public: - HTTPRequest(); + typedef enum { Get } Type; + typedef boost::function< void (HTTPRequest *, bool, rapidjson::Document &json, const std::string &data) > Callback; + + HTTPRequest(ThreadPool *tp, Type type, const std::string &url, Callback callback); + HTTPRequest(Type type, const std::string &url); - ~HTTPRequest() { + virtual ~HTTPRequest() { if(curlhandle) { curl_easy_cleanup(curlhandle); curlhandle = NULL; @@ -22,17 +29,32 @@ class HTTPRequest { } void setProxy(std::string, std::string, std::string, std::string); - bool GET(std::string url, std::string &output); - bool GET(std::string url, rapidjson::Document &json); - std::string getCurlError() {return std::string(curl_errorbuffer);} + bool execute(); + bool execute(rapidjson::Document &json); + std::string getError() {return std::string(curl_errorbuffer);} + + void run(); + void finalize(); + + boost::signal onRequestFinished; private: bool init(); + bool GET(std::string url, std::string &output); + bool GET(std::string url, rapidjson::Document &json); + CURL *curlhandle; char curl_errorbuffer[1024]; std::string error; std::string callbackdata; + ThreadPool *m_tp; + std::string m_url; + bool m_ok; + rapidjson::Document m_json; + std::string m_data; + Callback m_callback; + Type m_type; static int curlCallBack(char* data, size_t size, size_t nmemb, HTTPRequest *obj); @@ -40,4 +62,3 @@ class HTTPRequest { } -#endif