summaryrefslogtreecommitdiff
path: root/indra/viewer_components/updater/llupdatechecker.cpp
diff options
context:
space:
mode:
authorAndrew A. de Laix <alain@lindenlab.com>2010-10-28 16:47:05 -0700
committerAndrew A. de Laix <alain@lindenlab.com>2010-10-28 16:47:05 -0700
commitca9594af28ce2e1cc8bb333a0fa7384dae718a9a (patch)
tree891efdede6e6f46f6f0d3999f4b7c692431c328c /indra/viewer_components/updater/llupdatechecker.cpp
parentbe8c9fc21758bcbc1d9f3d565b221310344231bd (diff)
shell of the update checker; it will just print a message to the log depending on the result of the check one time.
Diffstat (limited to 'indra/viewer_components/updater/llupdatechecker.cpp')
-rw-r--r--indra/viewer_components/updater/llupdatechecker.cpp131
1 files changed, 131 insertions, 0 deletions
diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp
new file mode 100644
index 0000000000..a19b8be607
--- /dev/null
+++ b/indra/viewer_components/updater/llupdatechecker.cpp
@@ -0,0 +1,131 @@
+/**
+ * @file llupdaterservice.cpp
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+#include <boost/format.hpp>
+#include "llhttpclient.h"
+#include "llupdatechecker.h"
+
+
+class LLUpdateChecker::Implementation:
+ public LLHTTPClient::Responder
+{
+public:
+
+ Implementation(Client & client);
+ void check(std::string const & host, std::string channel, std::string version);
+
+ // Responder:
+ virtual void completed(U32 status,
+ const std::string & reason,
+ const LLSD& content);
+ virtual void error(U32 status, const std::string & reason);
+
+private:
+ std::string buildUrl(std::string const & host, std::string channel, std::string version);
+
+ Client & mClient;
+ LLHTTPClient mHttpClient;
+ bool mInProgress;
+ std::string mVersion;
+
+ LOG_CLASS(LLUpdateChecker::Implementation);
+};
+
+
+
+// LLUpdateChecker
+//-----------------------------------------------------------------------------
+
+
+LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client):
+ mImplementation(new LLUpdateChecker::Implementation(client))
+{
+ ; // No op.
+}
+
+
+void LLUpdateChecker::check(std::string const & host, std::string channel, std::string version)
+{
+ mImplementation->check(host, channel, version);
+}
+
+
+
+// LLUpdateChecker::Implementation
+//-----------------------------------------------------------------------------
+
+
+LLUpdateChecker::Implementation::Implementation(LLUpdateChecker::Client & client):
+ mClient(client),
+ mInProgress(false)
+{
+ ; // No op.
+}
+
+
+void LLUpdateChecker::Implementation::check(std::string const & host, std::string channel, std::string version)
+{
+ llassert(!mInProgress);
+
+ mInProgress = true;
+ mVersion = version;
+ std::string checkUrl = buildUrl(host, channel, version);
+ LL_INFOS("UpdateCheck") << "checking for updates at " << checkUrl << llendl;
+ mHttpClient.get(checkUrl, this);
+}
+
+void LLUpdateChecker::Implementation::completed(U32 status,
+ const std::string & reason,
+ const LLSD & content)
+{
+ mInProgress = false;
+
+ if(status != 200) {
+ LL_WARNS("UpdateCheck") << "html error " << status << " (" << reason << ")" << llendl;
+ } else if(!content["valid"].asBoolean()) {
+ LL_INFOS("UpdateCheck") << "version invalid" << llendl;
+ } else if(content["latest_version"].asString() != mVersion) {
+ LL_INFOS("UpdateCheck") << "newer version " << content["latest_version"].asString() << " available" << llendl;
+ } else {
+ LL_INFOS("UpdateCheck") << "up to date" << llendl;
+ }
+}
+
+
+void LLUpdateChecker::Implementation::error(U32 status, const std::string & reason)
+{
+ mInProgress = false;
+ LL_WARNS("UpdateCheck") << "update check failed; " << reason << llendl;
+}
+
+
+std::string LLUpdateChecker::Implementation::buildUrl(std::string const & host, std::string channel, std::string version)
+{
+ static boost::format urlFormat("%s/version/%s/%s");
+ urlFormat % host % channel % version;
+ return urlFormat.str();
+}
+