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:
authorvng <viktor.govako@gmail.com>2012-06-06 05:09:33 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:39:30 +0300
commit74a22a60ada2362bc76d7053b52a80346b8590e5 (patch)
tree82f4d0664e5f4c13fcf6dcb85d847f9cd15db8fc /platform
parent98efcc314a8b5f1345a58615843f905c4135a39c (diff)
[downloader] Fix issue when url download failed. Use default server urls.
Diffstat (limited to 'platform')
-rw-r--r--platform/chunks_download_strategy.hpp3
-rw-r--r--platform/http_request.cpp33
-rw-r--r--platform/http_request.hpp2
-rw-r--r--platform/platform.cpp16
-rw-r--r--platform/platform.hpp16
-rw-r--r--platform/platform.pro5
-rw-r--r--platform/servers_list.cpp54
-rw-r--r--platform/servers_list.hpp12
8 files changed, 93 insertions, 48 deletions
diff --git a/platform/chunks_download_strategy.hpp b/platform/chunks_download_strategy.hpp
index 07a7fbefad..d6ab853941 100644
--- a/platform/chunks_download_strategy.hpp
+++ b/platform/chunks_download_strategy.hpp
@@ -3,9 +3,8 @@
#include "../std/string.hpp"
#include "../std/vector.hpp"
#include "../std/utility.hpp"
-#include "../std/set.hpp"
#include "../std/stdint.hpp"
-#include "../std/cstdio.hpp"
+
namespace downloader
{
diff --git a/platform/http_request.cpp b/platform/http_request.cpp
index 2ce8fdb720..dd68ee3bf7 100644
--- a/platform/http_request.cpp
+++ b/platform/http_request.cpp
@@ -8,16 +8,12 @@
#include "../base/thread.hpp"
#endif
-#include "../base/std_serialization.hpp"
-#include "../base/logging.hpp"
-
-#include "../coding/file_writer_stream.hpp"
-#include "../coding/file_reader_stream.hpp"
#include "../coding/internal/file_data.hpp"
+#include "../coding/file_writer.hpp"
-#include "../std/scoped_ptr.hpp"
+#include "../base/logging.hpp"
-#include "../3party/jansson/myjansson.hpp"
+#include "../std/scoped_ptr.hpp"
#ifdef OMIM_OS_IPHONE
@@ -169,6 +165,8 @@ class FileHttpRequest : public HttpRequest, public IHttpThreadCallback
if (m_onProgress)
m_onProgress(*this);
}
+ else
+ LOG(LWARNING, (m_filePath, "HttpRequest error:", httpCode));
ChunksDownloadStrategy::ResultT const result = StartThreads();
@@ -281,25 +279,4 @@ HttpRequest * HttpRequest::GetFile(vector<string> const & urls, string const & f
return new FileHttpRequest(urls, filePath, fileSize, onFinish, onProgress, chunkSize, doCleanProgressFiles);
}
-bool ParseServerList(string const & jsonStr, vector<string> & outUrls)
-{
- outUrls.clear();
- try
- {
- my::Json root(jsonStr.c_str());
- for (size_t i = 0; i < json_array_size(root); ++i)
- {
- char const * url = json_string_value(json_array_get(root, i));
- if (url)
- outUrls.push_back(url);
- }
- }
- catch (std::exception const & e)
- {
- LOG(LERROR, ("Can't parse server list json", e.what(), jsonStr));
- }
- return !outUrls.empty();
-}
-
-
} // namespace downloader
diff --git a/platform/http_request.hpp b/platform/http_request.hpp
index 41ded14c91..8f03e033cc 100644
--- a/platform/http_request.hpp
+++ b/platform/http_request.hpp
@@ -56,6 +56,4 @@ public:
bool doCleanProgressFiles = true);
};
-bool ParseServerList(string const & jsonStr, vector<string> & outUrls);
-
} // namespace downloader
diff --git a/platform/platform.cpp b/platform/platform.cpp
index 8c6ea64a17..732a2be967 100644
--- a/platform/platform.cpp
+++ b/platform/platform.cpp
@@ -3,6 +3,7 @@
#include "../coding/sha2.hpp"
#include "../coding/base64.hpp"
+
string Platform::ReadPathForFile(string const & file) const
{
string fullPath = m_writableDir + file;
@@ -28,3 +29,18 @@ string Platform::HashUniqueID(string const & s)
return base64::encode(xoredHash);
}
+string Platform::MetaServerUrl() const
+{
+ if (IsFeatureSupported("search"))
+ return "http://active.servers.url";
+ else
+ return "http://active.servers.url";
+}
+
+string Platform::DefaultUrlsJSON() const
+{
+ if (IsFeatureSupported("search"))
+ return "[\"http://1st.default.server/\",\"http://2nd.default.server/\",\"http://3rd.default.server/\"]";
+ else
+ return "[\"http://1st.default.server/\",\"http://2nd.default.server/\",\"http://3rd.default.server/\"]";
+}
diff --git a/platform/platform.hpp b/platform/platform.hpp
index 0aff0867a7..cc94a804b3 100644
--- a/platform/platform.hpp
+++ b/platform/platform.hpp
@@ -119,22 +119,10 @@ public:
/// @return url for clients to download maps
/// Different urls are returned for versions with and without search support
- inline string MetaServerUrl() const
- {
- if (IsFeatureSupported("search"))
- return "http://active.servers.url";
- else
- return "http://active.servers.url";
- }
+ string MetaServerUrl() const;
/// @return JSON-encoded list of urls if metaserver is unreachable
- inline string DefaultUrlsJSON() const
- {
- if (IsFeatureSupported("search"))
- return "[\"http://1st.default.server/\",\"http://2nd.default.server/\",\"http://3rd.default.server/\"]";
- else
- return "[\"http://1st.default.server/\",\"http://2nd.default.server/\",\"http://3rd.default.server/\"]";
- }
+ string DefaultUrlsJSON() const;
};
extern "C" Platform & GetPlatform();
diff --git a/platform/platform.pro b/platform/platform.pro
index 65ad281b70..b378a653e8 100644
--- a/platform/platform.pro
+++ b/platform/platform.pro
@@ -60,6 +60,7 @@ HEADERS += \
http_request.hpp \
http_thread_callback.hpp \
chunks_download_strategy.hpp \
+ servers_list.hpp \
SOURCES += \
preferred_languages.cpp \
@@ -67,5 +68,5 @@ SOURCES += \
video_timer.cpp \
http_request.cpp \
chunks_download_strategy.cpp \
- platform.cpp
-
+ platform.cpp \
+ servers_list.cpp \
diff --git a/platform/servers_list.cpp b/platform/servers_list.cpp
new file mode 100644
index 0000000000..44d326c536
--- /dev/null
+++ b/platform/servers_list.cpp
@@ -0,0 +1,54 @@
+#include "servers_list.hpp"
+#include "http_request.hpp"
+#include "settings.hpp"
+#include "platform.hpp"
+
+#include "../base/logging.hpp"
+#include "../base/assert.hpp"
+
+#include "../3party/jansson/myjansson.hpp"
+
+
+#define SETTINGS_SERVERS_KEY "LastBaseUrls"
+
+
+namespace downloader
+{
+
+bool ParseServerList(string const & jsonStr, vector<string> & outUrls)
+{
+ outUrls.clear();
+ try
+ {
+ my::Json root(jsonStr.c_str());
+ for (size_t i = 0; i < json_array_size(root); ++i)
+ {
+ char const * url = json_string_value(json_array_get(root, i));
+ if (url)
+ outUrls.push_back(url);
+ }
+ }
+ catch (std::exception const & e)
+ {
+ LOG(LERROR, ("Can't parse server list json", e.what(), jsonStr));
+ }
+ return !outUrls.empty();
+}
+
+void GetServerListFromRequest(HttpRequest const & request, vector<string> & urls)
+{
+ if (request.Status() == HttpRequest::ECompleted &&
+ ParseServerList(request.Data(), urls))
+ {
+ Settings::Set(SETTINGS_SERVERS_KEY, request.Data());
+ }
+ else
+ {
+ string serverList;
+ if (!Settings::Get(SETTINGS_SERVERS_KEY, serverList))
+ serverList = GetPlatform().DefaultUrlsJSON();
+ VERIFY ( ParseServerList(serverList, urls), () );
+ }
+}
+
+}
diff --git a/platform/servers_list.hpp b/platform/servers_list.hpp
new file mode 100644
index 0000000000..a71e364977
--- /dev/null
+++ b/platform/servers_list.hpp
@@ -0,0 +1,12 @@
+#pragma once
+
+#include "../std/vector.hpp"
+#include "../std/string.hpp"
+
+
+namespace downloader
+{
+ class HttpRequest;
+
+ void GetServerListFromRequest(HttpRequest const & request, vector<string> & urls);
+}