void LLUpdaterServiceImpl::requiredUpdate(std::string const & newVersion,
										  LLURI const & uri,
										  std::string const & hash)
{
	stopTimer();
	mNewVersion = newVersion;
	mIsDownloading = true;
	setState(LLUpdaterService::DOWNLOADING);
	mUpdateDownloader.download(uri, hash, newVersion, true);
}
// A successful response was received from the viewer version manager
void LLUpdaterServiceImpl::response(LLSD const & content)
{
    if(!content.asBoolean()) // an empty response means "no update"
    {
        LL_INFOS("UpdaterService") << "up to date" << LL_ENDL;
        if(mIsChecking)
        {
            restartTimer(mCheckPeriod);
        }

        setState(LLUpdaterService::UP_TO_DATE);
    }
    else if ( content.isMap() && content.has("url") )
    {
        // there is an update available...
        stopTimer();
        mNewChannel = content["channel"].asString();
        if (mNewChannel.empty())
        {
            LL_INFOS("UpdaterService") << "no channel supplied, assuming current channel" << LL_ENDL;
            mNewChannel = mChannel;
        }
        mNewVersion = content["version"].asString();
        mIsDownloading = true;
        setState(LLUpdaterService::DOWNLOADING);
        BOOL required = content["required"].asBoolean();
        LLURI url(content["url"].asString());
        std::string more_info = content["more_info"].asString();
        LL_DEBUGS("UpdaterService")
                << "Starting download of "
                << ( required ? "required" : "optional" ) << " update"
                << " to channel '" << mNewChannel << "' version " << mNewVersion
                << " more info '" << more_info << "'"
                << 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);
    }
}