summaryrefslogtreecommitdiff
path: root/indra/viewer_components/updater/llupdatechecker.cpp
diff options
context:
space:
mode:
authorAndrew A. de Laix <alain@lindenlab.com>2010-11-04 14:08:38 -0700
committerAndrew A. de Laix <alain@lindenlab.com>2010-11-04 14:08:38 -0700
commit070fe9ed262da5c990a5129474489647a0369fc9 (patch)
treea7fdd231cc6e84065152048bc5671d428706d801 /indra/viewer_components/updater/llupdatechecker.cpp
parente0c734a7105060740e5597d4439d882bb3f2bff4 (diff)
parentdfeb7abe5f690bbd3a908c84c53bbea20a5adb7c (diff)
Automated merge with https://bitbucket.org/mani_linden/viewer-development/
Diffstat (limited to 'indra/viewer_components/updater/llupdatechecker.cpp')
-rw-r--r--indra/viewer_components/updater/llupdatechecker.cpp60
1 files changed, 41 insertions, 19 deletions
diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp
index 331d0269d4..2c60636122 100644
--- a/indra/viewer_components/updater/llupdatechecker.cpp
+++ b/indra/viewer_components/updater/llupdatechecker.cpp
@@ -41,7 +41,8 @@ public:
Implementation(Client & client);
~Implementation();
- void check(std::string const & host, std::string channel, std::string version);
+ void check(std::string const & protocolVersion, std::string const & hostUrl,
+ std::string const & servicePath, std::string channel, std::string version);
// Responder:
virtual void completed(U32 status,
@@ -50,12 +51,13 @@ public:
virtual void error(U32 status, const std::string & reason);
private:
- std::string buildUrl(std::string const & host, std::string channel, std::string version);
+ std::string buildUrl(std::string const & protocolVersion, std::string const & hostUrl,
+ std::string const & servicePath, std::string channel, std::string version);
Client & mClient;
LLHTTPClient mHttpClient;
bool mInProgress;
- LLHTTPClient::ResponderPtr mMe;
+ LLHTTPClient::ResponderPtr mMe;
std::string mVersion;
LOG_CLASS(LLUpdateChecker::Implementation);
@@ -74,9 +76,10 @@ LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client):
}
-void LLUpdateChecker::check(std::string const & host, std::string channel, std::string version)
+void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl,
+ std::string const & servicePath, std::string channel, std::string version)
{
- mImplementation->check(host, channel, version);
+ mImplementation->check(protocolVersion, hostUrl, servicePath, channel, version);
}
@@ -100,14 +103,20 @@ LLUpdateChecker::Implementation::~Implementation()
}
-void LLUpdateChecker::Implementation::check(std::string const & host, std::string channel, std::string version)
+void LLUpdateChecker::Implementation::check(std::string const & protocolVersion, std::string const & hostUrl,
+ std::string const & servicePath, std::string channel, std::string version)
{
// llassert(!mInProgress);
mInProgress = true;
mVersion = version;
- std::string checkUrl = buildUrl(host, channel, version);
+ std::string checkUrl = buildUrl(protocolVersion, hostUrl, servicePath, channel, version);
LL_INFOS("UpdateCheck") << "checking for updates at " << checkUrl << llendl;
+
+ // The HTTP client will wrap a raw pointer in a boost::intrusive_ptr causing the
+ // passed object to be silently and automatically deleted. We pass a self-
+ // referential intrusive pointer stored as an attribute of this class to keep
+ // the client from deletig the update checker implementation instance.
mHttpClient.get(checkUrl, mMe);
}
@@ -115,20 +124,22 @@ void LLUpdateChecker::Implementation::completed(U32 status,
const std::string & reason,
const LLSD & content)
{
- mInProgress = false;
+ mInProgress = false;
if(status != 200) {
LL_WARNS("UpdateCheck") << "html error " << status << " (" << reason << ")" << llendl;
mClient.error(reason);
- } else if(!content["valid"].asBoolean()) {
- LL_INFOS("UpdateCheck") << "version invalid" << llendl;
- mClient.requiredUpdate(content["latest_version"].asString());
- } else if(content["latest_version"].asString() != mVersion) {
- LL_INFOS("UpdateCheck") << "newer version " << content["latest_version"].asString() << " available" << llendl;
- mClient.optionalUpdate(content["latest_version"].asString());
- } else {
+ } else if(!content.asBoolean()) {
LL_INFOS("UpdateCheck") << "up to date" << llendl;
mClient.upToDate();
+ } else if(content["required"].asBoolean()) {
+ LL_INFOS("UpdateCheck") << "version invalid" << llendl;
+ LLURI uri(content["url"].asString());
+ mClient.requiredUpdate(content["version"].asString(), uri);
+ } else {
+ LL_INFOS("UpdateCheck") << "newer version " << content["version"].asString() << " available" << llendl;
+ LLURI uri(content["url"].asString());
+ mClient.optionalUpdate(content["version"].asString(), uri);
}
}
@@ -137,15 +148,26 @@ void LLUpdateChecker::Implementation::error(U32 status, const std::string & reas
{
mInProgress = false;
LL_WARNS("UpdateCheck") << "update check failed; " << reason << llendl;
+ mClient.error(reason);
}
-std::string LLUpdateChecker::Implementation::buildUrl(std::string const & host, std::string channel, std::string version)
+std::string LLUpdateChecker::Implementation::buildUrl(std::string const & protocolVersion, std::string const & hostUrl,
+ std::string const & servicePath, std::string channel, std::string version)
{
+#ifdef LL_WINDOWS
+ static const char * platform = "win";
+#elif LL_DARWIN
+ static const char * platform = "mac";
+#else
+ static const char * platform = "lnx";
+#endif
+
LLSD path;
- path.append("version");
+ path.append(servicePath);
+ path.append(protocolVersion);
path.append(channel);
path.append(version);
- return LLURI::buildHTTP(host, path).asString();
+ path.append(platform);
+ return LLURI::buildHTTP(hostUrl, path).asString();
}
-