aboutsummaryrefslogtreecommitdiff
path: root/backends/cloud/dropbox
diff options
context:
space:
mode:
authorAlexander Tkachev2016-05-15 11:22:35 +0600
committerAlexander Tkachev2016-08-24 16:07:55 +0600
commit01abba4f1dc9febbe99a4af6af19eb2afa3f618a (patch)
tree0830cf92497be6e5e20be69a1c40b70c418600be /backends/cloud/dropbox
parent8b585d631b21441dfa3de69d2c7c848d172c73be (diff)
downloadscummvm-rg350-01abba4f1dc9febbe99a4af6af19eb2afa3f618a.tar.gz
scummvm-rg350-01abba4f1dc9febbe99a4af6af19eb2afa3f618a.tar.bz2
scummvm-rg350-01abba4f1dc9febbe99a4af6af19eb2afa3f618a.zip
CLOUD: Add ConnectionManager and NetworkReadStream
NetworkReadStream actually saves whole response in the memory now. There is a pause mechanism in libcurl, but if libcurl is requesting something compressed, it would have to uncompress data as it goes even if we paused the request. Even though our own stream won't be notified about this data when when "pause" the request, libcurl's own buffer wound be expanding.
Diffstat (limited to 'backends/cloud/dropbox')
-rw-r--r--backends/cloud/dropbox/curlrequest.cpp42
-rw-r--r--backends/cloud/dropbox/curlrequest.h13
-rw-r--r--backends/cloud/dropbox/dropboxstorage.cpp2
3 files changed, 20 insertions, 37 deletions
diff --git a/backends/cloud/dropbox/curlrequest.cpp b/backends/cloud/dropbox/curlrequest.cpp
index 216b56c19e..1dfdd9e25f 100644
--- a/backends/cloud/dropbox/curlrequest.cpp
+++ b/backends/cloud/dropbox/curlrequest.cpp
@@ -23,55 +23,37 @@
#define FORBIDDEN_SYMBOL_ALLOW_ALL
#include "backends/cloud/dropbox/curlrequest.h"
+#include "backends/cloud/curl/networkreadstream.h"
#include "common/debug.h"
#include <curl/curl.h>
namespace Cloud {
namespace Dropbox {
-static size_t curlDataCallback(char *d, size_t n, size_t l, void *p) {
- debug("%p got %d more bytes", p, n * l);
- return n * l;
-}
-
-CurlRequest::CurlRequest(Callback cb, char *url) : Request(cb), _firstTime(true) {
- _curlm = curl_multi_init();
+CurlRequest::CurlRequest(Callback cb, const char *url) : Request(cb), _firstTime(true), _stream(0) {
_url = url;
}
CurlRequest::~CurlRequest() {
- curl_multi_cleanup(_curlm);
+ if (_stream) delete _stream;
}
-bool CurlRequest::handle() {
+bool CurlRequest::handle(ConnectionManager& manager) {
if (_firstTime) {
- CURL *eh = curl_easy_init();
- curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, curlDataCallback);
- curl_easy_setopt(eh, CURLOPT_WRITEDATA, this);
- curl_easy_setopt(eh, CURLOPT_HEADER, 0L);
- curl_easy_setopt(eh, CURLOPT_URL, _url);
- curl_easy_setopt(eh, CURLOPT_VERBOSE, 0L);
- curl_multi_add_handle(_curlm, eh);
-
+ _stream = manager.makeRequest(_url);
_firstTime = false;
}
- int U;
- curl_multi_perform(_curlm, &U);
-
- int Q;
- CURLMsg *_curlMsg;
- while ((_curlMsg = curl_multi_info_read(_curlm, &Q))) {
- if (_curlMsg->msg == CURLMSG_DONE) {
- CURL *e = _curlMsg->easy_handle;
- debug("R: %d - %s\n", _curlMsg->data.result, curl_easy_strerror(_curlMsg->data.result));
- curl_multi_remove_handle(_curlm, e);
- curl_easy_cleanup(e);
+ if (_stream) {
+ const int kBufSize = 10000;
+ char buf[kBufSize+1];
+ uint32 readBytes = _stream->read(buf, kBufSize);
+ debug("%d", readBytes);
+ //if(readBytes != 0) debug("%s", buf);
+ if(_stream->eos()) {
_callback(0);
return true;
- } else {
- debug("E: CURLMsg (%d)\n", _curlMsg->msg);
}
}
diff --git a/backends/cloud/dropbox/curlrequest.h b/backends/cloud/dropbox/curlrequest.h
index 8453fbb90a..2c8ab6b8f8 100644
--- a/backends/cloud/dropbox/curlrequest.h
+++ b/backends/cloud/dropbox/curlrequest.h
@@ -25,21 +25,22 @@
#include "backends/cloud/request.h"
-typedef void CURLM;
-
namespace Cloud {
+
+class NetworkReadStream;
+
namespace Dropbox {
class CurlRequest : public Cloud::Request {
bool _firstTime;
- CURLM *_curlm;
- char *_url;
+ const char *_url;
+ NetworkReadStream *_stream;
public:
- CurlRequest(Callback cb, char *url);
+ CurlRequest(Callback cb, const char *url);
virtual ~CurlRequest();
- virtual bool handle();
+ virtual bool handle(ConnectionManager& manager);
};
} //end of namespace Dropbox
diff --git a/backends/cloud/dropbox/dropboxstorage.cpp b/backends/cloud/dropbox/dropboxstorage.cpp
index 142a059457..9298cde0a1 100644
--- a/backends/cloud/dropbox/dropboxstorage.cpp
+++ b/backends/cloud/dropbox/dropboxstorage.cpp
@@ -47,7 +47,7 @@ void DropboxStorage::listDirectory(Common::String path) {
void DropboxStorage::syncSaves() {
addRequest(new CurlRequest(curlCallback, "tkachov.ru"));
- addRequest(new CurlRequest(curlCallback, "bash.im"));
+ addRequest(new CurlRequest(curlCallback, "scummvm.org"));
}
} //end of namespace Dropbox