Merge SSB push 4

Tank_Master 2013-03-08 17:54:49 -08:00
commit 1d43cb8943
65 changed files with 422 additions and 263 deletions

View File

@ -100,7 +100,7 @@ LLSD LLMetricPerformanceTesterBasic::analyzeMetricPerformanceLog(std::istream& i
LLSD ret;
LLSD cur;
while (!is.eof() && LLSDSerialize::fromXML(cur, is))
while (!is.eof() && LLSDParser::PARSE_FAILURE != LLSDSerialize::fromXML(cur, is))
{
for (LLSD::map_iterator iter = cur.beginMap(); iter != cur.endMap(); ++iter)
{

View File

@ -300,7 +300,7 @@ public:
/**
* @brief Constructor
*/
LLSDXMLParser();
LLSDXMLParser(bool emit_errors=true);
protected:
/**
@ -747,25 +747,25 @@ public:
return f->format(sd, str, LLSDFormatter::OPTIONS_PRETTY);
}
static S32 fromXMLEmbedded(LLSD& sd, std::istream& str)
static S32 fromXMLEmbedded(LLSD& sd, std::istream& str, bool emit_errors=true)
{
// no need for max_bytes since xml formatting is not
// subvertable by bad sizes.
LLPointer<LLSDXMLParser> p = new LLSDXMLParser;
LLPointer<LLSDXMLParser> p = new LLSDXMLParser(emit_errors);
return p->parse(str, sd, LLSDSerialize::SIZE_UNLIMITED);
}
// Line oriented parser, 30% faster than fromXML(), but can
// only be used when you know you have the complete XML
// document available in the stream.
static S32 fromXMLDocument(LLSD& sd, std::istream& str)
static S32 fromXMLDocument(LLSD& sd, std::istream& str, bool emit_errors=true)
{
LLPointer<LLSDXMLParser> p = new LLSDXMLParser();
LLPointer<LLSDXMLParser> p = new LLSDXMLParser(emit_errors);
return p->parseLines(str, sd);
}
static S32 fromXML(LLSD& sd, std::istream& str)
static S32 fromXML(LLSD& sd, std::istream& str, bool emit_errors=true)
{
return fromXMLEmbedded(sd, str);
// return fromXMLDocument(sd, str);
return fromXMLEmbedded(sd, str, emit_errors);
// return fromXMLDocument(sd, str, emit_errors);
}
/*

View File

@ -251,7 +251,7 @@ std::string LLSDXMLFormatter::escapeString(const std::string& in)
class LLSDXMLParser::Impl
{
public:
Impl();
Impl(bool emit_errors);
~Impl();
S32 parse(std::istream& input, LLSD& data);
@ -295,6 +295,7 @@ private:
static const XML_Char* findAttribute(const XML_Char* name, const XML_Char** pairs);
bool mEmitErrors;
XML_Parser mParser;
@ -317,7 +318,8 @@ private:
};
LLSDXMLParser::Impl::Impl()
LLSDXMLParser::Impl::Impl(bool emit_errors)
: mEmitErrors(emit_errors)
{
mParser = XML_ParserCreate(NULL);
reset();
@ -404,7 +406,10 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
{
((char*) buffer)[count ? count - 1 : 0] = '\0';
}
llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl;
if (mEmitErrors)
{
llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl;
}
data = LLSD();
return LLSDParser::PARSE_FAILURE;
}
@ -482,7 +487,10 @@ S32 LLSDXMLParser::Impl::parseLines(std::istream& input, LLSD& data)
if (status == XML_STATUS_ERROR
&& !mGracefullStop)
{
llinfos << "LLSDXMLParser::Impl::parseLines: XML_STATUS_ERROR" << llendl;
if (mEmitErrors)
{
llinfos << "LLSDXMLParser::Impl::parseLines: XML_STATUS_ERROR" << llendl;
}
return LLSDParser::PARSE_FAILURE;
}
@ -923,7 +931,7 @@ LLSDXMLParser::Impl::Element LLSDXMLParser::Impl::readElement(const XML_Char* na
/**
* LLSDXMLParser
*/
LLSDXMLParser::LLSDXMLParser() : impl(* new Impl)
LLSDXMLParser::LLSDXMLParser(bool emit_errors /* = true */) : impl(* new Impl(emit_errors))
{
}

View File

@ -163,7 +163,7 @@ void LLCrashLogger::gatherFiles()
// Look for it in the debug_info.log file
if (debug_log_file.is_open())
{
{
LLSDSerialize::fromXML(mDebugLog, debug_log_file);
mCrashInPreviousExec = mDebugLog["CrashNotHandled"].asBoolean();

View File

@ -460,8 +460,10 @@ void LLAvatarNameCache::cleanupClass()
void LLAvatarNameCache::importFile(std::istream& istr)
{
LLSD data;
S32 parse_count = LLSDSerialize::fromXMLDocument(data, istr);
if (parse_count < 1) return;
if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(data, istr))
{
return;
}
// by convention LLSD storage is a map
// we only store one entry in the map

View File

@ -312,8 +312,10 @@ boost::signals2::connection LLCacheName::addObserver(const LLCacheNameCallback&
bool LLCacheName::importFile(std::istream& istr)
{
LLSD data;
if(LLSDSerialize::fromXMLDocument(data, istr) < 1)
if(LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(data, istr))
{
return false;
}
// We'll expire entries more than a week old
U32 now = (U32)time(NULL);

View File

@ -175,9 +175,11 @@ void LLCurl::Responder::completedRaw(
{
LLSD content;
LLBufferStream istr(channels, buffer.get());
if (!LLSDSerialize::fromXML(content, istr))
const bool emit_errors = false;
if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXML(content, istr, emit_errors))
{
llinfos << "Failed to deserialize LLSD. " << mURL << " [" << status << "]: " << reason << llendl;
content["reason"] = reason;
}
completed(status, reason, content);

View File

@ -31,6 +31,7 @@
#include "llpluginprocessparent.h"
#include "llpluginmessagepipe.h"
#include "llpluginmessageclasses.h"
#include "llsdserialize.h"
#include "stringize.h"
#include "llapr.h"
@ -855,7 +856,7 @@ void LLPluginProcessParent::receiveMessageRaw(const std::string &message)
LL_DEBUGS("Plugin") << "Received: " << message << LL_ENDL;
LLPluginMessage parsed;
if(parsed.parse(message) != -1)
if(LLSDParser::PARSE_FAILURE != parsed.parse(message))
{
if(parsed.hasValue("blocking_request"))
{

View File

@ -145,10 +145,14 @@ void LLSpellChecker::refreshDictionaryMap()
// Load dictionary information (file name, friendly name, ...)
llifstream user_file(user_path + DICT_FILE_MAIN, std::ios::binary);
if ( (!user_file.is_open()) || (0 == LLSDSerialize::fromXMLDocument(sDictMap, user_file)) || (0 == sDictMap.size()) )
if ( (!user_file.is_open())
|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, user_file))
|| (0 == sDictMap.size()) )
{
llifstream app_file(app_path + DICT_FILE_MAIN, std::ios::binary);
if ( (!app_file.is_open()) || (0 == LLSDSerialize::fromXMLDocument(sDictMap, app_file)) || (0 == sDictMap.size()) )
if ( (!app_file.is_open())
|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, app_file))
|| (0 == sDictMap.size()) )
{
return;
}

View File

@ -940,12 +940,10 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v
return 0;
}
S32 ret = LLSDSerialize::fromXML(settings, infile);
if (ret <= 0)
if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXML(settings, infile))
{
infile.close();
llwarns << "Unable to open LLSD control file " << filename << ". Trying Legacy Method." << llendl;
llwarns << "Unable to parse LLSD control file " << filename << ". Trying Legacy Method." << llendl;
return loadFromFileLegacy(filename, TRUE, TYPE_STRING);
}

View File

@ -1676,17 +1676,6 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>AgentAppearanceServiceURL</key>
<map>
<key>Comment</key>
<string>Current Session Agent Appearance Service URL</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string></string>
</map>
<key>AlertedUnsupportedHardware</key>
<map>
<key>Comment</key>
@ -3702,6 +3691,28 @@
<key>Value</key>
<integer>0</integer>
</map>
<key>DebugAvatarExperimentalServerAppearanceUpdate</key>
<map>
<key>Comment</key>
<string>Experiment with sending full cof_contents instead of cof_version</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>DebugAvatarAppearanceServiceURLOverride</key>
<map>
<key>Comment</key>
<string>URL to use for baked texture requests; overrides value returned by login server.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string />
</map>
<key>DebugAvatarRezTime</key>
<map>
<key>Comment</key>

View File

@ -56,9 +56,9 @@ public:
}
}
void error( U32 statusNum, const std::string& reason )
void errorWithContent( U32 statusNum, const std::string& reason, const LLSD& content )
{
llwarns << "Transport error "<<reason<<llendl;
llwarns << "Transport error [status:" << statusNum << "]: " << content <<llendl;
clearPendingRequests();
LLAccountingCostObserver* observer = mObserverHandle.get();

View File

@ -2890,7 +2890,7 @@ public:
virtual ~LLMaturityPreferencesResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string& pReason);
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent);
protected:
@ -2928,11 +2928,11 @@ void LLMaturityPreferencesResponder::result(const LLSD &pContent)
mAgent->handlePreferredMaturityResult(actualMaturity);
}
void LLMaturityPreferencesResponder::error(U32 pStatus, const std::string& pReason)
void LLMaturityPreferencesResponder::errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent)
{
llwarns << "while attempting to change maturity preference from '" << LLViewerRegion::accessToString(mPreviousMaturity)
<< "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) << "', we got an error because '"
<< pReason << "' [status:" << pStatus << "]" << llendl;
<< "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) << "', we got an error with [status:"
<< pStatus << "]: " << (pContent.isDefined() ? pContent : LLSD(pReason)) << llendl;
mAgent->handlePreferredMaturityError();
}
@ -3122,7 +3122,7 @@ void LLAgent::sendMaturityPreferenceToServer(U8 pPreferredMaturity)
// If we don't have a region, report it as an error
if (getRegion() == NULL)
{
responderPtr->error(0U, "region is not defined");
responderPtr->errorWithContent(0U, "region is not defined", LLSD());
}
else
{
@ -3132,7 +3132,8 @@ void LLAgent::sendMaturityPreferenceToServer(U8 pPreferredMaturity)
// If the capability is not defined, report it as an error
if (url.empty())
{
responderPtr->error(0U, "capability 'UpdateAgentInformation' is not defined for region");
responderPtr->errorWithContent(0U,
"capability 'UpdateAgentInformation' is not defined for region", LLSD());
}
else
{

View File

@ -139,7 +139,7 @@ void LLAgentPilot::loadXML(const std::string& filename)
mActions.reset();
LLSD record;
while (!file.eof() && LLSDSerialize::fromXML(record, file))
while (!file.eof() && LLSDParser::PARSE_FAILURE != LLSDSerialize::fromXML(record, file))
{
Action action;
action.mTime = record["time"].asReal();

View File

@ -26,6 +26,7 @@
#include "llviewerprecompiledheaders.h"
#include <boost/lexical_cast.hpp>
#include "llaccordionctrltab.h"
#include "llagent.h"
#include "llagentcamera.h"
@ -60,6 +61,11 @@
#include "fslslbridge.h"
//-TT
#if LL_MSVC
// disable boost::lexical_cast warning
#pragma warning (disable:4702)
#endif
std::string self_av_string()
{
// On logout gAgentAvatarp can already be invalid
@ -3635,7 +3641,8 @@ public:
LLSD LLAppearanceMgr::dumpCOF() const
{
LLSD result = LLSD::emptyArray();
LLSD links = LLSD::emptyArray();
LLMD5 md5;
LLInventoryModel::cat_array_t cat_array;
LLInventoryModel::item_array_t item_array;
@ -3644,13 +3651,54 @@ LLSD LLAppearanceMgr::dumpCOF() const
{
const LLViewerInventoryItem* inv_item = item_array.get(i).get();
LLSD item;
item["item_id"] = inv_item->getUUID();
item["linked_item_id"] = inv_item->getLinkedUUID();
item["name"] = inv_item->getName();
LLUUID item_id(inv_item->getUUID());
md5.update((unsigned char*)item_id.mData, 16);
item["description"] = inv_item->getActualDescription();
item["type"] = inv_item->getActualType();
result.append(item);
md5.update(inv_item->getActualDescription());
item["asset_type"] = inv_item->getActualType();
LLUUID linked_id(inv_item->getLinkedUUID());
item["linked_id"] = linked_id;
md5.update((unsigned char*)linked_id.mData, 16);
if (LLAssetType::AT_LINK == inv_item->getActualType())
{
const LLViewerInventoryItem* linked_item = inv_item->getLinkedItem();
if (NULL == linked_item)
{
llwarns << "Broken link for item '" << inv_item->getName()
<< "' (" << inv_item->getUUID()
<< ") during requestServerAppearanceUpdate" << llendl;
continue;
}
// Some assets may be 'hidden' and show up as null in the viewer.
//if (linked_item->getAssetUUID().isNull())
//{
// llwarns << "Broken link (null asset) for item '" << inv_item->getName()
// << "' (" << inv_item->getUUID()
// << ") during requestServerAppearanceUpdate" << llendl;
// continue;
//}
LLUUID linked_asset_id(linked_item->getAssetUUID());
md5.update((unsigned char*)linked_asset_id.mData, 16);
U32 flags = linked_item->getFlags();
md5.update(boost::lexical_cast<std::string>(flags));
}
else if (LLAssetType::AT_LINK_FOLDER != inv_item->getActualType())
{
llwarns << "Non-link item '" << inv_item->getName()
<< "' (" << inv_item->getUUID()
<< ") type " << (S32) inv_item->getActualType()
<< " during requestServerAppearanceUpdate" << llendl;
continue;
}
links.append(item);
}
LLSD result = LLSD::emptyMap();
result["cof_contents"] = links;
char cof_md5sum[MD5HEX_STR_SIZE];
md5.finalize();
md5.hex_digest(cof_md5sum);
result["cof_md5sum"] = std::string(cof_md5sum);
return result;
}
@ -3680,14 +3728,17 @@ void LLAppearanceMgr::requestServerAppearanceUpdate(LLCurl::ResponderPtr respond
LLSD body;
S32 cof_version = getCOFVersion();
body["cof_version"] = cof_version;
if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure"))
if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate"))
{
body["cof_version"] = cof_version+999;
body = dumpCOF();
}
if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage"))
else
{
body["debug_cof"] = dumpCOF();
body["cof_version"] = cof_version;
if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure"))
{
body["cof_version"] = cof_version+999;
}
}
LL_DEBUGS("Avatar") << "request url " << url << " my_cof_version " << cof_version << llendl;
@ -3725,10 +3776,10 @@ public:
app_mgr->mLastUpdateRequestCOFVersion = new_version;
}
virtual void error(U32 pStatus, const std::string& pReason)
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& content)
{
llwarns << "While attempting to increment the agent's cof we got an error because '"
<< pReason << "' [status:" << pStatus << "]" << llendl;
llwarns << "While attempting to increment the agent's cof we got an error with [status:"
<< pStatus << "]: " << content << llendl;
F32 seconds_to_wait;
if (mRetryPolicy->shouldRetry(pStatus,seconds_to_wait))
{
@ -3776,6 +3827,15 @@ void LLAppearanceMgr::incrementCofVersion(LLHTTPClient::ResponderPtr responder_p
LLHTTPClient::get(url, body, responder_ptr, headers, 30.0f);
}
std::string LLAppearanceMgr::getAppearanceServiceURL() const
{
if (gSavedSettings.getString("DebugAvatarAppearanceServiceURLOverride").empty())
{
return mAppearanceServiceURL;
}
return gSavedSettings.getString("DebugAvatarAppearanceServiceURLOverride");
}
void show_created_outfit(LLUUID& folder_id, bool show_panel = true)
{
if (!LLApp::isRunning())

View File

@ -222,6 +222,13 @@ public:
// *HACK Remove this after server side texture baking is deployed on all sims.
void incrementCofVersionLegacy();
void setAppearanceServiceURL(const std::string& url) { mAppearanceServiceURL = url; }
std::string getAppearanceServiceURL() const;
private:
std::string mAppearanceServiceURL;
protected:
LLAppearanceMgr();
~LLAppearanceMgr();

View File

@ -71,10 +71,11 @@ public:
delete mData;
}
virtual void error(U32 statusNum, const std::string& reason)
virtual void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llwarns << "Error: " << reason << llendl;
LLUpdateTaskInventoryResponder::error(statusNum, reason);
llwarns << "LLAssetUploadChainResponder Error [status:"
<< statusNum << "]: " << content << llendl;
LLUpdateTaskInventoryResponder::errorWithContent(statusNum, reason, content);
LLAssetUploadQueue *queue = mSupplier->get();
if (queue)
{

View File

@ -229,10 +229,10 @@ LLAssetUploadResponder::~LLAssetUploadResponder()
}
// virtual
void LLAssetUploadResponder::error(U32 statusNum, const std::string& reason)
void LLAssetUploadResponder::errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llinfos << "LLAssetUploadResponder::error " << statusNum
<< " reason: " << reason << llendl;
llinfos << "LLAssetUploadResponder::error [status:"
<< statusNum << "]: " << content << llendl;
LLSD args;
switch(statusNum)
{
@ -344,9 +344,9 @@ LLNewAgentInventoryResponder::LLNewAgentInventoryResponder(
}
// virtual
void LLNewAgentInventoryResponder::error(U32 statusNum, const std::string& reason)
void LLNewAgentInventoryResponder::errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
LLAssetUploadResponder::error(statusNum, reason);
LLAssetUploadResponder::errorWithContent(statusNum, reason, content);
//LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, LLUUID(), FALSE);
}
@ -491,9 +491,10 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content)
}
}
void LLSendTexLayerResponder::error(U32 statusNum, const std::string& reason)
void LLSendTexLayerResponder::errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llinfos << "status: " << statusNum << " reason: " << reason << llendl;
llinfos << "LLSendTexLayerResponder error [status:"
<< statusNum << "]: " << content << llendl;
// Invoke the original callback with an error result
LLViewerTexLayerSetBuffer::onTextureUploadComplete(LLUUID(), (void*) mBakedUploadData, -1, LL_EXSTAT_NONE);

View File

@ -42,7 +42,7 @@ public:
LLAssetType::EType asset_type);
~LLAssetUploadResponder();
virtual void error(U32 statusNum, const std::string& reason);
virtual void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content);
virtual void result(const LLSD& content);
virtual void uploadUpload(const LLSD& content);
virtual void uploadComplete(const LLSD& content);
@ -67,7 +67,7 @@ public:
const LLSD& post_data,
const std::string& file_name,
LLAssetType::EType asset_type);
virtual void error(U32 statusNum, const std::string& reason);
virtual void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content);
virtual void uploadComplete(const LLSD& content);
virtual void uploadFailure(const LLSD& content);
};
@ -122,7 +122,7 @@ public:
~LLSendTexLayerResponder();
virtual void uploadComplete(const LLSD& content);
virtual void error(U32 statusNum, const std::string& reason);
virtual void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content);
LLBakedUploadData * mBakedUploadData;
};

View File

@ -72,8 +72,7 @@ void LLClassifiedStatsResponder::result(const LLSD& content)
}
/*virtual*/
void LLClassifiedStatsResponder::error(U32 status, const std::string& reason)
void LLClassifiedStatsResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llinfos << "LLClassifiedStatsResponder::error("
<< status << ": " << reason << ")" << llendl;
llinfos << "LLClassifiedStatsResponder::error [status:" << status << "]: " << content << llendl;
}

View File

@ -39,7 +39,7 @@ public:
virtual void result(const LLSD& content);
//If we get back an error (not found, etc...), handle it here
virtual void error(U32 status, const std::string& reason);
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
protected:
LLUUID mClassifiedID;

View File

@ -122,9 +122,9 @@ public:
}
// if we get an error response
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "Failed to commit estate info (" << status << "): " << reason << llendl;
llwarns << "Failed to commit estate info [status:" << status << "]: " << content << llendl;
}
};

View File

@ -62,7 +62,7 @@ namespace
void handleMessage(const LLSD& content);
virtual void error(U32 status, const std::string& reason);
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
virtual void result(const LLSD& content);
virtual void completedRaw(U32 status,
@ -187,7 +187,7 @@ namespace
}
//virtual
void LLEventPollResponder::error(U32 status, const std::string& reason)
void LLEventPollResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
if (mDone) return;
@ -207,13 +207,13 @@ namespace
+ mErrorCount * EVENT_POLL_ERROR_RETRY_SECONDS_INC
, this);
llwarns << "Unexpected HTTP error. status: " << status << ", reason: " << reason << llendl;
llwarns << "LLEventPollResponder error [status:" << status << "]: " << content << llendl;
}
else
{
llwarns << "LLEventPollResponder::error: <" << mCount << "> got "
<< status << ": " << reason
<< (mDone ? " -- done" : "") << llendl;
llwarns << "LLEventPollResponder error <" << mCount
<< "> [status:" << status << "]: " << content
<< (mDone ? " -- done" : "") << llendl;
stop();
// At this point we have given up and the viewer will not receive HTTP messages from the simulator.

View File

@ -1114,7 +1114,7 @@ void LLFastTimerView::exportCharts(const std::string& base, const std::string& t
{ //read base log into memory
S32 i = 0;
std::ifstream is(base.c_str());
while (!is.eof() && LLSDSerialize::fromXML(cur, is))
while (!is.eof() && LLSDParser::PARSE_FAILURE != LLSDSerialize::fromXML(cur, is))
{
base_data[i++] = cur;
}
@ -1127,7 +1127,7 @@ void LLFastTimerView::exportCharts(const std::string& base, const std::string& t
{ //read current log into memory
S32 i = 0;
std::ifstream is(target.c_str());
while (!is.eof() && LLSDSerialize::fromXML(cur, is))
while (!is.eof() && LLSDParser::PARSE_FAILURE != LLSDSerialize::fromXML(cur, is))
{
cur_data[i++] = cur;
@ -1418,7 +1418,7 @@ LLSD LLFastTimerView::analyzePerformanceLogDefault(std::istream& is)
stats_map_t time_stats;
stats_map_t sample_stats;
while (!is.eof() && LLSDSerialize::fromXML(cur, is))
while (!is.eof() && LLSDParser::PARSE_FAILURE != LLSDSerialize::fromXML(cur, is))
{
for (LLSD::map_iterator iter = cur.beginMap(); iter != cur.endMap(); ++iter)
{

View File

@ -427,8 +427,7 @@ public:
}
else
{
llinfos << "avatar picker failed " << status
<< " reason " << reason << llendl;
llwarns << "avatar picker failed [status:" << status << "]: " << content << llendl;
}
}

View File

@ -75,7 +75,7 @@ namespace
{
public:
/* virtual */
void error(U32 status, const std::string& reason)
void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
sConsoleReplySignal(UNABLE_TO_SEND_COMMAND);
}

View File

@ -803,9 +803,10 @@ class ConsoleRequestResponder : public LLHTTPClient::Responder
{
public:
/*virtual*/
void error(U32 status, const std::string& reason)
void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "requesting mesh_rez_enabled failed" << llendl;
llwarns << "ConsoleRequestResponder error requesting mesh_rez_enabled [status:"
<< status << "]: " << content << llendl;
}
};
@ -815,9 +816,10 @@ class ConsoleUpdateResponder : public LLHTTPClient::Responder
{
public:
/* virtual */
void error(U32 status, const std::string& reason)
void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "Updating mesh enabled region setting failed" << llendl;
llwarns << "ConsoleRequestResponder error updating mesh enabled region setting [status:"
<< status << "]: " << content << llendl;
}
};
@ -2391,10 +2393,10 @@ public:
}
// if we get an error response
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llinfos << "LLEstateChangeInfoResponder::error "
<< status << ": " << reason << llendl;
llinfos << "LLEstateChangeInfoResponder::error [status:"
<< status << "]: " << content << llendl;
}
private:
LLHandle<LLPanel> mpPanel;

View File

@ -703,7 +703,7 @@ class LLUserReportResponder : public LLHTTPClient::Responder
public:
LLUserReportResponder(): LLHTTPClient::Responder() {}
void error(U32 status, const std::string& reason)
void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
// *TODO do some user messaging here
LLUploadDialog::modalUploadFinished();

View File

@ -223,9 +223,9 @@ void fetchScriptLimitsRegionInfoResponder::result(const LLSD& content)
}
}
void fetchScriptLimitsRegionInfoResponder::error(U32 status, const std::string& reason)
void fetchScriptLimitsRegionInfoResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "Error from responder " << reason << llendl;
llwarns << "fetchScriptLimitsRegionInfoResponder error [status:" << status << "]: " << content << llendl;
}
void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)
@ -310,9 +310,9 @@ void fetchScriptLimitsRegionSummaryResponder::result(const LLSD& content_ref)
}
}
void fetchScriptLimitsRegionSummaryResponder::error(U32 status, const std::string& reason)
void fetchScriptLimitsRegionSummaryResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "Error from responder " << reason << llendl;
llwarns << "fetchScriptLimitsRegionSummaryResponder error [status:" << status << "]: " << content << llendl;
}
void fetchScriptLimitsRegionDetailsResponder::result(const LLSD& content_ref)
@ -419,9 +419,9 @@ result (map)
}
}
void fetchScriptLimitsRegionDetailsResponder::error(U32 status, const std::string& reason)
void fetchScriptLimitsRegionDetailsResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "Error from responder " << reason << llendl;
llwarns << "fetchScriptLimitsRegionDetailsResponder error [status:" << status << "]: " << content << llendl;
}
void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
@ -515,9 +515,9 @@ void fetchScriptLimitsAttachmentInfoResponder::result(const LLSD& content_ref)
}
}
void fetchScriptLimitsAttachmentInfoResponder::error(U32 status, const std::string& reason)
void fetchScriptLimitsAttachmentInfoResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "Error from responder " << reason << llendl;
llwarns << "fetchScriptLimitsAttachmentInfoResponder error [status:" << status << "]: " << content << llendl;
}
///----------------------------------------------------------------------------

View File

@ -89,7 +89,7 @@ class fetchScriptLimitsRegionInfoResponder: public LLHTTPClient::Responder
fetchScriptLimitsRegionInfoResponder(const LLSD& info) : mInfo(info) {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
public:
protected:
LLSD mInfo;
@ -101,7 +101,7 @@ class fetchScriptLimitsRegionSummaryResponder: public LLHTTPClient::Responder
fetchScriptLimitsRegionSummaryResponder(const LLSD& info) : mInfo(info) {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
public:
protected:
LLSD mInfo;
@ -113,7 +113,7 @@ class fetchScriptLimitsRegionDetailsResponder: public LLHTTPClient::Responder
fetchScriptLimitsRegionDetailsResponder(const LLSD& info) : mInfo(info) {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
public:
protected:
LLSD mInfo;
@ -125,7 +125,7 @@ class fetchScriptLimitsAttachmentInfoResponder: public LLHTTPClient::Responder
fetchScriptLimitsAttachmentInfoResponder() {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
public:
protected:
};

View File

@ -1872,14 +1872,15 @@ public:
GroupMemberDataResponder() {}
virtual ~GroupMemberDataResponder() {}
virtual void result(const LLSD& pContent);
virtual void error(U32 pStatus, const std::string& pReason);
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent);
private:
LLSD mMemberData;
};
void GroupMemberDataResponder::error(U32 pStatus, const std::string& pReason)
void GroupMemberDataResponder::errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent)
{
LL_WARNS("GrpMgr") << "Error receiving group member data." << LL_ENDL;
LL_WARNS("GrpMgr") << "Error receiving group member data [status:"
<< pStatus << "]: " << pContent << LL_ENDL;
}
void GroupMemberDataResponder::result(const LLSD& content)

View File

@ -97,7 +97,7 @@ void LLHomeLocationResponder::result( const LLSD& content )
}
}
void LLHomeLocationResponder::error( U32 status, const std::string& reason )
void LLHomeLocationResponder::errorWithContent( U32 status, const std::string& reason, const LLSD& content )
{
llinfos << "received error(" << reason << ")" << llendl;
llwarns << "LLHomeLocationResponder error [status:" << status << "]: " << content << llendl;
}

View File

@ -36,7 +36,7 @@
class LLHomeLocationResponder : public LLHTTPClient::Responder
{
virtual void result( const LLSD& content );
virtual void error( U32 status, const std::string& reason );
virtual void errorWithContent( U32 status, const std::string& reason, const LLSD& content );
};
#endif

View File

@ -1591,9 +1591,10 @@ public:
mSessionID = session_id;
}
void error(U32 statusNum, const std::string& reason)
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llinfos << "Error inviting all agents to session" << llendl;
llwarns << "Error inviting all agents to session [status:"
<< statusNum << "]: " << content << llendl;
//throw something back to the viewer here?
}

View File

@ -1444,7 +1444,7 @@ public:
mAgents = agents_to_invite;
}
virtual void error(U32 statusNum, const std::string& reason)
virtual void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
//try an "old school" way.
if ( statusNum == 400 )
@ -1456,6 +1456,9 @@ public:
mAgents);
}
llwarns << "LLStartConferenceChatResponder error [status:"
<< statusNum << "]: " << content << llendl;
//else throw an error back to the client?
//in theory we should have just have these error strings
//etc. set up in this file as opposed to the IMMgr,
@ -1601,8 +1604,10 @@ public:
}
}
void error(U32 statusNum, const std::string& reason)
{
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llwarns << "LLViewerChatterBoxInvitationAcceptResponder error [status:"
<< statusNum << "]: " << content << llendl;
//throw something back to the viewer here?
if ( gIMMgr )
{

View File

@ -501,9 +501,9 @@ void LLInspectAvatar::toggleSelectedVoice(bool enabled)
mSessionID = session_id;
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << status << ": " << reason << llendl;
llwarns << "MuteVoiceResponder error [status:" << status << "]: " << content << llendl;
if ( gIMMgr )
{

View File

@ -465,9 +465,10 @@ public:
{
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_WARNS("InvAPI") << "CreateInventoryCategory failed. status = " << status << ", reasion = \"" << reason << "\"" << LL_ENDL;
LL_WARNS("InvAPI") << "CreateInventoryCategory failed [status:"
<< status << "]: " << content << LL_ENDL;
}
virtual void result(const LLSD& content)
@ -1515,10 +1516,9 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
}
//If we get back an error (not found, etc...), handle it here
void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::string& reason)
void LLInventoryModel::fetchInventoryResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llinfos << "fetchInventory::error "
<< status << ": " << reason << llendl;
llwarns << "fetchInventory error [status:" << status << "]: " << content << llendl;
gInventory.notifyObservers();
}

View File

@ -88,7 +88,7 @@ public:
public:
fetchInventoryResponder(const LLSD& request_sd) : mRequestSD(request_sd) {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
protected:
LLSD mRequestSD;
};

View File

@ -386,7 +386,7 @@ class LLInventoryModelFetchItemResponder : public LLInventoryModel::fetchInvento
public:
LLInventoryModelFetchItemResponder(const LLSD& request_sd) : LLInventoryModel::fetchInventoryResponder(request_sd) {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
};
void LLInventoryModelFetchItemResponder::result( const LLSD& content )
@ -395,9 +395,9 @@ void LLInventoryModelFetchItemResponder::result( const LLSD& content )
LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1);
}
void LLInventoryModelFetchItemResponder::error( U32 status, const std::string& reason )
void LLInventoryModelFetchItemResponder::errorWithContent( U32 status, const std::string& reason, const LLSD& content )
{
LLInventoryModel::fetchInventoryResponder::error(status, reason);
LLInventoryModel::fetchInventoryResponder::errorWithContent(status, reason, content);
LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1);
}
@ -411,7 +411,7 @@ public:
{};
//LLInventoryModelFetchDescendentsResponder() {};
void result(const LLSD& content);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
protected:
BOOL getIsRecursive(const LLUUID& cat_id) const;
private:
@ -549,12 +549,12 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
}
// If we get back an error (not found, etc...), handle it here.
void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::string& reason)
void LLInventoryModelFetchDescendentsResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LLInventoryModelBackgroundFetch *fetcher = LLInventoryModelBackgroundFetch::getInstance();
llinfos << "LLInventoryModelFetchDescendentsResponder::error "
<< status << ": " << reason << llendl;
llinfos << "LLInventoryModelFetchDescendentsResponder::error [status:"
<< status << "]: " << content << llendl;
fetcher->incrFetchCount(-1);

View File

@ -567,7 +567,7 @@ LLMediaDataClient::Responder::Responder(const request_ptr_t &request)
}
/*virtual*/
void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
void LLMediaDataClient::Responder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
mRequest->stopTracking();
@ -599,8 +599,8 @@ void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
}
else
{
std::string msg = boost::lexical_cast<std::string>(status) + ": " + reason;
LL_WARNS("LLMediaDataClient") << *mRequest << " http error(" << msg << ")" << LL_ENDL;
LL_WARNS("LLMediaDataClient") << *mRequest << " http error [status:"
<< status << "]:" << content << ")" << LL_ENDL;
}
}
@ -1023,7 +1023,7 @@ LLMediaDataClient::Responder *LLObjectMediaNavigateClient::RequestNavigate::crea
}
/*virtual*/
void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason)
void LLObjectMediaNavigateClient::Responder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
getRequest()->stopTracking();
@ -1037,7 +1037,7 @@ void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string
// class
if (status == HTTP_SERVICE_UNAVAILABLE)
{
LLMediaDataClient::Responder::error(status, reason);
LLMediaDataClient::Responder::errorWithContent(status, reason, content);
}
else
{

View File

@ -195,7 +195,7 @@ protected:
public:
Responder(const request_ptr_t &request);
//If we get back an error (not found, etc...), handle it here
virtual void error(U32 status, const std::string& reason);
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
//If we get back a normal response, handle it here. Default just logs it.
virtual void result(const LLSD& content);
@ -401,7 +401,7 @@ protected:
public:
Responder(const request_ptr_t &request)
: LLMediaDataClient::Responder(request) {}
virtual void error(U32 status, const std::string& reason);
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
virtual void result(const LLSD &content);
private:
void mediaNavigateBounceBack();

View File

@ -1105,15 +1105,7 @@ void LLPanelEditWearable::saveChanges(bool force_save_as)
gAgentWearables.saveWearable(mWearablePtr->getType(), index, TRUE, new_name);
}
if (gAgent.getRegion() && gAgent.getRegion()->getCentralBakeVersion() > 0)
{
LLAppearanceMgr::getInstance()->incrementCofVersion();
}
else
{
// *HACK This should be removed when all regions support the IncrementCOFVersion capability.
incrementCofVersionLegacy();
}
}
void LLPanelEditWearable::revertChanges()

View File

@ -108,7 +108,7 @@ public:
virtual ~NavMeshStatusResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string& pReason);
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent);
protected:
@ -130,7 +130,7 @@ public:
virtual ~NavMeshResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string& pReason);
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent);
protected:
@ -151,7 +151,7 @@ public:
virtual ~AgentStateResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string& pReason);
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent);
protected:
@ -170,7 +170,7 @@ public:
virtual ~NavMeshRebakeResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string& pReason);
virtual void errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent);
protected:
@ -190,9 +190,11 @@ public:
virtual ~LinksetsResponder();
void handleObjectLinksetsResult(const LLSD &pContent);
void handleObjectLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL);
void handleObjectLinksetsError(U32 pStatus, const std::string &pReason,
const LLSD& pContent, const std::string &pURL);
void handleTerrainLinksetsResult(const LLSD &pContent);
void handleTerrainLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL);
void handleTerrainLinksetsError(U32 pStatus, const std::string &pReason,
const LLSD& pContent, const std::string &pURL);
protected:
@ -230,7 +232,7 @@ public:
virtual ~ObjectLinksetsResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string &pReason);
virtual void errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent);
protected:
@ -250,7 +252,7 @@ public:
virtual ~TerrainLinksetsResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string &pReason);
virtual void errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent);
protected:
@ -270,7 +272,7 @@ public:
virtual ~CharactersResponder();
virtual void result(const LLSD &pContent);
virtual void error(U32 pStatus, const std::string &pReason);
virtual void errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent);
protected:
@ -800,9 +802,9 @@ void NavMeshStatusResponder::result(const LLSD &pContent)
LLPathfindingManager::getInstance()->handleNavMeshStatusRequest(navMeshStatus, mRegion, mIsGetStatusOnly);
}
void NavMeshStatusResponder::error(U32 pStatus, const std::string& pReason)
void NavMeshStatusResponder::errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent)
{
llwarns << "error with request to URL '" << mCapabilityURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
llwarns << "NavMeshStatusResponder error [status:" << pStatus << "]: " << pContent << llendl;
LLPathfindingNavMeshStatus navMeshStatus(mRegionUUID);
LLPathfindingManager::getInstance()->handleNavMeshStatusRequest(navMeshStatus, mRegion, mIsGetStatusOnly);
}
@ -828,9 +830,9 @@ void NavMeshResponder::result(const LLSD &pContent)
mNavMeshPtr->handleNavMeshResult(pContent, mNavMeshVersion);
}
void NavMeshResponder::error(U32 pStatus, const std::string& pReason)
void NavMeshResponder::errorWithContent(U32 pStatus, const std::string& pReason, const LLSD& pContent)
{
mNavMeshPtr->handleNavMeshError(pStatus, pReason, mCapabilityURL, mNavMeshVersion);
mNavMeshPtr->handleNavMeshError(pStatus, pReason, pContent, mCapabilityURL, mNavMeshVersion);
}
//---------------------------------------------------------------------------
@ -855,9 +857,9 @@ void AgentStateResponder::result(const LLSD &pContent)
LLPathfindingManager::getInstance()->handleAgentState(canRebakeRegion);
}
void AgentStateResponder::error(U32 pStatus, const std::string &pReason)
void AgentStateResponder::errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent)
{
llwarns << "error with request to URL '" << mCapabilityURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
llwarns << "AgentStateResponder error [status:" << pStatus << "]: " << pContent << llendl;
LLPathfindingManager::getInstance()->handleAgentState(FALSE);
}
@ -881,9 +883,9 @@ void NavMeshRebakeResponder::result(const LLSD &pContent)
mRebakeNavMeshCallback(true);
}
void NavMeshRebakeResponder::error(U32 pStatus, const std::string &pReason)
void NavMeshRebakeResponder::errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent)
{
llwarns << "error with request to URL '" << mCapabilityURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
llwarns << "NavMeshRebakeResponder error [status:" << pStatus << "]: " << pContent << llendl;
mRebakeNavMeshCallback(false);
}
@ -916,9 +918,11 @@ void LinksetsResponder::handleObjectLinksetsResult(const LLSD &pContent)
}
}
void LinksetsResponder::handleObjectLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL)
void LinksetsResponder::handleObjectLinksetsError(U32 pStatus, const std::string &pReason,
const LLSD& pContent, const std::string &pURL)
{
llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
llwarns << "LinksetsResponder object linksets error with request to URL '" << pURL << "' [status:"
<< pStatus << "]: " << pContent << llendl;
mObjectMessagingState = kReceivedError;
if (mTerrainMessagingState != kWaiting)
{
@ -937,8 +941,11 @@ void LinksetsResponder::handleTerrainLinksetsResult(const LLSD &pContent)
}
}
void LinksetsResponder::handleTerrainLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL)
void LinksetsResponder::handleTerrainLinksetsError(U32 pStatus, const std::string &pReason,
const LLSD& pContent, const std::string &pURL)
{
llwarns << "LinksetsResponder terrain linksets error with request to URL '" << pURL << "' [status:"
<< pStatus << "]: " << pContent << llendl;
mTerrainMessagingState = kReceivedError;
if (mObjectMessagingState != kWaiting)
{
@ -988,9 +995,9 @@ void ObjectLinksetsResponder::result(const LLSD &pContent)
mLinksetsResponsderPtr->handleObjectLinksetsResult(pContent);
}
void ObjectLinksetsResponder::error(U32 pStatus, const std::string &pReason)
void ObjectLinksetsResponder::errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent)
{
mLinksetsResponsderPtr->handleObjectLinksetsError(pStatus, pReason, mCapabilityURL);
mLinksetsResponsderPtr->handleObjectLinksetsError(pStatus, pReason, pContent, mCapabilityURL);
}
//---------------------------------------------------------------------------
@ -1013,9 +1020,9 @@ void TerrainLinksetsResponder::result(const LLSD &pContent)
mLinksetsResponsderPtr->handleTerrainLinksetsResult(pContent);
}
void TerrainLinksetsResponder::error(U32 pStatus, const std::string &pReason)
void TerrainLinksetsResponder::errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent)
{
mLinksetsResponsderPtr->handleTerrainLinksetsError(pStatus, pReason, mCapabilityURL);
mLinksetsResponsderPtr->handleTerrainLinksetsError(pStatus, pReason, pContent, mCapabilityURL);
}
//---------------------------------------------------------------------------
@ -1040,9 +1047,9 @@ void CharactersResponder::result(const LLSD &pContent)
mCharactersCallback(mRequestId, LLPathfindingManager::kRequestCompleted, characterListPtr);
}
void CharactersResponder::error(U32 pStatus, const std::string &pReason)
void CharactersResponder::errorWithContent(U32 pStatus, const std::string &pReason, const LLSD& pContent)
{
llwarns << "error with request to URL '" << mCapabilityURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
llwarns << "CharactersResponder error [status:" << pStatus << "]: " << pContent << llendl;
LLPathfindingObjectListPtr characterListPtr = LLPathfindingObjectListPtr(new LLPathfindingCharacterList());
mCharactersCallback(mRequestId, LLPathfindingManager::kRequestError, characterListPtr);

View File

@ -184,9 +184,10 @@ void LLPathfindingNavMesh::handleNavMeshError()
setRequestStatus(kNavMeshRequestError);
}
void LLPathfindingNavMesh::handleNavMeshError(U32 pStatus, const std::string &pReason, const std::string &pURL, U32 pNavMeshVersion)
void LLPathfindingNavMesh::handleNavMeshError(U32 pStatus, const std::string &pReason, const LLSD& pContent, const std::string &pURL, U32 pNavMeshVersion)
{
llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
llwarns << "LLPathfindingNavMesh error with request to URL '" << pURL << "' [status:"
<< pStatus << "]: " << pContent << llendl;
if (mNavMeshStatus.getVersion() == pNavMeshVersion)
{
handleNavMeshError();

View File

@ -74,7 +74,7 @@ public:
void handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion);
void handleNavMeshNotEnabled();
void handleNavMeshError();
void handleNavMeshError(U32 pStatus, const std::string &pReason, const std::string &pURL, U32 pNavMeshVersion);
void handleNavMeshError(U32 pStatus, const std::string &pReason, const LLSD& pContent, const std::string &pURL, U32 pNavMeshVersion);
protected:

View File

@ -43,10 +43,10 @@ public:
}
//If we get back an error (not found, etc...), handle it here
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "LLProductInfoRequest::error("
<< status << ": " << reason << ")" << llendl;
llwarns << "LLProductInfoRequest error [status:"
<< status << ":] " << content << llendl;
}
};

View File

@ -62,10 +62,10 @@ void LLRemoteParcelRequestResponder::result(const LLSD& content)
//If we get back an error (not found, etc...), handle it here
//virtual
void LLRemoteParcelRequestResponder::error(U32 status, const std::string& reason)
void LLRemoteParcelRequestResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llinfos << "LLRemoteParcelRequest::error("
<< status << ": " << reason << ")" << llendl;
llwarns << "LLRemoteParcelRequest error [status:"
<< status << "]: " << content << llendl;
// Panel inspecting the information may be closed and destroyed
// before this response is received.

View File

@ -44,7 +44,7 @@ public:
/*virtual*/ void result(const LLSD& content);
//If we get back an error (not found, etc...), handle it here
/*virtual*/ void error(U32 status, const std::string& reason);
/*virtual*/ void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
protected:
LLHandle<LLRemoteParcelInfoObserver> mObserverHandle;

View File

@ -726,9 +726,9 @@ public:
mSessionID = session_id;
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << status << ": " << reason << llendl;
llwarns << "ModerationResponder error [status:" << status << "]: " << content << llendl;
if ( gIMMgr )
{

View File

@ -3873,7 +3873,7 @@ bool process_login_success_response(U32 &first_sim_size_x, U32 &first_sim_size_y
std::string agent_appearance_url = response["agent_appearance_service"];
if (!agent_appearance_url.empty())
{
gSavedSettings.setString("AgentAppearanceServiceURL", agent_appearance_url);
LLAppearanceMgr::instance().setAppearanceServiceURL(agent_appearance_url);
}
// Set the location of the snapshot sharing config endpoint

View File

@ -33,9 +33,10 @@ LLUploadModelPremissionsResponder::LLUploadModelPremissionsResponder(const LLHan
{
}
void LLUploadModelPremissionsResponder::error(U32 status, const std::string& reason)
void LLUploadModelPremissionsResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "LLUploadModelPremissionsResponder::error("<< status << ": " << reason << ")" << llendl;
llwarns << "LLUploadModelPremissionsResponder error [status:"
<< status << "]: " << content << llendl;
LLUploadPermissionsObserver* observer = mObserverHandle.get();

View File

@ -86,7 +86,7 @@ public:
LLUploadModelPremissionsResponder(const LLHandle<LLUploadPermissionsObserver>& observer);
void error(U32 status, const std::string& reason);
void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
void result(const LLSD& content);

View File

@ -61,8 +61,10 @@ class LLSetDisplayNameResponder : public LLHTTPClient::Responder
{
public:
// only care about errors
/*virtual*/ void error(U32 status, const std::string& reason)
/*virtual*/ void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
llwarns << "LLSetDisplayNameResponder error [status:"
<< status << "]: " << content << llendl;
LLViewerDisplayName::sSetDisplayNameSignal(false, "", LLSD());
LLViewerDisplayName::sSetDisplayNameSignal.disconnect_all_slots();
}

View File

@ -704,12 +704,12 @@ public:
}
}
void error(U32 statusNum, const std::string& reason)
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llwarns
<< "Transport error requesting object cost "
<< "HTTP status: " << statusNum << ", reason: "
<< reason << "." << llendl;
<< "[status: " << statusNum << "]: "
<< content << llendl;
// TODO*: Error message to user
// For now just clear the request from the pending list
@ -793,12 +793,12 @@ public:
}
}
void error(U32 statusNum, const std::string& reason)
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llwarns
<< "Transport error requesting object physics flags "
<< "HTTP status: " << statusNum << ", reason: "
<< reason << "." << llendl;
<< "[status: " << statusNum << "]: "
<< content << llendl;
// TODO*: Error message to user
// For now just clear the request from the pending list

View File

@ -212,9 +212,9 @@ public:
virtual ~BaseCapabilitiesComplete()
{ }
void error(U32 statusNum, const std::string& reason)
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
LL_WARNS2("AppInit", "Capabilities") << "[status:" << statusNum << ":] " << content << LL_ENDL;
LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
if (regionp)
{
@ -280,8 +280,11 @@ public:
virtual ~BaseCapabilitiesCompleteTracker()
{ }
void error(U32 statusNum, const std::string& reason)
{ }
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llwarns << "BaseCapabilitiesCompleteTracker error [status:"
<< statusNum << "]: " << content << llendl;
}
void result(const LLSD& content)
{
@ -1790,9 +1793,9 @@ public:
{ }
void error(U32 statusNum, const std::string& reason)
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
LL_WARNS2("AppInit", "SimulatorFeatures") << statusNum << ": " << reason << LL_ENDL;
LL_WARNS2("AppInit", "SimulatorFeatures") << "[status:" << statusNum << "]: " << content << LL_ENDL;
retry();
}

View File

@ -530,10 +530,10 @@ class ViewerStatsResponder : public LLHTTPClient::Responder
public:
ViewerStatsResponder() { }
void error(U32 statusNum, const std::string& reason)
void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
{
llinfos << "ViewerStatsResponder::error " << statusNum << " "
<< reason << llendl;
llwarns << "ViewerStatsResponder error [status:" << statusNum << "]: "
<< content << llendl;
}
void result(const LLSD& content)

View File

@ -3224,6 +3224,10 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
S32 last_received_cof_version = LLAppearanceMgr::instance().getLastAppearanceUpdateCOFVersion();
debug_line += llformat(" - cof: %d req: %d rcv:%d",
curr_cof_version, last_request_cof_version, last_received_cof_version);
if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure"))
{
debug_line += " FORCING ERRS";
}
}
addDebugText(debug_line);
}
@ -4788,7 +4792,8 @@ const std::string LLVOAvatar::getImageURL(const U8 te, const LLUUID &uuid)
std::string url = "";
if (isUsingServerBakes())
{
if (gSavedSettings.getString("AgentAppearanceServiceURL").empty())
const std::string& appearance_service_url = LLAppearanceMgr::instance().getAppearanceServiceURL();
if (appearance_service_url.empty())
{
// Probably a server-side issue if we get here:
llwarns << "AgentAppearanceServiceURL not set - Baked texture requests will fail" << llendl;
@ -4798,7 +4803,7 @@ const std::string LLVOAvatar::getImageURL(const U8 te, const LLUUID &uuid)
const LLAvatarAppearanceDictionary::TextureEntry* texture_entry = LLAvatarAppearanceDictionary::getInstance()->getTexture((ETextureIndex)te);
if (texture_entry != NULL)
{
url = gSavedSettings.getString("AgentAppearanceServiceURL") + "texture/" + getID().asString() + "/" + texture_entry->mDefaultImageName + "/" + uuid.asString();
url = appearance_service_url + "texture/" + getID().asString() + "/" + texture_entry->mDefaultImageName + "/" + uuid.asString();
//llinfos << "baked texture url: " << url << llendl;
}
}
@ -7665,7 +7670,7 @@ void LLVOAvatar::onBakedTextureLoaded(BOOL success,
LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src,
S32 discard_level, BOOL final, void* userdata)
{
// llinfos << "onBakedTextureLoaded: " << src_vi->getID() << llendl;
LL_DEBUGS("Avatar") << "onBakedTextureLoaded: " << src_vi->getID() << LL_ENDL;
LLUUID id = src_vi->getID();
LLUUID *avatar_idp = (LLUUID *)userdata;

View File

@ -2275,19 +2275,41 @@ void LLVOAvatarSelf::dumpTotalLocalTextureByteCount()
BOOL LLVOAvatarSelf::getIsCloud() const
{
// do we have our body parts?
if (gAgentWearables.getWearableCount(LLWearableType::WT_SHAPE) == 0 ||
gAgentWearables.getWearableCount(LLWearableType::WT_HAIR) == 0 ||
gAgentWearables.getWearableCount(LLWearableType::WT_EYES) == 0 ||
gAgentWearables.getWearableCount(LLWearableType::WT_SKIN) == 0)
// Let people know why they're clouded without spamming them into oblivion.
bool do_warn = false;
static LLTimer time_since_notice;
F32 update_freq = 30.0;
if (time_since_notice.getElapsedTimeF32() > update_freq)
{
lldebugs << "No body parts" << llendl;
time_since_notice.reset();
do_warn = true;
}
// do we have our body parts?
S32 shape_count = gAgentWearables.getWearableCount(LLWearableType::WT_SHAPE);
S32 hair_count = gAgentWearables.getWearableCount(LLWearableType::WT_HAIR);
S32 eye_count = gAgentWearables.getWearableCount(LLWearableType::WT_EYES);
S32 skin_count = gAgentWearables.getWearableCount(LLWearableType::WT_SKIN);
if (!shape_count || !hair_count || !eye_count || !skin_count)
{
if (do_warn)
{
llinfos << "Self is clouded due to missing one or more required body parts: "
<< (shape_count ? "" : "SHAPE ")
<< (hair_count ? "" : "HAIR ")
<< (eye_count ? "" : "EYES ")
<< (skin_count ? "" : "SKIN ")
<< llendl;
}
return TRUE;
}
if (!isTextureDefined(TEX_HAIR, 0))
{
lldebugs << "No hair texture" << llendl;
if (do_warn)
{
llinfos << "Self is clouded because of no hair texture" << llendl;
}
return TRUE;
}
@ -2296,14 +2318,20 @@ BOOL LLVOAvatarSelf::getIsCloud() const
if (!isLocalTextureDataAvailable(getLayerSet(BAKED_LOWER)) &&
(!isTextureDefined(TEX_LOWER_BAKED, 0)))
{
lldebugs << "Lower textures not baked" << llendl;
if (do_warn)
{
llinfos << "Self is clouded because lower textures not baked" << llendl;
}
return TRUE;
}
if (!isLocalTextureDataAvailable(getLayerSet(BAKED_UPPER)) &&
(!isTextureDefined(TEX_UPPER_BAKED, 0)))
{
lldebugs << "Upper textures not baked" << llendl;
if (do_warn)
{
llinfos << "Self is clouded because upper textures not baked" << llendl;
}
return TRUE;
}
@ -2320,7 +2348,11 @@ BOOL LLVOAvatarSelf::getIsCloud() const
const LLViewerTexture* baked_img = getImage( texture_data.mTextureIndex, 0 );
if (!baked_img || !baked_img->hasGLTexture())
{
lldebugs << "Texture at index " << i << " (texture index is " << texture_data.mTextureIndex << ") is not loaded" << llendl;
if (do_warn)
{
llinfos << "Self is clouded because texture at index " << i
<< " (texture index is " << texture_data.mTextureIndex << ") is not loaded" << llendl;
}
return TRUE;
}
}
@ -2561,7 +2593,7 @@ public:
else
{
LL_WARNS("Avatar") << "Failed " << status << " reason " << reason << LL_ENDL;
error(status,reason);
errorWithContent(status,reason,content);
}
}
@ -2737,11 +2769,12 @@ public:
}
// Error
/*virtual*/ void error(U32 status, const std::string& reason)
/*virtual*/ void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
if (isAgentAvatarValid())
{
LL_DEBUGS("Avatar") << "failed, will rebake" << llendl;
LL_DEBUGS("Avatar") << "failed, will rebake [status:"
<< status << "]: " << content << llendl;
forceAppearanceUpdate();
}
}
@ -2766,7 +2799,7 @@ void LLVOAvatarSelf::checkForUnsupportedServerBakeAppearance()
return;
// if baked image service is unknown, need to refresh.
if (gSavedSettings.getString("AgentAppearanceServiceURL").empty())
if (LLAppearanceMgr::instance().getAppearanceServiceURL().empty())
{
CheckAgentAppearanceServiceResponder::forceAppearanceUpdate();
}
@ -3260,8 +3293,9 @@ void LLVOAvatarSelf::onCustomizeStart(bool disable_camera_switch)
gAgentAvatarp->idleUpdateAppearanceAnimation();
#endif
gAgentAvatarp->invalidateAll();
gAgentAvatarp->updateMeshTextures();
gAgentAvatarp->updateTextures(); // call updateTextureStats
gAgentAvatarp->invalidateAll(); // mark all bakes as dirty, request updates
gAgentAvatarp->updateMeshTextures(); // make sure correct textures are applied to the avatar mesh.
}
}

View File

@ -56,7 +56,8 @@ class LLVoiceCallCapResponder : public LLHTTPClient::Responder
public:
LLVoiceCallCapResponder(const LLUUID& session_id) : mSessionID(session_id) {};
virtual void error(U32 status, const std::string& reason); // called with bad status codes
// called with bad status codes
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
virtual void result(const LLSD& content);
private:
@ -64,11 +65,10 @@ private:
};
void LLVoiceCallCapResponder::error(U32 status, const std::string& reason)
void LLVoiceCallCapResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_WARNS("Voice") << "LLVoiceCallCapResponder::error("
<< status << ": " << reason << ")"
<< LL_ENDL;
LL_WARNS("Voice") << "LLVoiceCallCapResponder error [status:"
<< status << "]: " << content << LL_ENDL;
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(mSessionID);
if ( channelp )
{

View File

@ -126,17 +126,18 @@ public:
mRetries = retries;
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_WARNS("Voice") << "ProvisionVoiceAccountRequest returned an error, "
<< ( (mRetries > 0) ? "retrying" : "too many retries (giving up)" )
<< status << "]: " << content << LL_ENDL;
if ( mRetries > 0 )
{
LL_WARNS("Voice") << "ProvisionVoiceAccountRequest returned an error, retrying. status = " << status << ", reason = \"" << reason << "\"" << LL_ENDL;
LLVivoxVoiceClient::getInstance()->requestVoiceAccountProvision(
mRetries - 1);
LLVivoxVoiceClient::getInstance()->requestVoiceAccountProvision(mRetries - 1);
}
else
{
LL_WARNS("Voice") << "ProvisionVoiceAccountRequest returned an error, too many retries (giving up). status = " << status << ", reason = \"" << reason << "\"" << LL_ENDL;
LLVivoxVoiceClient::getInstance()->giveUp();
}
}
@ -195,18 +196,18 @@ class LLVivoxVoiceClientCapResponder : public LLHTTPClient::Responder
public:
LLVivoxVoiceClientCapResponder(LLVivoxVoiceClient::state requesting_state) : mRequestingState(requesting_state) {};
virtual void error(U32 status, const std::string& reason); // called with bad status codes
// called with bad status codes
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
virtual void result(const LLSD& content);
private:
LLVivoxVoiceClient::state mRequestingState; // state
};
void LLVivoxVoiceClientCapResponder::error(U32 status, const std::string& reason)
void LLVivoxVoiceClientCapResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_WARNS("Voice") << "LLVivoxVoiceClientCapResponder::error("
<< status << ": " << reason << ")"
<< LL_ENDL;
LL_WARNS("Voice") << "LLVivoxVoiceClientCapResponder error [status:"
<< status << "]: " << content << LL_ENDL;
LLVivoxVoiceClient::getInstance()->sessionTerminate();
}

View File

@ -265,6 +265,8 @@ LLViewerWearable* LLWearableList::createNewWearable( LLWearableType::EType type,
perm.initMasks(PERM_ALL, PERM_ALL, PERM_NONE, PERM_NONE, PERM_MOVE | PERM_TRANSFER);
wearable->setPermissions(perm);
wearable->setDefinitionVersion(LLWearable::getCurrentDefinitionVersion());
// Description and sale info have default values.
wearable->setParamsToDefaults();
wearable->setTexturesToDefaults();

View File

@ -68,9 +68,9 @@ public:
}
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
LL_WARNS("WebSharing") << "Error [status:" << status << "]: " << content << LL_ENDL;
}
virtual void result(const LLSD& content)
@ -99,7 +99,7 @@ public:
/// Left empty to override the default LLSD parsing behaviour.
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
if (HTTP_UNAUTHORIZED == status)
{
@ -108,7 +108,7 @@ public:
}
else
{
LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
LL_WARNS("WebSharing") << "Error [status:" << status << "]: " << content << LL_ENDL;
LLWebSharing::instance().retryOpenIDAuth();
}
@ -152,9 +152,9 @@ public:
}
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
LL_WARNS("WebSharing") << "Error [status:" << status << "]: " << content << LL_ENDL;
LLWebSharing::instance().retryOpenIDAuth();
}
@ -221,9 +221,9 @@ public:
}
}
virtual void error(U32 status, const std::string& reason)
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_WARNS("WebSharing") << "Error [" << status << "]: " << reason << LL_ENDL;
LL_WARNS("WebSharing") << "Error [status:" << status << "]: " << content << LL_ENDL;
}
virtual void result(const LLSD& content)

View File

@ -121,9 +121,11 @@ LLEnvironmentRequestResponder::LLEnvironmentRequestResponder()
LLEnvManagerNew::getInstance()->onRegionSettingsResponse(unvalidated_content);
}
/*virtual*/ void LLEnvironmentRequestResponder::error(U32 status, const std::string& reason)
/*virtual*/
void LLEnvironmentRequestResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
LL_INFOS("WindlightCaps") << "Got an error, not using region windlight..." << LL_ENDL;
LL_INFOS("WindlightCaps") << "Got an error, not using region windlight... [status:"
<< status << "]: " << content << LL_ENDL;
LLEnvManagerNew::getInstance()->onRegionSettingsResponse(LLSD());
}
@ -190,14 +192,15 @@ bool LLEnvironmentApply::initiateRequest(const LLSD& content)
LLEnvManagerNew::instance().onRegionSettingsApplyResponse(false);
}
}
/*virtual*/ void LLEnvironmentApplyResponder::error(U32 status, const std::string& reason)
/*virtual*/
void LLEnvironmentApplyResponder::errorWithContent(U32 status, const std::string& reason, const LLSD& content)
{
std::stringstream msg;
msg << reason << " (Code " << status << ")";
LL_WARNS("WindlightCaps") << "Couldn't apply windlight settings to region! Reason: " << msg << LL_ENDL;
LL_WARNS("WindlightCaps") << "Couldn't apply windlight settings to region! [status:"
<< status << "]: " << content << LL_ENDL;
LLSD args(LLSD::emptyMap());
std::stringstream msg;
msg << reason << " (Code " << status << ")";
args["FAIL_REASON"] = msg.str();
LLNotificationsUtil::add("WLRegionApplyFail", args);
}

View File

@ -47,7 +47,7 @@ class LLEnvironmentRequestResponder: public LLHTTPClient::Responder
LOG_CLASS(LLEnvironmentRequestResponder);
public:
virtual void result(const LLSD& content);
virtual void error(U32 status, const std::string& reason);
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
private:
friend class LLEnvironmentRequest;
@ -89,7 +89,8 @@ public:
*/
virtual void result(const LLSD& content);
virtual void error(U32 status, const std::string& reason); // non-200 errors only
// non-200 errors only
virtual void errorWithContent(U32 status, const std::string& reason, const LLSD& content);
private:
friend class LLEnvironmentApply;

View File

@ -126,7 +126,9 @@ void LLHTTPClient::post(
result[LLTextureEntry::OBJECT_ID_KEY] = body[LLTextureEntry::OBJECT_ID_KEY];
if ( url == FAKE_OBJECT_MEDIA_CAP_URL_503 )
{
responder->error(HTTP_SERVICE_UNAVAILABLE, "fake reason");
LLSD content;
content["reason"] = "fake reason";
responder->errorWithContent(HTTP_SERVICE_UNAVAILABLE, "fake reason", content);
return;
}
else if (url == FAKE_OBJECT_MEDIA_NAVIGATE_CAP_URL_ERROR)