diff options
| -rw-r--r-- | indra/llmessage/llcorehttputil.cpp | 22 | ||||
| -rw-r--r-- | indra/llmessage/llcorehttputil.h | 18 | ||||
| -rwxr-xr-x | indra/newview/llagent.cpp | 193 | ||||
| -rwxr-xr-x | indra/newview/llagent.h | 18 | ||||
| -rwxr-xr-x | indra/newview/llagentlanguage.cpp | 27 | ||||
| -rwxr-xr-x | indra/newview/llappearancemgr.cpp | 316 | ||||
| -rwxr-xr-x | indra/newview/llappearancemgr.h | 3 | 
7 files changed, 222 insertions, 375 deletions
diff --git a/indra/llmessage/llcorehttputil.cpp b/indra/llmessage/llcorehttputil.cpp index 1fd7e7be2e..9ccebabab4 100644 --- a/indra/llmessage/llcorehttputil.cpp +++ b/indra/llmessage/llcorehttputil.cpp @@ -848,10 +848,10 @@ LLCore::HttpStatus HttpCoroutineAdapter::getStatusFromLLSD(const LLSD &httpResul  }  /*static*/ -void HttpCoroutineAdapter::callbackHttpGet(const std::string &url, completionCallback_t success, completionCallback_t failure) +void HttpCoroutineAdapter::callbackHttpGet(const std::string &url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, completionCallback_t failure)  {      LLCoros::instance().launch("HttpCoroutineAdapter::genericGetCoro", -        boost::bind(&HttpCoroutineAdapter::trivialGetCoro, _1, url, success, failure)); +        boost::bind(&HttpCoroutineAdapter::trivialGetCoro, _1, url, policyId, success, failure));  }  /*static*/ @@ -865,13 +865,12 @@ void HttpCoroutineAdapter::messageHttpGet(const std::string &url, const std::str  }  /*static*/ -void HttpCoroutineAdapter::trivialGetCoro(LLCoros::self& self, std::string url, completionCallback_t success, completionCallback_t failure) +void HttpCoroutineAdapter::trivialGetCoro(LLCoros::self& self, std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, completionCallback_t failure)  { -    LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);      LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t -        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericGetCoro", httpPolicy)); +        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericGetCoro", policyId));      LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); -    LLCore::HttpOptions::ptr_t httpOpts = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions); +    LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions, false);      httpOpts->setWantHeaders(true); @@ -899,10 +898,10 @@ void HttpCoroutineAdapter::trivialGetCoro(LLCoros::self& self, std::string url,  }  /*static*/ -void HttpCoroutineAdapter::callbackHttpPost(const std::string &url, const LLSD &postData, completionCallback_t success, completionCallback_t failure) +void HttpCoroutineAdapter::callbackHttpPost(const std::string &url, LLCore::HttpRequest::policy_t policyId, const LLSD &postData, completionCallback_t success, completionCallback_t failure)  {      LLCoros::instance().launch("HttpCoroutineAdapter::genericPostCoro", -        boost::bind(&HttpCoroutineAdapter::trivialPostCoro, _1, url, postData, success, failure)); +        boost::bind(&HttpCoroutineAdapter::trivialPostCoro, _1, url, policyId, postData, success, failure));  }  /*static*/ @@ -917,13 +916,12 @@ void HttpCoroutineAdapter::messageHttpPost(const std::string &url, const LLSD &p  }  /*static*/ -void HttpCoroutineAdapter::trivialPostCoro(LLCoros::self& self, std::string url, LLSD postData, completionCallback_t success, completionCallback_t failure) +void HttpCoroutineAdapter::trivialPostCoro(LLCoros::self& self, std::string url, LLCore::HttpRequest::policy_t policyId, LLSD postData, completionCallback_t success, completionCallback_t failure)  { -    LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);      LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t -        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericPostCoro", httpPolicy)); +        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericPostCoro", policyId));      LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); -    LLCore::HttpOptions::ptr_t httpOpts = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions); +    LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions, false);      httpOpts->setWantHeaders(true); diff --git a/indra/llmessage/llcorehttputil.h b/indra/llmessage/llcorehttputil.h index e6c9d2463c..e98399c985 100644 --- a/indra/llmessage/llcorehttputil.h +++ b/indra/llmessage/llcorehttputil.h @@ -427,10 +427,18 @@ public:      /// should match this form.      /// @sa callbackHttpGet      /// @sa callbackHttpPost -    typedef boost::function<void (const LLSD &)> completionCallback_t; +    typedef boost::function<void(const LLSD &)> completionCallback_t; -    static void callbackHttpGet(const std::string &url, completionCallback_t success = NULL, completionCallback_t failure = NULL); -    static void callbackHttpPost(const std::string &url, const LLSD &postData, completionCallback_t success = NULL, completionCallback_t failure = NULL); +    static void callbackHttpGet(const std::string &url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success = NULL, completionCallback_t failure = NULL); +    static void callbackHttpGet(const std::string &url, completionCallback_t success = NULL, completionCallback_t failure = NULL) +    { +        callbackHttpGet(url, LLCore::HttpRequest::DEFAULT_POLICY_ID, success, failure); +    } +    static void callbackHttpPost(const std::string &url, LLCore::HttpRequest::policy_t policyId, const LLSD &postData, completionCallback_t success = NULL, completionCallback_t failure = NULL); +    static void callbackHttpPost(const std::string &url, const LLSD &postData, completionCallback_t success = NULL, completionCallback_t failure = NULL) +    { +        callbackHttpPost(url, LLCore::HttpRequest::DEFAULT_POLICY_ID, postData, success, failure); +    }      /// Generic Get and post routines for HTTP via coroutines.      /// These static methods do all required setup for the GET or POST operation. @@ -471,8 +479,8 @@ private:          const std::string & url, LLCore::HttpOptions::ptr_t &options,          LLCore::HttpHeaders::ptr_t &headers, HttpCoroHandler::ptr_t &handler); -    static void trivialGetCoro(LLCoros::self& self, std::string url, completionCallback_t success, completionCallback_t failure); -    static void trivialPostCoro(LLCoros::self& self, std::string url, LLSD postData, completionCallback_t success, completionCallback_t failure); +    static void trivialGetCoro(LLCoros::self& self, std::string url, LLCore::HttpRequest::policy_t policyId, completionCallback_t success, completionCallback_t failure); +    static void trivialPostCoro(LLCoros::self& self, std::string url, LLCore::HttpRequest::policy_t policyId, LLSD postData, completionCallback_t success, completionCallback_t failure);      void checkDefaultHeaders(LLCore::HttpHeaders::ptr_t &headers); diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index b983a636b6..df304d66c3 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2550,83 +2550,6 @@ int LLAgent::convertTextToMaturity(char text)  	return LLAgentAccess::convertTextToMaturity(text);  } -//========================================================================= -class LLMaturityHttpHandler : public LLHttpSDHandler -{ -public: -	LLMaturityHttpHandler(LLAgent *agent, U8 preferred, U8 previous): -		LLHttpSDHandler(), -		mAgent(agent), -		mPreferredMaturity(preferred), -		mPreviousMaturity(previous) -	{ } - -	virtual ~LLMaturityHttpHandler() -	{ } - -protected: -	virtual void onSuccess(LLCore::HttpResponse * response, const LLSD &content); -	virtual void onFailure(LLCore::HttpResponse * response, LLCore::HttpStatus status); - -private: -	U8			parseMaturityFromServerResponse(const LLSD &pContent) const; - -	LLAgent *	mAgent; -	U8			mPreferredMaturity; -	U8          mPreviousMaturity; - -}; - -//------------------------------------------------------------------------- -void LLMaturityHttpHandler::onSuccess(LLCore::HttpResponse * response, const LLSD &content) -{ -	U8 actualMaturity = parseMaturityFromServerResponse(content); - -	if (actualMaturity != mPreferredMaturity) -	{ -		LL_WARNS() << "while attempting to change maturity preference from '" -			<< LLViewerRegion::accessToString(mPreviousMaturity) -			<< "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) -			<< "', the server responded with '" -			<< LLViewerRegion::accessToString(actualMaturity) -			<< "' [value:" << static_cast<U32>(actualMaturity) -			<< "], " << LL_ENDL; -	} -	mAgent->handlePreferredMaturityResult(actualMaturity); -} - -void LLMaturityHttpHandler::onFailure(LLCore::HttpResponse * response, LLCore::HttpStatus status) -{ -	LL_WARNS() << "while attempting to change maturity preference from '" -		<< LLViewerRegion::accessToString(mPreviousMaturity) -		<< "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) -		<< "', " << LL_ENDL; -	mAgent->handlePreferredMaturityError(); -} - -U8 LLMaturityHttpHandler::parseMaturityFromServerResponse(const LLSD &pContent) const -{ -	U8 maturity = SIM_ACCESS_MIN; - -	llassert(pContent.isDefined()); -	llassert(pContent.isMap()); -	llassert(pContent.has("access_prefs")); -	llassert(pContent.get("access_prefs").isMap()); -	llassert(pContent.get("access_prefs").has("max")); -	llassert(pContent.get("access_prefs").get("max").isString()); -	if (pContent.isDefined() && pContent.isMap() && pContent.has("access_prefs") -		&& pContent.get("access_prefs").isMap() && pContent.get("access_prefs").has("max") -		&& pContent.get("access_prefs").get("max").isString()) -	{ -		LLSD::String actualPreference = pContent.get("access_prefs").get("max").asString(); -		LLStringUtil::trim(actualPreference); -		maturity = LLViewerRegion::shortStringToAccess(actualPreference); -	} - -	return maturity; -} -//========================================================================= -  void LLAgent::handlePreferredMaturityResult(U8 pServerMaturity)  {  	// Update the number of responses received @@ -2761,76 +2684,88 @@ void LLAgent::sendMaturityPreferenceToServer(U8 pPreferredMaturity)  			LL_WARNS("Agent") << "Region is not defined, can not change Maturity setting." << LL_ENDL;  			return;  		} -		std::string url = getRegion()->getCapability("UpdateAgentInformation"); - -		// If the capability is not defined, report it as an error -		if (url.empty()) -		{ -			LL_WARNS("Agent") << "'UpdateAgentInformation' is not defined for region" << LL_ENDL; -			return; -		} - -		LLMaturityHttpHandler * handler = new LLMaturityHttpHandler(this, pPreferredMaturity, mLastKnownResponseMaturity);  		LLSD access_prefs = LLSD::emptyMap();  		access_prefs["max"] = LLViewerRegion::accessToShortString(pPreferredMaturity);  		LLSD postData = LLSD::emptyMap();  		postData["access_prefs"] = access_prefs; -		LL_INFOS() << "Sending viewer preferred maturity to '" << LLViewerRegion::accessToString(pPreferredMaturity) -			<< "' via capability to: " << url << LL_ENDL; - -		LLCore::HttpHandle handle = requestPostCapability("UpdateAgentInformation", url, postData, handler); +		LL_INFOS() << "Sending viewer preferred maturity to '" << LLViewerRegion::accessToString(pPreferredMaturity) << LL_ENDL; -		if (handle == LLCORE_HTTP_HANDLE_INVALID) -		{ -			delete handler; -			LL_WARNS("Agent") << "Maturity request post failed." << LL_ENDL; -		} +        if (!requestPostCapability("UpdateAgentInformation", postData, +            static_cast<httpCallback_t>(boost::bind(&LLAgent::processMaturityPreferenceFromServer, this, _1, pPreferredMaturity)), +            static_cast<httpCallback_t>(boost::bind(&LLAgent::handlePreferredMaturityError, this)) +            )) +        { +            LL_WARNS("Agent") << "Maturity request post failed." << LL_ENDL; +        }  	}  } -// *TODO:RIDER Convert this system to using the coroutine scheme for HTTP communications -//  -LLCore::HttpHandle LLAgent::requestPostCapability(const std::string &cap, const std::string &url, LLSD &postData, LLHttpSDHandler *usrhndlr) + +void LLAgent::processMaturityPreferenceFromServer(const LLSD &result, U8 perferredMaturity)  { -	LLHttpSDHandler * handler = (usrhndlr) ? usrhndlr : new LLHttpSDGenericHandler(cap); -	LLCore::HttpHandle handle = LLCoreHttpUtil::requestPostWithLLSD(mHttpRequest, -		mHttpPolicy, mHttpPriority, url, -		postData, mHttpOptions, mHttpHeaders, handler); +    U8 maturity = SIM_ACCESS_MIN; -	if (handle == LLCORE_HTTP_HANDLE_INVALID) -	{ -        // If no handler was passed in we delete the handler default handler allocated  -        // at the start of this function. -        // *TODO: Change this metaphore to use boost::shared_ptr<> for handlers.  Requires change in LLCore::HTTP -		if (!usrhndlr) -			delete handler; -		LLCore::HttpStatus status = mHttpRequest->getStatus(); -		LL_WARNS("Agent") << "'" << cap << "' request POST failed. Reason "  -			<< status.toTerseString() << " \"" << status.toString() << "\"" << LL_ENDL; -	} -	return handle; +    llassert(result.isDefined()); +    llassert(result.isMap()); +    llassert(result.has("access_prefs")); +    llassert(result.get("access_prefs").isMap()); +    llassert(result.get("access_prefs").has("max")); +    llassert(result.get("access_prefs").get("max").isString()); +    if (result.isDefined() && result.isMap() && result.has("access_prefs") +        && result.get("access_prefs").isMap() && result.get("access_prefs").has("max") +        && result.get("access_prefs").get("max").isString()) +    { +        LLSD::String actualPreference = result.get("access_prefs").get("max").asString(); +        LLStringUtil::trim(actualPreference); +        maturity = LLViewerRegion::shortStringToAccess(actualPreference); +    } + +    if (maturity != perferredMaturity) +    { +        LL_WARNS() << "while attempting to change maturity preference from '" +            << LLViewerRegion::accessToString(mLastKnownResponseMaturity) +            << "' to '" << LLViewerRegion::accessToString(perferredMaturity) +            << "', the server responded with '" +            << LLViewerRegion::accessToString(maturity) +            << "' [value:" << static_cast<U32>(maturity) +            << "], " << LL_ENDL; +    } +    handlePreferredMaturityResult(maturity);  } -LLCore::HttpHandle LLAgent::requestGetCapability(const std::string &cap, const std::string &url, LLHttpSDHandler *usrhndlr) + +bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure)  { -    LLHttpSDHandler * handler = (usrhndlr) ? usrhndlr : new LLHttpSDGenericHandler(cap); -    LLCore::HttpHandle handle = mHttpRequest->requestGet(mHttpPolicy, mHttpPriority,  -            url, mHttpOptions.get(), mHttpHeaders.get(), handler); +    std::string url; + +    url = getRegion()->getCapability(capName); -    if (handle == LLCORE_HTTP_HANDLE_INVALID) +    if (url.empty())      { -        // If no handler was passed in we delete the handler default handler allocated  -        // at the start of this function. -        // *TODO: Change this metaphore to use boost::shared_ptr<> for handlers.  Requires change in LLCore::HTTP -        if (!usrhndlr) -            delete handler; -        LLCore::HttpStatus status = mHttpRequest->getStatus(); -        LL_WARNS("Agent") << "'" << cap << "' request GET failed. Reason " -            << status.toTerseString() << " \"" << status.toString() << "\"" << LL_ENDL; +        LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL; +        return false;      } -    return handle; + +    LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, mHttpPolicy, postData, cbSuccess, cbFailure); +    return true; +} + +bool LLAgent::requestGetCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ +    std::string url; + +    url = getRegion()->getCapability(capName); + +    if (url.empty()) +    { +        LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL; +        return false; +    } + +    LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(url, mHttpPolicy, cbSuccess, cbFailure); +    return true;  }  BOOL LLAgent::getAdminOverride() const	 diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 1bad35751f..745c0b063a 100755 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -36,9 +36,7 @@  #include "llpermissionsflags.h"  #include "llevents.h"  #include "v3dmath.h" -#include "httprequest.h" -#include "httpheaders.h" -#include "httpoptions.h" +#include "llcorehttputil.h"  #include <boost/function.hpp>  #include <boost/shared_ptr.hpp> @@ -66,6 +64,8 @@ class LLUIColor;  class LLTeleportRequest;  class LLHttpSDHandler; + +  typedef boost::shared_ptr<LLTeleportRequest> LLTeleportRequestPtr;  //-------------------------------------------------------------------- @@ -638,6 +638,8 @@ public:  	void            setMaturityRatingChangeDuringTeleport(U8 pMaturityRatingChange);  private: + +  	friend class LLTeleportRequest;  	friend class LLTeleportRequestViaLandmark;  	friend class LLTeleportRequestViaLure; @@ -774,8 +776,8 @@ private:  	bool            isMaturityPreferenceSyncedWithServer() const;  	void 			sendMaturityPreferenceToServer(U8 pPreferredMaturity); +    void            processMaturityPreferenceFromServer(const LLSD &result, U8 perferredMaturity); -	friend class	LLMaturityHttpHandler;  	void            handlePreferredMaturityResult(U8 pServerMaturity);  	void            handlePreferredMaturityError();  	void            reportPreferredMaturitySuccess(); @@ -929,10 +931,14 @@ public:   **                    UTILITY   **/  public: +    typedef LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t httpCallback_t; +  	/// Utilities for allowing the the agent sub managers to post and get via  	/// HTTP using the agent's policy settings and headers.   -	LLCore::HttpHandle	requestPostCapability(const std::string &cap, const std::string &url, LLSD &postData, LLHttpSDHandler *usrhndlr = NULL); -    LLCore::HttpHandle	requestGetCapability(const std::string &cap, const std::string &url, LLHttpSDHandler *usrhndlr = NULL); +    bool requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); +    bool requestGetCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); +//	LLCore::HttpHandle	requestPostCapability(const std::string &cap, const std::string &url, LLSD &postData, LLHttpSDHandler *usrhndlr = NULL); +//    LLCore::HttpHandle	requestGetCapability(const std::string &cap, const std::string &url, LLHttpSDHandler *usrhndlr = NULL);  /**                    Utility   **                                                                            ** diff --git a/indra/newview/llagentlanguage.cpp b/indra/newview/llagentlanguage.cpp index 66aec42417..cdb0e3302d 100755 --- a/indra/newview/llagentlanguage.cpp +++ b/indra/newview/llagentlanguage.cpp @@ -55,26 +55,17 @@ void LLAgentLanguage::onChange()  // static  bool LLAgentLanguage::update()  { -	LLSD body; -	std::string url; +    LLSD body; -	if (gAgent.getRegion()) -	{ -		url = gAgent.getRegion()->getCapability("UpdateAgentLanguage"); -	} - -	if (!url.empty()) -	{ -		std::string language = LLUI::getLanguage(); +	std::string language = LLUI::getLanguage(); -		body["language"] = language; -		body["language_is_public"] = gSavedSettings.getBOOL("LanguageIsPublic"); +	body["language"] = language; +	body["language_is_public"] = gSavedSettings.getBOOL("LanguageIsPublic"); -		LLCore::HttpHandle handle = gAgent.requestPostCapability("UpdateAgentLanguage", url, body); -		if (handle == LLCORE_HTTP_HANDLE_INVALID) -		{ -			LL_WARNS() << "Unable to change language." << LL_ENDL; -		} -	} +    if (!gAgent.requestPostCapability("UpdateAgentLanguage", body)) +    { +        LL_WARNS("Language") << "Language capability unavailable." << LL_ENDL; +    } +      return true;  } diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 59d2079b5d..5ad71369c3 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1246,196 +1246,6 @@ static void removeDuplicateItems(LLInventoryModel::item_array_t& items)  }  //========================================================================= -#if 0 -// *TODO:  -class LLAppearanceMgrHttpHandler -{ -public: - -    static void apperanceMgrRequestCoro(LLCoros::self& self, std::string url); - -private: -    LLAppearanceMgrHttpHandler(); - -    static void debugCOF(const LLSD& content); - - -}; - -void LLAppearanceMgrHttpHandler::apperanceMgrRequestCoro(LLCoros::self& self, std::string url) -{ -    LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); -    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t -        httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("EnvironmentRequest", httpPolicy)); -    LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest); - - - -} - -#else - -// *TODO: Convert this and llavatar over to using the coroutine scheme rather  -// than the responder for communications. (see block above for start...) - -class LLAppearanceMgrHttpHandler : public LLHttpSDHandler -{ -public: -	LLAppearanceMgrHttpHandler(LLAppearanceMgr *mgr) : -		LLHttpSDHandler(), -		mManager(mgr) -	{ } - -	virtual ~LLAppearanceMgrHttpHandler() -	{ } - -	virtual void onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response); - -protected: -	virtual void onSuccess(LLCore::HttpResponse * response, const LLSD &content); -	virtual void onFailure(LLCore::HttpResponse * response, LLCore::HttpStatus status); - -private: -	static void debugCOF(const LLSD& content); - -	LLAppearanceMgr *mManager; - -}; - -//------------------------------------------------------------------------- -void LLAppearanceMgrHttpHandler::onCompleted(LLCore::HttpHandle handle, LLCore::HttpResponse * response) -{ -	mManager->decrementInFlightCounter(); - -	LLHttpSDHandler::onCompleted(handle, response); -} - -void LLAppearanceMgrHttpHandler::onSuccess(LLCore::HttpResponse * response, const LLSD &content) -{ -	if (!content.isMap()) -	{ -		LLCore::HttpStatus status = LLCore::HttpStatus(HTTP_INTERNAL_ERROR, "Malformed response contents"); -		response->setStatus(status); -		onFailure(response, status); -		if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) -		{ -			debugCOF(content); -		} -		return; -	} -	if (content["success"].asBoolean()) -	{ -		LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL; -		if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) -		{ -			dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_ok", content); -		} -	} -	else -	{ -		LLCore::HttpStatus status = LLCore::HttpStatus(HTTP_INTERNAL_ERROR, "Non-success response"); -		response->setStatus(status); -		onFailure(response, status); -		if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) -		{ -			debugCOF(content); -		} -		return; -	} -} - -void LLAppearanceMgrHttpHandler::onFailure(LLCore::HttpResponse * response, LLCore::HttpStatus status) -{ -	LL_WARNS("Avatar") << "Appearance Mgr request failed to " << response->getRequestURL() -		<< ". Reason code: (" << status.toTerseString() << ") " -		<< status.toString() << LL_ENDL; -} - -#endif - -void LLAppearanceMgrHttpHandler::debugCOF(const LLSD& content) -{ -    dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_error", content); - -    LL_INFOS("Avatar") << "AIS COF, version received: " << content["expected"].asInteger() -        << " ================================= " << LL_ENDL; -    std::set<LLUUID> ais_items, local_items; -    const LLSD& cof_raw = content["cof_raw"]; -    for (LLSD::array_const_iterator it = cof_raw.beginArray(); -        it != cof_raw.endArray(); ++it) -    { -        const LLSD& item = *it; -        if (item["parent_id"].asUUID() == LLAppearanceMgr::instance().getCOF()) -        { -            ais_items.insert(item["item_id"].asUUID()); -            if (item["type"].asInteger() == 24) // link -            { -                LL_INFOS("Avatar") << "AIS Link: item_id: " << item["item_id"].asUUID() -                    << " linked_item_id: " << item["asset_id"].asUUID() -                    << " name: " << item["name"].asString() -                    << LL_ENDL; -            } -            else if (item["type"].asInteger() == 25) // folder link -            { -                LL_INFOS("Avatar") << "AIS Folder link: item_id: " << item["item_id"].asUUID() -                    << " linked_item_id: " << item["asset_id"].asUUID() -                    << " name: " << item["name"].asString() -                    << LL_ENDL; -            } -            else -            { -                LL_INFOS("Avatar") << "AIS Other: item_id: " << item["item_id"].asUUID() -                    << " linked_item_id: " << item["asset_id"].asUUID() -                    << " name: " << item["name"].asString() -                    << " type: " << item["type"].asInteger() -                    << LL_ENDL; -            } -        } -    } -    LL_INFOS("Avatar") << LL_ENDL; -    LL_INFOS("Avatar") << "Local COF, version requested: " << content["observed"].asInteger() -        << " ================================= " << LL_ENDL; -    LLInventoryModel::cat_array_t cat_array; -    LLInventoryModel::item_array_t item_array; -    gInventory.collectDescendents(LLAppearanceMgr::instance().getCOF(), -        cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); -    for (S32 i = 0; i < item_array.size(); i++) -    { -        const LLViewerInventoryItem* inv_item = item_array.at(i).get(); -        local_items.insert(inv_item->getUUID()); -        LL_INFOS("Avatar") << "LOCAL: item_id: " << inv_item->getUUID() -            << " linked_item_id: " << inv_item->getLinkedUUID() -            << " name: " << inv_item->getName() -            << " parent: " << inv_item->getParentUUID() -            << LL_ENDL; -    } -    LL_INFOS("Avatar") << " ================================= " << LL_ENDL; -    S32 local_only = 0, ais_only = 0; -    for (std::set<LLUUID>::iterator it = local_items.begin(); it != local_items.end(); ++it) -    { -        if (ais_items.find(*it) == ais_items.end()) -        { -            LL_INFOS("Avatar") << "LOCAL ONLY: " << *it << LL_ENDL; -            local_only++; -        } -    } -    for (std::set<LLUUID>::iterator it = ais_items.begin(); it != ais_items.end(); ++it) -    { -        if (local_items.find(*it) == local_items.end()) -        { -            LL_INFOS("Avatar") << "AIS ONLY: " << *it << LL_ENDL; -            ais_only++; -        } -    } -    if (local_only == 0 && ais_only == 0) -    { -        LL_INFOS("Avatar") << "COF contents identical, only version numbers differ (req " -            << content["observed"].asInteger() -            << " rcv " << content["expected"].asInteger() -            << ")" << LL_ENDL; -    } -} -//=========================================================================  const LLUUID LLAppearanceMgr::getCOF() const  { @@ -3509,7 +3319,7 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()  	if (gAgentAvatarp->isEditingAppearance())  	{ -		LL_WARNS("Avatar") << "Avatar editing appeance, not sending request." << LL_ENDL; +		LL_WARNS("Avatar") << "Avatar editing appearance, not sending request." << LL_ENDL;  		// don't send out appearance updates if in appearance editing mode  		return;  	} @@ -3523,12 +3333,6 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()  	{  		LL_WARNS("Avatar") << "Region does not support baking" << LL_ENDL;  	} -	std::string url = gAgent.getRegion()->getCapability("UpdateAvatarAppearance"); -	if (url.empty()) -	{ -		LL_WARNS("Avatar") << "No cap for UpdateAvatarAppearance." << LL_ENDL; -		return; -	}  	LLSD postData;  	S32 cof_version = LLAppearanceMgr::instance().getCOFVersion(); @@ -3544,9 +3348,6 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()  			postData["cof_version"] = cof_version + 999;  		}  	} -	LL_DEBUGS("Avatar") << "request url " << url << " my_cof_version " << cof_version << LL_ENDL; - -	LLAppearanceMgrHttpHandler * handler = new LLAppearanceMgrHttpHandler(this);  	mInFlightCounter++;  	mInFlightTimer.setTimerExpirySec(60.0); @@ -3554,15 +3355,120 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()  	llassert(cof_version >= gAgentAvatarp->mLastUpdateRequestCOFVersion);  	gAgentAvatarp->mLastUpdateRequestCOFVersion = cof_version; +    if (!gAgent.requestPostCapability("UpdateAvatarAppearance", postData,  +        static_cast<LLAgent::httpCallback_t>(boost::bind(&LLAppearanceMgr::serverAppearanceUpdateSuccess, this, _1)),  +        static_cast<LLAgent::httpCallback_t>(boost::bind(&LLAppearanceMgr::decrementInFlightCounter, this)))) +    { +        LL_WARNS("Avatar") << "Unable to access UpdateAvatarAppearance in this region." << LL_ENDL; +    } +} + +void LLAppearanceMgr::serverAppearanceUpdateSuccess(const LLSD &result) +{ +    decrementInFlightCounter(); +    if (result["success"].asBoolean()) +    { +        LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL; +        if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) +        { +            dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_ok", result); +        } +    } +    else +    { +        LL_WARNS("Avatar") << "Non success response for change appearance" << LL_ENDL; +        if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) +        { +            debugAppearanceUpdateCOF(result); +        } +    } +} -	LLCore::HttpHandle handle = gAgent.requestPostCapability("UpdateAvatarAppearance", url, postData, handler); +/*static*/ +void LLAppearanceMgr::debugAppearanceUpdateCOF(const LLSD& content) +{ +    dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_error", content); -	if (handle == LLCORE_HTTP_HANDLE_INVALID) -	{ -		delete handler; -	} +    LL_INFOS("Avatar") << "AIS COF, version received: " << content["expected"].asInteger() +        << " ================================= " << LL_ENDL; +    std::set<LLUUID> ais_items, local_items; +    const LLSD& cof_raw = content["cof_raw"]; +    for (LLSD::array_const_iterator it = cof_raw.beginArray(); +        it != cof_raw.endArray(); ++it) +    { +        const LLSD& item = *it; +        if (item["parent_id"].asUUID() == LLAppearanceMgr::instance().getCOF()) +        { +            ais_items.insert(item["item_id"].asUUID()); +            if (item["type"].asInteger() == 24) // link +            { +                LL_INFOS("Avatar") << "AIS Link: item_id: " << item["item_id"].asUUID() +                    << " linked_item_id: " << item["asset_id"].asUUID() +                    << " name: " << item["name"].asString() +                    << LL_ENDL; +            } +            else if (item["type"].asInteger() == 25) // folder link +            { +                LL_INFOS("Avatar") << "AIS Folder link: item_id: " << item["item_id"].asUUID() +                    << " linked_item_id: " << item["asset_id"].asUUID() +                    << " name: " << item["name"].asString() +                    << LL_ENDL; +            } +            else +            { +                LL_INFOS("Avatar") << "AIS Other: item_id: " << item["item_id"].asUUID() +                    << " linked_item_id: " << item["asset_id"].asUUID() +                    << " name: " << item["name"].asString() +                    << " type: " << item["type"].asInteger() +                    << LL_ENDL; +            } +        } +    } +    LL_INFOS("Avatar") << LL_ENDL; +    LL_INFOS("Avatar") << "Local COF, version requested: " << content["observed"].asInteger() +        << " ================================= " << LL_ENDL; +    LLInventoryModel::cat_array_t cat_array; +    LLInventoryModel::item_array_t item_array; +    gInventory.collectDescendents(LLAppearanceMgr::instance().getCOF(), +        cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); +    for (S32 i = 0; i < item_array.size(); i++) +    { +        const LLViewerInventoryItem* inv_item = item_array.at(i).get(); +        local_items.insert(inv_item->getUUID()); +        LL_INFOS("Avatar") << "LOCAL: item_id: " << inv_item->getUUID() +            << " linked_item_id: " << inv_item->getLinkedUUID() +            << " name: " << inv_item->getName() +            << " parent: " << inv_item->getParentUUID() +            << LL_ENDL; +    } +    LL_INFOS("Avatar") << " ================================= " << LL_ENDL; +    S32 local_only = 0, ais_only = 0; +    for (std::set<LLUUID>::iterator it = local_items.begin(); it != local_items.end(); ++it) +    { +        if (ais_items.find(*it) == ais_items.end()) +        { +            LL_INFOS("Avatar") << "LOCAL ONLY: " << *it << LL_ENDL; +            local_only++; +        } +    } +    for (std::set<LLUUID>::iterator it = ais_items.begin(); it != ais_items.end(); ++it) +    { +        if (local_items.find(*it) == local_items.end()) +        { +            LL_INFOS("Avatar") << "AIS ONLY: " << *it << LL_ENDL; +            ais_only++; +        } +    } +    if (local_only == 0 && ais_only == 0) +    { +        LL_INFOS("Avatar") << "COF contents identical, only version numbers differ (req " +            << content["observed"].asInteger() +            << " rcv " << content["expected"].asInteger() +            << ")" << LL_ENDL; +    }  } +  bool LLAppearanceMgr::testCOFRequestVersion() const  {  	// If we have already received an update for this or higher cof version, ignore. diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 669d7242aa..3d9a1f1518 100755 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -233,6 +233,9 @@ public:  private: +    void serverAppearanceUpdateSuccess(const LLSD &result); +    static void debugAppearanceUpdateCOF(const LLSD& content); +  	std::string		mAppearanceServiceURL;  protected:  | 
