From 74a22a60ada2362bc76d7053b52a80346b8590e5 Mon Sep 17 00:00:00 2001 From: vng Date: Tue, 5 Jun 2012 18:09:33 -0700 Subject: [downloader] Fix issue when url download failed. Use default server urls. --- platform/servers_list.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 platform/servers_list.cpp (limited to 'platform/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 & 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 & 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), () ); + } +} + +} -- cgit v1.2.3