diff options
Diffstat (limited to 'backends')
-rw-r--r-- | backends/cloud/dropbox/curlrequest.cpp | 4 | ||||
-rw-r--r-- | backends/cloud/dropbox/curlrequest.h | 9 | ||||
-rw-r--r-- | backends/cloud/request.h | 4 | ||||
-rw-r--r-- | backends/cloud/storage.h | 4 | ||||
-rw-r--r-- | backends/module.mk | 10 | ||||
-rw-r--r-- | backends/networking/curl/connectionmanager.cpp (renamed from backends/cloud/curl/connectionmanager.cpp) | 11 | ||||
-rw-r--r-- | backends/networking/curl/connectionmanager.h (renamed from backends/cloud/curl/connectionmanager.h) | 6 | ||||
-rw-r--r-- | backends/networking/curl/networkreadstream.cpp (renamed from backends/cloud/curl/networkreadstream.cpp) | 23 | ||||
-rw-r--r-- | backends/networking/curl/networkreadstream.h (renamed from backends/cloud/curl/networkreadstream.h) | 11 |
9 files changed, 36 insertions, 46 deletions
diff --git a/backends/cloud/dropbox/curlrequest.cpp b/backends/cloud/dropbox/curlrequest.cpp index 1dfdd9e25f..ecc868cb51 100644 --- a/backends/cloud/dropbox/curlrequest.cpp +++ b/backends/cloud/dropbox/curlrequest.cpp @@ -23,7 +23,7 @@ #define FORBIDDEN_SYMBOL_ALLOW_ALL #include "backends/cloud/dropbox/curlrequest.h" -#include "backends/cloud/curl/networkreadstream.h" +#include "backends/networking/curl/networkreadstream.h" #include "common/debug.h" #include <curl/curl.h> @@ -38,7 +38,7 @@ CurlRequest::~CurlRequest() { if (_stream) delete _stream; } -bool CurlRequest::handle(ConnectionManager& manager) { +bool CurlRequest::handle(Networking::ConnectionManager &manager) { if (_firstTime) { _stream = manager.makeRequest(_url); _firstTime = false; diff --git a/backends/cloud/dropbox/curlrequest.h b/backends/cloud/dropbox/curlrequest.h index 2c8ab6b8f8..3d5d4adb72 100644 --- a/backends/cloud/dropbox/curlrequest.h +++ b/backends/cloud/dropbox/curlrequest.h @@ -25,22 +25,23 @@ #include "backends/cloud/request.h" -namespace Cloud { - +namespace Networking { class NetworkReadStream; +} +namespace Cloud { namespace Dropbox { class CurlRequest : public Cloud::Request { bool _firstTime; const char *_url; - NetworkReadStream *_stream; + Networking::NetworkReadStream *_stream; public: CurlRequest(Callback cb, const char *url); virtual ~CurlRequest(); - virtual bool handle(ConnectionManager& manager); + virtual bool handle(Networking::ConnectionManager &manager); }; } //end of namespace Dropbox diff --git a/backends/cloud/request.h b/backends/cloud/request.h index b4f5ccab0b..d85a68d570 100644 --- a/backends/cloud/request.h +++ b/backends/cloud/request.h @@ -23,7 +23,7 @@ #ifndef BACKENDS_CLOUD_REQUEST_H #define BACKENDS_CLOUD_REQUEST_H -#include "backends/cloud/curl/connectionmanager.h" +#include "backends/networking/curl/connectionmanager.h" namespace Cloud { @@ -47,7 +47,7 @@ public: * @return true if request's work is complete and it may be removed from Storage's list */ - virtual bool handle(ConnectionManager& manager) = 0; + virtual bool handle(Networking::ConnectionManager &manager) = 0; }; } //end of namespace Cloud diff --git a/backends/cloud/storage.h b/backends/cloud/storage.h index 0949ff8505..84b6157a22 100644 --- a/backends/cloud/storage.h +++ b/backends/cloud/storage.h @@ -26,7 +26,7 @@ #include "common/str.h" #include "common/array.h" #include "backends/cloud/request.h" -#include "backends/cloud/curl/connectionmanager.h" +#include "backends/networking/curl/connectionmanager.h" namespace Cloud { @@ -36,7 +36,7 @@ class Storage { protected: Common::Array<Request *> _requests; - ConnectionManager _connectionManager; + Networking::ConnectionManager _connectionManager; virtual void addRequest(Request *request); //starts the timer if it's not started virtual void handler(); diff --git a/backends/module.mk b/backends/module.mk index cf100892f5..0be8ef90a5 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -24,9 +24,13 @@ MODULE_OBJS += \ cloud/manager.o \ cloud/storage.o \ cloud/dropbox/dropboxstorage.o \ - cloud/dropbox/curlrequest.o \ - cloud/curl/connectionmanager.o \ - cloud/curl/networkreadstream.o + cloud/dropbox/curlrequest.o +endif + +ifdef USE_LIBCURL +MODULE_OBJS += \ + networking/curl/connectionmanager.o \ + networking/curl/networkreadstream.o endif ifdef USE_ELF_LOADER diff --git a/backends/cloud/curl/connectionmanager.cpp b/backends/networking/curl/connectionmanager.cpp index d0a0ad8b5c..b7b7112c7f 100644 --- a/backends/cloud/curl/connectionmanager.cpp +++ b/backends/networking/curl/connectionmanager.cpp @@ -22,12 +22,12 @@ #define FORBIDDEN_SYMBOL_ALLOW_ALL -#include "backends/cloud/curl/connectionmanager.h" -#include "backends/cloud/curl/networkreadstream.h" +#include "backends/networking/curl/connectionmanager.h" +#include "backends/networking/curl/networkreadstream.h" #include "common/debug.h" #include <curl/curl.h> -namespace Cloud { +namespace Networking { ConnectionManager::ConnectionManager(): _multi(0) { curl_global_init(CURL_GLOBAL_ALL); @@ -60,9 +60,8 @@ void ConnectionManager::handle() { if (stream) stream->done(); debug("ConnectionManager: SUCCESS (%d - %s)", curlMsg->data.result, curl_easy_strerror(curlMsg->data.result)); - curl_multi_remove_handle(_multi, e); - } - else { + curl_multi_remove_handle(_multi, e); + } else { debug("ConnectionManager: FAILURE (CURLMsg (%d))", curlMsg->msg); //TODO: notify stream on this case also } diff --git a/backends/cloud/curl/connectionmanager.h b/backends/networking/curl/connectionmanager.h index 0ea27201f2..fadcdf1372 100644 --- a/backends/cloud/curl/connectionmanager.h +++ b/backends/networking/curl/connectionmanager.h @@ -20,14 +20,14 @@ * */ -#ifndef BACKENDS_CLOUD_CURL_CONNECTIONMANAGER_H -#define BACKENDS_CLOUD_CURL_CONNECTIONMANAGER_H +#ifndef BACKENDS_NETWORKING_CURL_CONNECTIONMANAGER_H +#define BACKENDS_NETWORKING_CURL_CONNECTIONMANAGER_H #include "common/str.h" typedef void CURLM; -namespace Cloud { +namespace Networking { class NetworkReadStream; diff --git a/backends/cloud/curl/networkreadstream.cpp b/backends/networking/curl/networkreadstream.cpp index 8adac67569..5049ae507b 100644 --- a/backends/cloud/curl/networkreadstream.cpp +++ b/backends/networking/curl/networkreadstream.cpp @@ -22,15 +22,15 @@ #define FORBIDDEN_SYMBOL_ALLOW_ALL -#include "backends/cloud/curl/networkreadstream.h" +#include "backends/networking/curl/networkreadstream.h" #include "common/debug.h" #include <curl/curl.h> -namespace Cloud { +namespace Networking { static size_t curlDataCallback(char *d, size_t n, size_t l, void *p) { NetworkReadStream *stream = (NetworkReadStream *)p; - if (stream) return stream->dataCallback(d, n, l); + if (stream) return stream->write(d, n*l); return 0; } @@ -53,18 +53,13 @@ bool NetworkReadStream::eos() const { } uint32 NetworkReadStream::read(void *dataPtr, uint32 dataSize) { - uint32 available = _bytes.size(); + uint32 actuallyRead = MemoryReadWriteStream::read(dataPtr, dataSize); - if (available == 0) { + if (actuallyRead == 0) { if (_requestComplete) _eos = true; return 0; } - char *data = (char *)dataPtr; - uint32 actuallyRead = (dataSize < available ? dataSize : available); - for (uint32 i = 0; i < actuallyRead; ++i) data[i] = _bytes[i]; - data[actuallyRead] = 0; - _bytes.erase(0, actuallyRead); return actuallyRead; } @@ -72,12 +67,4 @@ void NetworkReadStream::done() { _requestComplete = true; } -size_t NetworkReadStream::dataCallback(char *d, size_t n, size_t l) { - //TODO: return CURL_WRITEFUNC_PAUSE if _bytes is too long - //TODO: remember https://curl.haxx.se/libcurl/c/curl_easy_pause.html (Memory Use / compressed data case) - //TODO: if using pause, don't forget to unpause it somehow from read() up there - _bytes += Common::String(d, n*l); - return n*l; -} - } //end of namespace Cloud diff --git a/backends/cloud/curl/networkreadstream.h b/backends/networking/curl/networkreadstream.h index e469784e28..9c7d8f83b6 100644 --- a/backends/cloud/curl/networkreadstream.h +++ b/backends/networking/curl/networkreadstream.h @@ -20,20 +20,20 @@ * */ -#ifndef BACKENDS_CLOUD_CURL_NETWORKREADSTREAM_H -#define BACKENDS_CLOUD_CURL_NETWORKREADSTREAM_H +#ifndef BACKENDS_NETWORKING_CURL_NETWORKREADSTREAM_H +#define BACKENDS_NETWORKING_CURL_NETWORKREADSTREAM_H +#include "common/memstream.h" #include "common/stream.h" #include "common/str.h" typedef void CURL; -namespace Cloud { +namespace Networking { -class NetworkReadStream: public Common::ReadStream { +class NetworkReadStream: public Common::MemoryReadWriteStream { CURL *_easy; bool _eos, _requestComplete; - Common::String _bytes; public: NetworkReadStream(const char *url); @@ -68,7 +68,6 @@ public: virtual uint32 read(void *dataPtr, uint32 dataSize); void done(); - size_t dataCallback(char *d, size_t n, size_t l); }; } //end of namespace Cloud |