Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Zolotarev <deathbaba@gmail.com>2011-11-05 22:40:33 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:27:27 +0300
commit2eedf7245c2313e4e237083c672e5a234d44a61b (patch)
treec89c3f0e14e1e37af27c74504be5dee40265c805 /platform/http_request.cpp
parente7d43983e8399ef9f95476fa0e99026f9be8a001 (diff)
[mac][downloader] Added but not activated new implementation, still without chunks
Diffstat (limited to 'platform/http_request.cpp')
-rw-r--r--platform/http_request.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/platform/http_request.cpp b/platform/http_request.cpp
new file mode 100644
index 0000000000..6cef569e61
--- /dev/null
+++ b/platform/http_request.cpp
@@ -0,0 +1,68 @@
+#include "http_request.hpp"
+
+#ifdef DEBUG
+ #include "../base/thread.hpp"
+#endif
+
+#include "../coding/writer.hpp"
+
+namespace downloader
+{
+
+/// @return 0 if creation failed
+HttpRequestImpl * CreateNativeHttpRequest(string const & url,
+ IHttpRequestImplCallback & callback,
+ int64_t begRange = 0,
+ int64_t endRange = -1,
+ string const & postBody = string());
+void DeleteNativeHttpRequest(HttpRequestImpl * request);
+
+
+HttpRequest::HttpRequest(Writer & writer, CallbackT onFinish, CallbackT onProgress)
+ : m_status(EInProgress), m_progress(make_pair(-1, -1)), m_writer(writer),
+ m_onFinish(onFinish), m_onProgress(onProgress)
+{
+}
+
+HttpRequest::~HttpRequest()
+{
+ for (ThreadsContainerT::iterator it = m_threads.begin(); it != m_threads.end(); ++it)
+ DeleteNativeHttpRequest(*it);
+}
+
+void HttpRequest::OnWrite(int64_t offset, void const * buffer, size_t size)
+{
+#ifdef DEBUG
+ static threads::ThreadID id = threads::GetCurrentThreadID();
+ ASSERT_EQUAL(id, threads::GetCurrentThreadID(), ("OnWrite called from different threads"));
+#endif
+ m_writer.Seek(offset);
+ m_writer.Write(buffer, size);
+ m_progress.first += size;
+ if (m_onProgress)
+ m_onProgress(*this);
+}
+
+void HttpRequest::OnFinish(long httpCode, int64_t begRange, int64_t endRange)
+{
+ m_status = (httpCode == 200) ? ECompleted : EFailed;
+ ASSERT(m_onFinish, ());
+ m_onFinish(*this);
+}
+
+HttpRequest * HttpRequest::Get(string const & url, Writer & writer, CallbackT onFinish, CallbackT onProgress)
+{
+ HttpRequest * self = new HttpRequest(writer, onFinish, onProgress);
+ self->m_threads.push_back(CreateNativeHttpRequest(url, *self));
+ return self;
+}
+
+HttpRequest * HttpRequest::Post(string const & url, Writer & writer, string const & postData,
+ CallbackT onFinish, CallbackT onProgress)
+{
+ HttpRequest * self = new HttpRequest(writer, onFinish, onProgress);
+ self->m_threads.push_back(CreateNativeHttpRequest(url, *self, 0, -1, postData));
+ return self;
+}
+
+}