From 639b234762133e4d09d6d7b1bac9d25c5a681926 Mon Sep 17 00:00:00 2001
From: James Cook <james@lindenlab.com>
Date: Thu, 18 Mar 2010 17:19:57 -0700
Subject: Partial support for Set Name returning error msg from service

---
 indra/llmessage/llavatarnamecache.cpp | 20 +++++++++++++++++---
 indra/llmessage/llavatarnamecache.h   | 18 +++++++++++++++---
 2 files changed, 32 insertions(+), 6 deletions(-)

(limited to 'indra/llmessage')

diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index d7284c41a7..d49f1d3de5 100644
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -37,6 +37,7 @@
 #include "llcachename.h"	// *TODO: remove
 #include "llframetimer.h"
 #include "llhttpclient.h"
+#include "llsd.h"
 
 #include <map>
 #include <set>
@@ -266,23 +267,36 @@ class LLSetNameResponder : public LLHTTPClient::Responder
 {
 public:
 	LLUUID mAgentID;
+	LLAvatarNameCache::set_name_signal_t mSignal;
 
-	LLSetNameResponder(const LLUUID& agent_id) : mAgentID(agent_id) { }
+	LLSetNameResponder(const LLUUID& agent_id,
+					   const LLAvatarNameCache::set_name_slot_t& slot)
+	:	mAgentID(agent_id),
+		mSignal()
+	{
+		mSignal.connect(slot);
+	}
 
 	/*virtual*/ void result(const LLSD& content)
 	{
 		// force re-fetch
 		LLAvatarNameCache::sCache.erase(mAgentID);
+
+		mSignal(true, "", content);
 	}
 
 	/*virtual*/ void error(U32 status, const std::string& reason)
 	{
 		llinfos << "JAMESDEBUG set names failed " << status
 			<< " reason " << reason << llendl;
+
+		mSignal(false, reason, LLSD());
 	}
 };
 
-void LLAvatarNameCache::setDisplayName(const LLUUID& agent_id, const std::string& display_name)
+void LLAvatarNameCache::setDisplayName(const LLUUID& agent_id, 
+									   const std::string& display_name,
+									   const set_name_slot_t& slot)
 {
 	LLSD body;
 	body["display_name"] = display_name;
@@ -291,7 +305,7 @@ void LLAvatarNameCache::setDisplayName(const LLUUID& agent_id, const std::string
 	std::string url = sNameServiceBaseURL + "agent/";
 	url += agent_id.asString();
 	url += "/set-display-name/";
-	LLHTTPClient::post(url, body, new LLSetNameResponder(agent_id));
+	LLHTTPClient::post(url, body, new LLSetNameResponder(agent_id, slot));
 }
 
 void LLAvatarNameCache::toggleDisplayNames()
diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h
index a09f549877..8fc43860da 100644
--- a/indra/llmessage/llavatarnamecache.h
+++ b/indra/llmessage/llavatarnamecache.h
@@ -37,6 +37,9 @@
 
 #include <boost/signals2.hpp>
 
+class LLSD;
+class LLUUID;
+
 namespace LLAvatarNameCache
 {
 	void initClass();
@@ -53,6 +56,7 @@ namespace LLAvatarNameCache
 	// otherwise returns false
 	bool get(const LLUUID& agent_id, LLAvatarName *av_name);
 
+	// Callback types for get() below
 	typedef boost::signals2::signal<
 		void (const LLUUID& agent_id, const LLAvatarName& av_name)>
 			callback_signal_t;
@@ -61,9 +65,17 @@ namespace LLAvatarNameCache
 	// Fetches name information and calls callback.
 	// If name information is in cache, callback will be called immediately.
 	void get(const LLUUID& agent_id, callback_slot_t slot);
-	
-	// Sends an update to the server
-	void setDisplayName(const LLUUID& agent_id, const std::string& display_name);
+
+	// Callback types for setDisplayName() below
+	typedef boost::signals2::signal<
+		void (bool success, const std::string& reason, const LLSD& content)>
+			set_name_signal_t;
+	typedef set_name_signal_t::slot_type set_name_slot_t;
+
+	// Sends an update to the server to change a display name
+	// and calls back the application layer when done
+	void setDisplayName(const LLUUID& agent_id, const std::string& display_name,
+			const set_name_slot_t& slot);
 
 	// HACK: turn display names on and off
 	void toggleDisplayNames();
-- 
cgit v1.2.3