merge changes for CHOP-963

meow-7.2.2
Oz Linden 2013-07-15 16:27:22 -04:00
commit 2192a024ac
12 changed files with 149 additions and 58 deletions

View File

@ -108,6 +108,16 @@
<string>CmdLineGridChoice</string>
</map>
<key>update-service</key>
<map>
<key>desc</key>
<string>Override the url base for the update query.</string>
<key>count</key>
<integer>1</integer>
<key>map-to</key>
<string>CmdLineUpdateService</string>
</map>
<key>help</key>
<map>
<key>desc</key>

View File

@ -1760,6 +1760,17 @@
<key>Value</key>
<string />
</map>
<key>CmdLineUpdateService</key>
<map>
<key>Comment</key>
<string>Override the url base for the update query.</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string />
</map>
<key>CmdLineHelperURI</key>
<map>
<key>Comment</key>

View File

@ -3048,13 +3048,19 @@ namespace {
void LLAppViewer::initUpdater()
{
// Initialize the updater service.
// Generate URL to the udpater service
// Get Channel
// Get Version
std::string url = gSavedSettings.getString("UpdaterServiceURL");
/*****************************************************************
* Previously, the url was derived from the settings
* UpdaterServiceURL
* UpdaterServicePath
* it is now obtained from the grid manager. The settings above
* are no longer used.
*****************************************************************/
std::string channel = LLVersionInfo::getChannel();
std::string version = LLVersionInfo::getVersion();
std::string service_path = gSavedSettings.getString("UpdaterServicePath");
U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
bool willing_to_test;
LL_DEBUGS("UpdaterService") << "channel " << channel << LL_ENDL;
@ -3079,9 +3085,7 @@ void LLAppViewer::initUpdater()
}
mUpdater->setAppExitCallback(boost::bind(&LLAppViewer::forceQuit, this));
mUpdater->initialize(url,
service_path,
channel,
mUpdater->initialize(channel,
version,
gPlatform,
getOSInfo().getOSVersionString(),

View File

@ -43,6 +43,8 @@ const std::string GRID_LABEL_VALUE = "label";
const std::string GRID_ID_VALUE = "grid_login_id";
/// the url for the login cgi script
const std::string GRID_LOGIN_URI_VALUE = "login_uri";
/// url base for update queries
const std::string GRID_UPDATE_SERVICE_URL = "update_query_url_base";
///
const std::string GRID_HELPER_URI_VALUE = "helper_uri";
/// the splash page url
@ -63,6 +65,8 @@ const std::string DEFAULT_LOGIN_PAGE = "http://viewer-login.agni.lindenlab.com/"
const std::string MAIN_GRID_LOGIN_URI = "https://login.agni.lindenlab.com/cgi-bin/login.cgi";
const std::string SL_UPDATE_QUERY_URL = "https://update.secondlife.com/update";
const std::string MAIN_GRID_SLURL_BASE = "http://maps.secondlife.com/secondlife/";
const std::string SYSTEM_GRID_APP_SLURL_BASE = "secondlife:///app";
@ -120,12 +124,14 @@ void LLGridManager::initialize(const std::string& grid_file)
MAIN_GRID_LOGIN_URI,
"https://secondlife.com/helpers/",
DEFAULT_LOGIN_PAGE,
SL_UPDATE_QUERY_URL,
"Agni");
addSystemGrid("Second Life Beta Test Grid (Aditi)",
"util.aditi.lindenlab.com",
"https://login.aditi.lindenlab.com/cgi-bin/login.cgi",
"http://aditi-secondlife.webdev.lindenlab.com/helpers/",
DEFAULT_LOGIN_PAGE,
SL_UPDATE_QUERY_URL,
"Aditi");
LLSD other_grids;
@ -332,6 +338,7 @@ void LLGridManager::addSystemGrid(const std::string& label,
const std::string& login_uri,
const std::string& helper,
const std::string& login_page,
const std::string& update_url_base,
const std::string& login_id)
{
LLSD grid = LLSD::emptyMap();
@ -341,6 +348,7 @@ void LLGridManager::addSystemGrid(const std::string& label,
grid[GRID_LOGIN_URI_VALUE] = LLSD::emptyArray();
grid[GRID_LOGIN_URI_VALUE].append(login_uri);
grid[GRID_LOGIN_PAGE_VALUE] = login_page;
grid[GRID_UPDATE_SERVICE_URL] = update_url_base;
grid[GRID_IS_SYSTEM_GRID_VALUE] = true;
grid[GRID_LOGIN_IDENTIFIER_TYPES] = LLSD::emptyArray();
grid[GRID_LOGIN_IDENTIFIER_TYPES].append(CRED_IDENTIFIER_TYPE_AGENT);
@ -537,6 +545,30 @@ std::string LLGridManager::getGridLoginID()
return mGridList[mGrid][GRID_ID_VALUE];
}
std::string LLGridManager::getUpdateServiceURL()
{
std::string update_url_base = gSavedSettings.getString("CmdLineUpdateService");;
if ( !update_url_base.empty() )
{
LL_INFOS2("UpdaterService","GridManager")
<< "Update URL base overridden from command line: " << update_url_base
<< LL_ENDL;
}
else if ( mGridList[mGrid].has(GRID_UPDATE_SERVICE_URL) )
{
update_url_base = mGridList[mGrid][GRID_UPDATE_SERVICE_URL].asString();
}
else
{
LL_WARNS2("UpdaterService","GridManager")
<< "The grid property '" << GRID_UPDATE_SERVICE_URL
<< "' is not defined for the grid '" << mGrid << "'"
<< LL_ENDL;
}
return update_url_base;
}
void LLGridManager::updateIsInProductionGrid()
{
mIsInProductionGrid = false;

View File

@ -139,6 +139,14 @@ class LLGridManager : public LLSingleton<LLGridManager>
* I am not sure which is which
*/
//@}
/* ================================================================
* @name Update Related Properties
* @{
*/
/// Get the update service URL base (host and path) for the selected grid
std::string getUpdateServiceURL();
//@}
/* ================================================================
@ -207,6 +215,7 @@ class LLGridManager : public LLSingleton<LLGridManager>
const std::string& login,
const std::string& helper,
const std::string& login_page,
const std::string& update_url_base,
const std::string& login_id = "");

View File

@ -135,6 +135,7 @@ void LLGridManager::addSystemGrid(const std::string& label,
const std::string& login,
const std::string& helper,
const std::string& login_page,
const std::string& update_url_base,
const std::string& login_id)
{
}
@ -208,9 +209,7 @@ std::string const & LLUpdaterService::pumpName(void)
return wakka;
}
bool LLUpdaterService::updateReadyToInstall(void) { return false; }
void LLUpdaterService::initialize(const std::string& url,
const std::string& path,
const std::string& channel,
void LLUpdaterService::initialize(const std::string& channel,
const std::string& version,
const std::string& platform,
const std::string& platform_version,

View File

@ -127,6 +127,7 @@ const char *gSampleGridFile =
" <array>"
" <string>myloginuri</string>"
" </array>"
" <key>update_query_url_base</key><string>https://update.secondlife.com/update</string>"
" <key>keyname</key><string>util.foobar.lindenlab.com</string>"
" </map>"
" </map>"
@ -185,6 +186,9 @@ namespace tut
ensure_equals("id for agni",
std::string("Agni"),
LLGridManager::getInstance()->getGridId("util.agni.lindenlab.com"));
ensure_equals("update url base for Agni", // relies on agni being the default
std::string("https://update.secondlife.com/update"),
LLGridManager::getInstance()->getUpdateServiceURL());
ensure_equals("label for agni",
LLGridManager::getInstance()->getGridLabel("util.agni.lindenlab.com"),
std::string("Second Life Main Grid (Agni)"));
@ -256,6 +260,9 @@ namespace tut
ensure_equals("id for agni",
LLGridManager::getInstance()->getGridId("util.agni.lindenlab.com"),
std::string("Agni"));
ensure_equals("update url base for Agni", // relies on agni being the default
std::string("https://update.secondlife.com/update"),
LLGridManager::getInstance()->getUpdateServiceURL());
ensure_equals("label for agni",
LLGridManager::getInstance()->getGridLabel("util.agni.lindenlab.com"),
std::string("Second Life Main Grid (Agni)"));
@ -384,6 +391,9 @@ namespace tut
ensure_equals("getLoginPage",
LLGridManager::getInstance()->getLoginPage(),
std::string("http://viewer-login.agni.lindenlab.com/"));
ensure_equals("update url base for Agni", // relies on agni being the default
std::string("https://update.secondlife.com/update"),
LLGridManager::getInstance()->getUpdateServiceURL());
ensure("Is Agni a production grid", LLGridManager::getInstance()->isInProductionGrid());
std::vector<std::string> uris;
LLGridManager::getInstance()->getLoginURIs(uris);

View File

@ -62,8 +62,7 @@ LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client):
}
void LLUpdateChecker::checkVersion(std::string const & hostUrl,
std::string const & servicePath,
void LLUpdateChecker::checkVersion(std::string const & urlBase,
std::string const & channel,
std::string const & version,
std::string const & platform,
@ -71,7 +70,7 @@ void LLUpdateChecker::checkVersion(std::string const & hostUrl,
unsigned char uniqueid[MD5HEX_STR_SIZE],
bool willing_to_test)
{
mImplementation->checkVersion(hostUrl, servicePath, channel, version, platform, platform_version, uniqueid, willing_to_test);
mImplementation->checkVersion(urlBase, channel, version, platform, platform_version, uniqueid, willing_to_test);
}
@ -99,8 +98,7 @@ LLUpdateChecker::Implementation::~Implementation()
}
void LLUpdateChecker::Implementation::checkVersion(std::string const & hostUrl,
std::string const & servicePath,
void LLUpdateChecker::Implementation::checkVersion(std::string const & urlBase,
std::string const & channel,
std::string const & version,
std::string const & platform,
@ -112,8 +110,7 @@ void LLUpdateChecker::Implementation::checkVersion(std::string const & hostUrl,
{
mInProgress = true;
mHostUrl = hostUrl;
mServicePath = servicePath;
mUrlBase = urlBase;
mChannel = channel;
mVersion = version;
mPlatform = platform;
@ -123,7 +120,7 @@ void LLUpdateChecker::Implementation::checkVersion(std::string const & hostUrl,
mProtocol = sProtocolVersion;
std::string checkUrl = buildUrl(hostUrl, servicePath, channel, version, platform, platform_version, uniqueid, willing_to_test);
std::string checkUrl = buildUrl(urlBase, channel, version, platform, platform_version, uniqueid, willing_to_test);
LL_INFOS("UpdaterService") << "checking for updates at " << checkUrl << LL_ENDL;
mHttpClient.get(checkUrl, this);
@ -158,7 +155,7 @@ void LLUpdateChecker::Implementation::completed(U32 status,
if (mProtocol == sProtocolVersion)
{
mProtocol = sLegacyProtocolVersion;
std::string retryUrl = buildUrl(mHostUrl, mServicePath, mChannel, mVersion, mPlatform, mPlatformVersion, mUniqueId, mWillingToTest);
std::string retryUrl = buildUrl(mUrlBase, mChannel, mVersion, mPlatform, mPlatformVersion, mUniqueId, mWillingToTest);
LL_WARNS("UpdaterService")
<< "update response using " << sProtocolVersion
@ -203,8 +200,7 @@ void LLUpdateChecker::Implementation::error(U32 status, const std::string & reas
}
std::string LLUpdateChecker::Implementation::buildUrl(std::string const & hostUrl,
std::string const & servicePath,
std::string LLUpdateChecker::Implementation::buildUrl(std::string const & urlBase,
std::string const & channel,
std::string const & version,
std::string const & platform,
@ -213,7 +209,6 @@ std::string LLUpdateChecker::Implementation::buildUrl(std::string const & hostUr
bool willing_to_test)
{
LLSD path;
path.append(servicePath);
path.append(mProtocol);
path.append(channel);
path.append(version);
@ -224,5 +219,5 @@ std::string LLUpdateChecker::Implementation::buildUrl(std::string const & hostUr
path.append(willing_to_test ? "testok" : "testno");
path.append((char*)uniqueid);
}
return LLURI::buildHTTP(hostUrl, path).asString();
return LLURI::buildHTTP(urlBase, path).asString();
}

View File

@ -43,8 +43,7 @@ public:
public:
Implementation(Client & client);
~Implementation();
void checkVersion(std::string const & hostUrl,
std::string const & servicePath,
void checkVersion(std::string const & urlBase,
std::string const & channel,
std::string const & version,
std::string const & platform,
@ -68,16 +67,14 @@ public:
LLHTTPClient mHttpClient;
bool mInProgress;
std::string mVersion;
std::string mHostUrl;
std::string mServicePath;
std::string mUrlBase;
std::string mChannel;
std::string mPlatform;
std::string mPlatformVersion;
unsigned char mUniqueId[MD5HEX_STR_SIZE];
bool mWillingToTest;
std::string buildUrl(std::string const & hostUrl,
std::string const & servicePath,
std::string buildUrl(std::string const & urlBase,
std::string const & channel,
std::string const & version,
std::string const & platform,
@ -95,8 +92,7 @@ public:
LLUpdateChecker(Client & client);
// Check status of current app on the given host for the channel and version provided.
void checkVersion(std::string const & hostUrl,
std::string const & servicePath,
void checkVersion(std::string const & urlBase,
std::string const & channel,
std::string const & version,
std::string const & platform,

View File

@ -38,6 +38,7 @@
#include "lldir.h"
#include "llsdserialize.h"
#include "llfile.h"
#include "llviewernetwork.h"
#if LL_WINDOWS
#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
@ -93,8 +94,6 @@ class LLUpdaterServiceImpl :
static const std::string sListenerName;
std::string mProtocolVersion;
std::string mUrl;
std::string mPath;
std::string mChannel;
std::string mVersion;
std::string mPlatform;
@ -120,9 +119,7 @@ public:
LLUpdaterServiceImpl();
virtual ~LLUpdaterServiceImpl();
void initialize(const std::string& url,
const std::string& path,
const std::string& channel,
void initialize(const std::string& channel,
const std::string& version,
const std::string& platform,
const std::string& platform_version,
@ -183,9 +180,7 @@ LLUpdaterServiceImpl::~LLUpdaterServiceImpl()
LLEventPumps::instance().obtain("mainloop").stopListening(sListenerName);
}
void LLUpdaterServiceImpl::initialize(const std::string& url,
const std::string& path,
const std::string& channel,
void LLUpdaterServiceImpl::initialize(const std::string& channel,
const std::string& version,
const std::string& platform,
const std::string& platform_version,
@ -198,8 +193,6 @@ void LLUpdaterServiceImpl::initialize(const std::string& url,
"while updater is running.");
}
mUrl = url;
mPath = path;
mChannel = channel;
mVersion = version;
mPlatform = platform;
@ -207,8 +200,6 @@ void LLUpdaterServiceImpl::initialize(const std::string& url,
memcpy(mUniqueId, uniqueid, MD5HEX_STR_SIZE);
mWillingToTest = willing_to_test;
LL_DEBUGS("UpdaterService")
<< "\n url: " << mUrl
<< "\n path: " << mPath
<< "\n channel: " << mChannel
<< "\n version: " << mVersion
<< "\n uniqueid: " << mUniqueId
@ -228,7 +219,7 @@ void LLUpdaterServiceImpl::setBandwidthLimit(U64 bytesPerSecond)
void LLUpdaterServiceImpl::startChecking(bool install_if_ready)
{
if(mUrl.empty() || mChannel.empty() || mVersion.empty())
if(mChannel.empty() || mVersion.empty())
{
throw LLUpdaterService::UsageError("Set params before call to "
"LLUpdaterService::startCheck().");
@ -415,7 +406,7 @@ void LLUpdaterServiceImpl::response(LLSD const & content)
setState(LLUpdaterService::UP_TO_DATE);
}
else
else if ( content.isMap() && content.has("url") )
{
// there is an update available...
stopTimer();
@ -439,6 +430,12 @@ void LLUpdaterServiceImpl::response(LLSD const & content)
<< LL_ENDL;
mUpdateDownloader.download(url, content["hash"].asString(), mNewChannel, mNewVersion, more_info, required);
}
else
{
LL_WARNS("UpdaterService") << "Invalid update query response ignored; retry in "
<< mCheckPeriod << " seconds" << LL_ENDL;
restartTimer(mCheckPeriod);
}
}
void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)
@ -565,8 +562,26 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)
}
else
{
mUpdateChecker.checkVersion(mUrl, mPath, mChannel, mVersion, mPlatform, mPlatformVersion, mUniqueId, mWillingToTest);
setState(LLUpdaterService::CHECKING_FOR_UPDATE);
std::string query_url = LLGridManager::getInstance()->getUpdateServiceURL();
if ( !query_url.empty() )
{
mUpdateChecker.checkVersion(query_url, mChannel, mVersion,
mPlatform, mPlatformVersion, mUniqueId,
mWillingToTest);
setState(LLUpdaterService::CHECKING_FOR_UPDATE);
}
else
{
LL_WARNS("UpdaterService")
<< "No updater service defined for grid '" << LLGridManager::getInstance()->getGrid()
<< "' will check again in " << mCheckPeriod << " seconds"
<< LL_ENDL;
// Because the grid can be changed after the viewer is started (when the first check takes place)
// but before the user logs in, the next check may be on a different grid, so set the retry timer
// even though this check did not happen. The default time is once an hour, and if we're not
// doing the check anyway the performance impact is completely insignificant.
restartTimer(mCheckPeriod);
}
}
}
else
@ -610,9 +625,7 @@ LLUpdaterService::~LLUpdaterService()
{
}
void LLUpdaterService::initialize(const std::string& url,
const std::string& path,
const std::string& channel,
void LLUpdaterService::initialize(const std::string& channel,
const std::string& version,
const std::string& platform,
const std::string& platform_version,
@ -620,7 +633,7 @@ void LLUpdaterService::initialize(const std::string& url,
const bool& willing_to_test
)
{
mImpl->initialize(url, path, channel, version, platform, platform_version, uniqueid, willing_to_test);
mImpl->initialize(channel, version, platform, platform_version, uniqueid, willing_to_test);
}
void LLUpdaterService::setCheckPeriod(unsigned int seconds)

View File

@ -71,9 +71,7 @@ public:
LLUpdaterService();
~LLUpdaterService();
void initialize(const std::string& url,
const std::string& path,
const std::string& channel,
void initialize(const std::string& channel,
const std::string& version,
const std::string& platform,
const std::string& platform_version,

View File

@ -44,8 +44,7 @@
*****************************************************************************/
LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client)
{}
void LLUpdateChecker::checkVersion(std::string const & hostUrl,
std::string const & servicePath,
void LLUpdateChecker::checkVersion(std::string const & urlBase,
std::string const & channel,
std::string const & version,
std::string const & platform,
@ -91,6 +90,21 @@ bool LLDir::setCacheDir(const std::string &path){ return true; }
void LLDir::dumpCurrentDirectories() {}
void LLDir::updatePerAccountChatLogsDir() {}
#include "llviewernetwork.h"
LLGridManager::LLGridManager() :
mGrid("test.grid.lindenlab.com"),
mIsInProductionGrid(false)
{
}
std::string LLGridManager::getUpdateServiceURL()
{
return "https://update.secondlife.com/update";
}
LLGridManager::~LLGridManager()
{
}
std::string LLDir::getExpandedFilename(ELLPath location,
const std::string &filename) const
{
@ -179,10 +193,10 @@ namespace tut
try
{
unsigned char id1[MD5HEX_STR_SIZE] = "11111111111111111111111111111111";
updater.initialize(test_url, "update" ,test_channel, test_version, "win", "1.2.3", id1, true);
updater.initialize(test_channel, test_version, "win", "1.2.3", id1, true);
updater.startChecking();
unsigned char id2[MD5HEX_STR_SIZE] = "22222222222222222222222222222222";
updater.initialize("other_url", "update", test_channel, test_version, "win", "4.5.6", id2, true);
updater.initialize(test_channel, test_version, "win", "4.5.6", id2, true);
}
catch(LLUpdaterService::UsageError)
{
@ -197,7 +211,7 @@ namespace tut
DEBUG;
LLUpdaterService updater;
unsigned char id[MD5HEX_STR_SIZE] = "33333333333333333333333333333333";
updater.initialize(test_url, "update", test_channel, test_version, "win", "7.8.9", id, true);
updater.initialize(test_channel, test_version, "win", "7.8.9", id, true);
updater.startChecking();
ensure(updater.isChecking());
updater.stopChecking();