diff options
Diffstat (limited to 'backends/networking/curl')
-rw-r--r-- | backends/networking/curl/connectionmanager.cpp | 4 | ||||
-rw-r--r-- | backends/networking/curl/connectionmanager.h | 3 | ||||
-rw-r--r-- | backends/networking/curl/curljsonrequest.cpp | 16 | ||||
-rw-r--r-- | backends/networking/curl/curljsonrequest.h | 8 | ||||
-rw-r--r-- | backends/networking/curl/networkreadstream.cpp | 7 | ||||
-rw-r--r-- | backends/networking/curl/networkreadstream.h | 3 |
6 files changed, 34 insertions, 7 deletions
diff --git a/backends/networking/curl/connectionmanager.cpp b/backends/networking/curl/connectionmanager.cpp index 8c718e019b..d34eab23e8 100644 --- a/backends/networking/curl/connectionmanager.cpp +++ b/backends/networking/curl/connectionmanager.cpp @@ -39,8 +39,8 @@ ConnectionManager::~ConnectionManager() { curl_global_cleanup(); } -NetworkReadStream *ConnectionManager::makeRequest(const char *url) { - NetworkReadStream *stream = new NetworkReadStream(url); +NetworkReadStream *ConnectionManager::makeRequest(const char *url, curl_slist *headersList, Common::String postFields) { + NetworkReadStream *stream = new NetworkReadStream(url, headersList, postFields); curl_multi_add_handle(_multi, stream->getEasyHandle()); return stream; } diff --git a/backends/networking/curl/connectionmanager.h b/backends/networking/curl/connectionmanager.h index fadcdf1372..b83de6191a 100644 --- a/backends/networking/curl/connectionmanager.h +++ b/backends/networking/curl/connectionmanager.h @@ -26,6 +26,7 @@ #include "common/str.h" typedef void CURLM; +struct curl_slist; namespace Networking { @@ -38,7 +39,7 @@ public: ConnectionManager(); virtual ~ConnectionManager(); - NetworkReadStream *makeRequest(const char *url); + NetworkReadStream *makeRequest(const char *url, curl_slist *headersList, Common::String postFields); void handle(); }; diff --git a/backends/networking/curl/curljsonrequest.cpp b/backends/networking/curl/curljsonrequest.cpp index f5a7a7c8d0..0c6363467a 100644 --- a/backends/networking/curl/curljsonrequest.cpp +++ b/backends/networking/curl/curljsonrequest.cpp @@ -30,7 +30,7 @@ namespace Networking { -CurlJsonRequest::CurlJsonRequest(Callback cb, const char *url) : Request(cb), _stream(0), _contentsStream(DisposeAfterUse::YES) { +CurlJsonRequest::CurlJsonRequest(Callback cb, const char *url) : Request(cb), _stream(0), _headersList(0), _contentsStream(DisposeAfterUse::YES) { _url = url; } @@ -57,7 +57,7 @@ char *CurlJsonRequest::getPreparedContents() { } bool CurlJsonRequest::handle(ConnectionManager &manager) { - if (!_stream) _stream = manager.makeRequest(_url); + if (!_stream) _stream = manager.makeRequest(_url, _headersList, _postFields); if (_stream) { const int kBufSize = 16*1024; @@ -83,4 +83,16 @@ bool CurlJsonRequest::handle(ConnectionManager &manager) { return false; } +void CurlJsonRequest::addHeader(Common::String header) { + _headersList = curl_slist_append(_headersList, header.c_str()); +} + +void CurlJsonRequest::addPostField(Common::String keyValuePair) { + if (_postFields == "") + _postFields = keyValuePair; + else + _postFields += "&" + keyValuePair; +} + + } //end of namespace Networking diff --git a/backends/networking/curl/curljsonrequest.h b/backends/networking/curl/curljsonrequest.h index e9634393dc..17df9693f2 100644 --- a/backends/networking/curl/curljsonrequest.h +++ b/backends/networking/curl/curljsonrequest.h @@ -26,6 +26,8 @@ #include "backends/cloud/request.h" #include "common/memstream.h" +struct curl_slist; + namespace Networking { class NetworkReadStream; @@ -33,6 +35,8 @@ class NetworkReadStream; class CurlJsonRequest : public Cloud::Request { const char *_url; NetworkReadStream *_stream; + curl_slist *_headersList; + Common::String _postFields; Common::MemoryWriteStreamDynamic _contentsStream; /** Prepares raw bytes from _contentsStream to be parsed with Common::JSON::parse(). */ @@ -43,6 +47,10 @@ public: virtual ~CurlJsonRequest(); virtual bool handle(ConnectionManager &manager); + + void addHeader(Common::String header); + + void addPostField(Common::String header); }; } //end of namespace Networking diff --git a/backends/networking/curl/networkreadstream.cpp b/backends/networking/curl/networkreadstream.cpp index b8cb81aca2..f2af4fd50c 100644 --- a/backends/networking/curl/networkreadstream.cpp +++ b/backends/networking/curl/networkreadstream.cpp @@ -34,7 +34,9 @@ static size_t curlDataCallback(char *d, size_t n, size_t l, void *p) { return 0; } -NetworkReadStream::NetworkReadStream(const char *url): _easy(0), _eos(false), _requestComplete(false) { +NetworkReadStream::NetworkReadStream(const char *url, curl_slist *headersList, Common::String postFields): + _easy(0), _eos(false), _requestComplete(false) +{ _easy = curl_easy_init(); curl_easy_setopt(_easy, CURLOPT_WRITEFUNCTION, curlDataCallback); curl_easy_setopt(_easy, CURLOPT_WRITEDATA, this); //so callback can call us @@ -42,6 +44,9 @@ NetworkReadStream::NetworkReadStream(const char *url): _easy(0), _eos(false), _r curl_easy_setopt(_easy, CURLOPT_HEADER, 0L); curl_easy_setopt(_easy, CURLOPT_URL, url); curl_easy_setopt(_easy, CURLOPT_VERBOSE, 0L); + curl_easy_setopt(_easy, CURLOPT_HTTPHEADER, headersList); + curl_easy_setopt(_easy, CURLOPT_POSTFIELDSIZE, postFields.size()); + curl_easy_setopt(_easy, CURLOPT_COPYPOSTFIELDS, postFields.c_str()); } NetworkReadStream::~NetworkReadStream() { diff --git a/backends/networking/curl/networkreadstream.h b/backends/networking/curl/networkreadstream.h index 0333e4fb16..bc4b761ba7 100644 --- a/backends/networking/curl/networkreadstream.h +++ b/backends/networking/curl/networkreadstream.h @@ -28,6 +28,7 @@ #include "common/str.h" typedef void CURL; +struct curl_slist; namespace Networking { @@ -36,7 +37,7 @@ class NetworkReadStream: public Common::MemoryReadWriteStream { bool _eos, _requestComplete; public: - NetworkReadStream(const char *url); + NetworkReadStream(const char *url, curl_slist *headersList, Common::String postFields); virtual ~NetworkReadStream(); CURL *getEasyHandle() const { return _easy; } |