summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Palange (Mani) <palange@lindenlab.com>2010-10-27 17:07:31 -0700
committerMark Palange (Mani) <palange@lindenlab.com>2010-10-27 17:07:31 -0700
commitbe8c9fc21758bcbc1d9f3d565b221310344231bd (patch)
tree86223d000d74005162529f8a75e5434a7e280906
parent34db27c26f9a5627b733cc8a04265afed68d199c (diff)
CHOP-122 Initializing Facade service in the viewer. Rev. by Brad.
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/app_settings/settings.xml35
-rw-r--r--indra/newview/llappviewer.cpp25
-rw-r--r--indra/newview/llappviewer.h11
-rw-r--r--indra/newview/lltranslate.cpp12
-rw-r--r--indra/viewer_components/updater/CMakeLists.txt10
-rw-r--r--indra/viewer_components/updater/llupdaterservice.cpp107
-rw-r--r--indra/viewer_components/updater/llupdaterservice.h19
-rw-r--r--indra/viewer_components/updater/tests/llupdaterservice_test.cpp195
9 files changed, 278 insertions, 138 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index bf885e5934..63982ba87b 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -64,6 +64,7 @@ include_directories(
${LSCRIPT_INCLUDE_DIRS}
${LSCRIPT_INCLUDE_DIRS}/lscript_compile
${LLLOGIN_INCLUDE_DIRS}
+ ${UPDATER_INCLUDE_DIRS}
)
set(viewer_SOURCE_FILES
@@ -1679,6 +1680,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${OPENSSL_LIBRARIES}
${CRYPTO_LIBRARIES}
${LLLOGIN_LIBRARIES}
+ ${UPDATER_LIBRARIES}
${GOOGLE_PERFTOOLS_LIBRARIES}
)
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 086d73bc00..371326c0f5 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10991,7 +10991,40 @@
<key>Value</key>
<integer>15</integer>
</map>
- <key>UploadBakedTexOld</key>
+ <key>UpdaterServiceActive</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable or disable the updater service.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>UpdaterServiceCheckPeriod</key>
+ <map>
+ <key>Comment</key>
+ <string>Default period between update checking.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>3600</integer>
+ </map>
+ <key>UpdaterServiceURL</key>
+ <map>
+ <key>Comment</key>
+ <string>Default location for the updater service.</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://secondlife.com/app/update</string>
+ </map>
+ <key>UploadBakedTexOld</key>
<map>
<key>Comment</key>
<string>Forces the baked texture pipeline to upload using the old method.</string>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 931b9fd2f3..e6feaae504 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -83,6 +83,7 @@
#include "llweb.h"
#include "llsecondlifeurls.h"
+#include "llupdaterservice.h"
// Linden library includes
#include "llavatarnamecache.h"
@@ -581,7 +582,8 @@ LLAppViewer::LLAppViewer() :
mAgentRegionLastAlive(false),
mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
mPeriodicSlowFrame(LLCachedControl<bool>(gSavedSettings,"Periodic Slow Frame", FALSE)),
- mFastTimerLogThread(NULL)
+ mFastTimerLogThread(NULL),
+ mUpdater(new LLUpdaterService())
{
if(NULL != sInstance)
{
@@ -630,6 +632,9 @@ bool LLAppViewer::init()
if (!initConfiguration())
return false;
+ // Initialize updater service
+ initUpdater();
+
// write Google Breakpad minidump files to our log directory
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
logdir += gDirUtilp->getDirDelimiter();
@@ -2324,6 +2329,24 @@ bool LLAppViewer::initConfiguration()
return true; // Config was successful.
}
+void LLAppViewer::initUpdater()
+{
+ // Initialize the updater service.
+ // Generate URL to the udpater service
+ // Get Channel
+ // Get Version
+ std::string url = gSavedSettings.getString("UpdaterServiceURL");
+ std::string channel = gSavedSettings.getString("VersionChannelName");
+ std::string version = LLVersionInfo::getVersion();
+ U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
+
+ mUpdater->setParams(url, channel, version);
+ mUpdater->setCheckPeriod(check_period);
+ if(gSavedSettings.getBOOL("UpdaterServiceActive"))
+ {
+ mUpdater->startChecking();
+ }
+}
void LLAppViewer::checkForCrash(void)
{
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index fdc3b9ef9e..ea44ade8c6 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -39,7 +39,7 @@ class LLTextureCache;
class LLImageDecodeThread;
class LLTextureFetch;
class LLWatchdogTimeout;
-class LLCommandLineParser;
+class LLUpdaterService;
struct apr_dso_handle_t;
@@ -186,7 +186,7 @@ private:
bool initThreads(); // Initialize viewer threads, return false on failure.
bool initConfiguration(); // Initialize settings from the command line/config file.
-
+ void initUpdater(); // Initialize the updater service.
bool initCache(); // Initialize local client cache.
@@ -260,7 +260,13 @@ private:
std::set<struct apr_dso_handle_t*> mPlugins;
+ boost::scoped_ptr<LLUpdaterService> mUpdater;
+
+ //---------------------------------------------
+ //*NOTE: Mani - legacy updater stuff
+ // Still useable?
public:
+
//some information for updater
typedef struct
{
@@ -270,6 +276,7 @@ public:
static LLUpdaterInfo *sUpdaterInfo ;
void launchUpdater();
+ //---------------------------------------------
};
// consts from viewer.h
diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index 050e34ade9..21467a2ab8 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -36,7 +36,7 @@
#include "llbufferstream.h"
#include "llui.h"
-#include "llversionviewer.h"
+#include "llversioninfo.h"
#include "llviewercontrol.h"
#include "jsoncpp/reader.h"
@@ -64,11 +64,11 @@ void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std
getTranslateUrl(url, from_lang, to_lang, mesg);
std::string user_agent = llformat("%s %d.%d.%d (%d)",
- LL_CHANNEL,
- LL_VERSION_MAJOR,
- LL_VERSION_MINOR,
- LL_VERSION_PATCH,
- LL_VERSION_BUILD );
+ LLVersionInfo::getChannel(),
+ LLVersionInfo::getMajor(),
+ LLVersionInfo::getMinor(),
+ LLVersionInfo::getPatch(),
+ LLVersionInfo::getBuild());
if (!m_Header.size())
{
diff --git a/indra/viewer_components/updater/CMakeLists.txt b/indra/viewer_components/updater/CMakeLists.txt
index df9404474c..a8a1d685f7 100644
--- a/indra/viewer_components/updater/CMakeLists.txt
+++ b/indra/viewer_components/updater/CMakeLists.txt
@@ -55,3 +55,13 @@ if(LL_TESTS)
LL_ADD_PROJECT_UNIT_TESTS(llupdaterservice "${llupdater_service_TEST_SOURCE_FILES}")
endif(LL_TESTS)
+
+set(UPDATER_INCLUDE_DIRS
+ ${LIBS_OPEN_DIR}/viewer_components/updater
+ CACHE INTERNAL ""
+)
+
+set(UPDATER_LIBRARIES
+ llupdaterservice
+ CACHE INTERNAL ""
+)
diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp
index 6c7619a2b9..28c942b5f2 100644
--- a/indra/viewer_components/updater/llupdaterservice.cpp
+++ b/indra/viewer_components/updater/llupdaterservice.cpp
@@ -27,18 +27,19 @@
#include "llupdaterservice.h"
-#include "llsingleton.h"
#include "llpluginprocessparent.h"
#include <boost/scoped_ptr.hpp>
+#include <boost/weak_ptr.hpp>
-class LLUpdaterServiceImpl : public LLPluginProcessParentOwner,
- public LLSingleton<LLUpdaterServiceImpl>
+boost::weak_ptr<LLUpdaterServiceImpl> gUpdater;
+
+class LLUpdaterServiceImpl : public LLPluginProcessParentOwner
{
std::string mUrl;
std::string mChannel;
std::string mVersion;
- unsigned int mUpdateCheckPeriod;
+ unsigned int mCheckPeriod;
bool mIsChecking;
boost::scoped_ptr<LLPluginProcessParent> mPlugin;
@@ -52,17 +53,20 @@ public:
virtual void pluginLaunchFailed();
virtual void pluginDied();
- void setURL(const std::string& url);
- void setChannel(const std::string& channel);
- void setVersion(const std::string& version);
- void setUpdateCheckPeriod(unsigned int seconds);
+ void setParams(const std::string& url,
+ const std::string& channel,
+ const std::string& version);
+
+ void setCheckPeriod(unsigned int seconds);
+
void startChecking();
void stopChecking();
+ bool isChecking();
};
LLUpdaterServiceImpl::LLUpdaterServiceImpl() :
mIsChecking(false),
- mUpdateCheckPeriod(0),
+ mCheckPeriod(0),
mPlugin(0)
{
// Create the plugin parent, this is the owner.
@@ -87,42 +91,35 @@ void LLUpdaterServiceImpl::pluginDied()
{
};
-void LLUpdaterServiceImpl::setURL(const std::string& url)
-{
- if(mUrl != url)
- {
- mUrl = url;
- }
-}
-
-void LLUpdaterServiceImpl::setChannel(const std::string& channel)
+void LLUpdaterServiceImpl::setParams(const std::string& url,
+ const std::string& channel,
+ const std::string& version)
{
- if(mChannel != channel)
- {
- mChannel = channel;
- }
-}
-
-void LLUpdaterServiceImpl::setVersion(const std::string& version)
-{
- if(mVersion != version)
+ if(mIsChecking)
{
- mVersion = version;
+ throw LLUpdaterService::UsageError("Call LLUpdaterService::stopCheck()"
+ " before setting params.");
}
+
+ mUrl = url;
+ mChannel = channel;
+ mVersion = version;
}
-void LLUpdaterServiceImpl::setUpdateCheckPeriod(unsigned int seconds)
+void LLUpdaterServiceImpl::setCheckPeriod(unsigned int seconds)
{
- if(mUpdateCheckPeriod != seconds)
- {
- mUpdateCheckPeriod = seconds;
- }
+ mCheckPeriod = seconds;
}
void LLUpdaterServiceImpl::startChecking()
{
if(!mIsChecking)
{
+ if(mUrl.empty() || mChannel.empty() || mVersion.empty())
+ {
+ throw LLUpdaterService::UsageError("Set params before call to "
+ "LLUpdaterService::startCheck().");
+ }
mIsChecking = true;
}
}
@@ -135,42 +132,54 @@ void LLUpdaterServiceImpl::stopChecking()
}
}
+bool LLUpdaterServiceImpl::isChecking()
+{
+ return mIsChecking;
+}
+
//-----------------------------------------------------------------------
// Facade interface
LLUpdaterService::LLUpdaterService()
{
+ if(gUpdater.expired())
+ {
+ mImpl =
+ boost::shared_ptr<LLUpdaterServiceImpl>(new LLUpdaterServiceImpl());
+ gUpdater = mImpl;
+ }
+ else
+ {
+ mImpl = gUpdater.lock();
+ }
}
LLUpdaterService::~LLUpdaterService()
{
}
-void LLUpdaterService::setURL(const std::string& url)
-{
- LLUpdaterServiceImpl::getInstance()->setURL(url);
-}
-
-void LLUpdaterService::setChannel(const std::string& channel)
+void LLUpdaterService::setParams(const std::string& url,
+ const std::string& chan,
+ const std::string& vers)
{
- LLUpdaterServiceImpl::getInstance()->setChannel(channel);
+ mImpl->setParams(url, chan, vers);
}
-void LLUpdaterService::setVersion(const std::string& version)
-{
- LLUpdaterServiceImpl::getInstance()->setVersion(version);
-}
-
-void LLUpdaterService::setUpdateCheckPeriod(unsigned int seconds)
+void LLUpdaterService::setCheckPeriod(unsigned int seconds)
{
- LLUpdaterServiceImpl::getInstance()->setUpdateCheckPeriod(seconds);
+ mImpl->setCheckPeriod(seconds);
}
void LLUpdaterService::startChecking()
{
- LLUpdaterServiceImpl::getInstance()->startChecking();
+ mImpl->startChecking();
}
void LLUpdaterService::stopChecking()
{
- LLUpdaterServiceImpl::getInstance()->stopChecking();
+ mImpl->stopChecking();
+}
+
+bool LLUpdaterService::isChecking()
+{
+ return mImpl->isChecking();
}
diff --git a/indra/viewer_components/updater/llupdaterservice.h b/indra/viewer_components/updater/llupdaterservice.h
index 33d0dc0816..6459ca49f8 100644
--- a/indra/viewer_components/updater/llupdaterservice.h
+++ b/indra/viewer_components/updater/llupdaterservice.h
@@ -26,11 +26,16 @@
#ifndef LL_UPDATERSERVICE_H
#define LL_UPDATERSERVICE_H
+#include <boost/shared_ptr.hpp>
+
+class LLUpdaterServiceImpl;
+
class LLUpdaterService
{
public:
class UsageError: public std::runtime_error
{
+ public:
UsageError(const std::string& msg) : std::runtime_error(msg) {}
};
@@ -39,14 +44,18 @@ public:
// The base URL.
// *NOTE:Mani The grid, if any, would be embedded in the base URL.
- void setURL(const std::string& url);
- void setChannel(const std::string& channel);
- void setVersion(const std::string& version);
-
- void setUpdateCheckPeriod(unsigned int seconds);
+ void setParams(const std::string& url,
+ const std::string& channel,
+ const std::string& version);
+
+ void setCheckPeriod(unsigned int seconds);
void startChecking();
void stopChecking();
+ bool isChecking();
+
+private:
+ boost::shared_ptr<LLUpdaterServiceImpl> mImpl;
};
#endif LL_UPDATERSERVICE_H
diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp
index 9edf15ba11..73cf6ea6eb 100644
--- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp
+++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp
@@ -1,50 +1,50 @@
-/**
- * @file llupdaterservice_test.cpp
- * @brief Tests of 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$
- */
-
-// Precompiled header
-#include "linden_common.h"
-// associated header
-#include "../llupdaterservice.h"
-
-#include "../../../test/lltut.h"
-//#define DEBUG_ON
-#include "../../../test/debug.h"
-
-#include "llevents.h"
-#include "llpluginprocessparent.h"
-
-/*****************************************************************************
-* MOCK'd
-*****************************************************************************/
-LLPluginProcessParentOwner::~LLPluginProcessParentOwner() {}
-LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner)
-: mOwner(owner),
- mIncomingQueueMutex(NULL)
-{
-}
+/**
+ * @file llupdaterservice_test.cpp
+ * @brief Tests of 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$
+ */
+
+// Precompiled header
+#include "linden_common.h"
+// associated header
+#include "../llupdaterservice.h"
+
+#include "../../../test/lltut.h"
+//#define DEBUG_ON
+#include "../../../test/debug.h"
+
+#include "llevents.h"
+#include "llpluginprocessparent.h"
+
+/*****************************************************************************
+* MOCK'd
+*****************************************************************************/
+LLPluginProcessParentOwner::~LLPluginProcessParentOwner() {}
+LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner)
+: mOwner(owner),
+ mIncomingQueueMutex(gAPRPoolp)
+{
+}
LLPluginProcessParent::~LLPluginProcessParent() {}
LLPluginMessagePipeOwner::LLPluginMessagePipeOwner(){}
@@ -52,30 +52,77 @@ LLPluginMessagePipeOwner::~LLPluginMessagePipeOwner(){}
void LLPluginProcessParent::receiveMessageRaw(const std::string &message) {}
int LLPluginMessagePipeOwner::socketError(int) { return 0; }
void LLPluginProcessParent::setMessagePipe(LLPluginMessagePipe *message_pipe) {}
-void LLPluginMessagePipeOwner::setMessagePipe(class LLPluginMessagePipe *) {}
-LLPluginMessage::~LLPluginMessage() {}
-
-/*****************************************************************************
-* TUT
-*****************************************************************************/
-namespace tut
-{
- struct llupdaterservice_data
- {
- llupdaterservice_data() :
- pumps(LLEventPumps::instance())
- {}
- LLEventPumps& pumps;
- };
-
- typedef test_group<llupdaterservice_data> llupdaterservice_group;
- typedef llupdaterservice_group::object llupdaterservice_object;
- llupdaterservice_group llupdaterservicegrp("LLUpdaterService");
-
- template<> template<>
- void llupdaterservice_object::test<1>()
- {
- DEBUG;
- ensure_equals("Dummy", 0, 0);
- }
-}
+void LLPluginMessagePipeOwner::setMessagePipe(class LLPluginMessagePipe *) {}
+LLPluginMessage::~LLPluginMessage() {}
+
+/*****************************************************************************
+* TUT
+*****************************************************************************/
+namespace tut
+{
+ struct llupdaterservice_data
+ {
+ llupdaterservice_data() :
+ pumps(LLEventPumps::instance()),
+ test_url("dummy_url"),
+ test_channel("dummy_channel"),
+ test_version("dummy_version")
+ {}
+ LLEventPumps& pumps;
+ std::string test_url;
+ std::string test_channel;
+ std::string test_version;
+ };
+
+ typedef test_group<llupdaterservice_data> llupdaterservice_group;
+ typedef llupdaterservice_group::object llupdaterservice_object;
+ llupdaterservice_group llupdaterservicegrp("LLUpdaterService");
+
+ template<> template<>
+ void llupdaterservice_object::test<1>()
+ {
+ DEBUG;
+ LLUpdaterService updater;
+ bool got_usage_error = false;
+ try
+ {
+ updater.startChecking();
+ }
+ catch(LLUpdaterService::UsageError)
+ {
+ got_usage_error = true;
+ }
+ ensure("Caught start before params", got_usage_error);
+ }
+
+ template<> template<>
+ void llupdaterservice_object::test<2>()
+ {
+ DEBUG;
+ LLUpdaterService updater;
+ bool got_usage_error = false;
+ try
+ {
+ updater.setParams(test_url, test_channel, test_version);
+ updater.startChecking();
+ updater.setParams("other_url", test_channel, test_version);
+ }
+ catch(LLUpdaterService::UsageError)
+ {
+ got_usage_error = true;
+ }
+ ensure("Caught params while running", got_usage_error);
+ }
+
+ template<> template<>
+ void llupdaterservice_object::test<3>()
+ {
+ DEBUG;
+ LLUpdaterService updater;
+ updater.setParams(test_url, test_channel, test_version);
+ updater.startChecking();
+ ensure(updater.isChecking());
+ updater.stopChecking();
+ ensure(!updater.isChecking());
+ }
+}