From e3e1a527ccbab17e140f91267c847d7e799dbe6f Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Tue, 17 Jun 2014 15:12:31 -0700
Subject: [PATCH] DRTVWR-354 : Rewrite Responders for Twitter and Flickr to
 conform to new LLHTTPClient interface. Fix merge error in Facebook connect as
 well

---
 indra/newview/llfacebookconnect.cpp |  15 ++-
 indra/newview/llflickrconnect.cpp   | 183 +++++++++++++++------------
 indra/newview/lltwitterconnect.cpp  | 185 ++++++++++++++++------------
 3 files changed, 224 insertions(+), 159 deletions(-)

diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp
index 1b741ecc0ef..28319564e45 100755
--- a/indra/newview/llfacebookconnect.cpp
+++ b/indra/newview/llfacebookconnect.cpp
@@ -181,7 +181,7 @@ class LLFacebookShareResponder : public LLHTTPClient::Responder
 
 	/* virtual */ void httpSuccess()
 	{
-		toast_user_for_success();
+		toast_user_for_facebook_success();
 		LL_DEBUGS("FacebookConnect") << "Post successful. " << dumpResponse() << LL_ENDL;
 		LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POSTED);
 	}
@@ -327,9 +327,16 @@ class LLFacebookInfoResponder : public LLHTTPClient::Responder
 	{
 		if ( HTTP_FOUND == getStatus() )
 		{
-			LL_INFOS() << "Facebook: Info received" << LL_ENDL;
-			LL_DEBUGS("FacebookConnect") << "Getting Facebook info successful. info: " << getContent() << LL_ENDL;
-			LLFacebookConnect::instance().storeInfo(getContent());
+			const std::string& location = getResponseHeader(HTTP_IN_HEADER_LOCATION);
+			if (location.empty())
+			{
+				LL_WARNS("FacebookConnect") << "Missing Location header " << dumpResponse()
+                << "[headers:" << getResponseHeaders() << "]" << LL_ENDL;
+			}
+			else
+			{
+				LLFacebookConnect::instance().openFacebookWeb(location);
+			}
 		}
 		else
 		{
diff --git a/indra/newview/llflickrconnect.cpp b/indra/newview/llflickrconnect.cpp
index 18988424786..b7158962648 100644
--- a/indra/newview/llflickrconnect.cpp
+++ b/indra/newview/llflickrconnect.cpp
@@ -77,28 +77,36 @@ class LLFlickrConnectResponder : public LLHTTPClient::Responder
         LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTION_IN_PROGRESS);
     }
     
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
 	{
-		if (isGoodStatus(status))
+		LL_DEBUGS("FlickrConnect") << "Connect successful. " << dumpResponse() << LL_ENDL;
+        LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTED);
+	}
+    
+	/* virtual */ void httpFailure()
+	{
+		if ( HTTP_FOUND == getStatus() )
 		{
-			LL_DEBUGS("FlickrConnect") << "Connect successful. content: " << content << LL_ENDL;
-			
-            LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTED);
+			const std::string& location = getResponseHeader(HTTP_IN_HEADER_LOCATION);
+			if (location.empty())
+			{
+				LL_WARNS("FlickrConnect") << "Missing Location header " << dumpResponse()
+                << "[headers:" << getResponseHeaders() << "]" << LL_ENDL;
+			}
+			else
+			{
+                LLFlickrConnect::instance().openFlickrWeb(location);
+			}
 		}
-		else if (status != 302)
+		else
 		{
+			LL_WARNS("FlickrConnect") << dumpResponse() << LL_ENDL;
             LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTION_FAILED);
-            log_flickr_connect_error("Connect", status, reason, content.get("error_code"), content.get("error_description"));
+			const LLSD& content = getContent();
+			log_flickr_connect_error("Connect", getStatus(), getReason(),
+                                      content.get("error_code"), content.get("error_description"));
 		}
 	}
-    
-    void completedHeader(U32 status, const std::string& reason, const LLSD& content)
-    {
-        if (status == 302)
-        {
-            LLFlickrConnect::instance().openFlickrWeb(content["location"]);
-        }
-    }
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -113,33 +121,41 @@ class LLFlickrShareResponder : public LLHTTPClient::Responder
 		LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_POSTING);
 	}
 	
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
 	{
-		if (isGoodStatus(status))
+        toast_user_for_flickr_success();
+		LL_DEBUGS("FlickrConnect") << "Post successful. " << dumpResponse() << LL_ENDL;
+        LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_POSTED);
+	}
+    
+	/* virtual */ void httpFailure()
+	{
+		if ( HTTP_FOUND == getStatus() )
 		{
-            toast_user_for_flickr_success();
-			LL_DEBUGS("FlickrConnect") << "Post successful. content: " << content << LL_ENDL;
-			
-			LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_POSTED);
+			const std::string& location = getResponseHeader(HTTP_IN_HEADER_LOCATION);
+			if (location.empty())
+			{
+				LL_WARNS("FlickrConnect") << "Missing Location header " << dumpResponse()
+                << "[headers:" << getResponseHeaders() << "]" << LL_ENDL;
+			}
+			else
+			{
+                LLFlickrConnect::instance().openFlickrWeb(location);
+			}
 		}
-		else if (status == 404)
+		else if ( HTTP_NOT_FOUND == getStatus() )
 		{
 			LLFlickrConnect::instance().connectToFlickr();
 		}
 		else
 		{
+			LL_WARNS("FlickrConnect") << dumpResponse() << LL_ENDL;
             LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_POST_FAILED);
-            log_flickr_connect_error("Share", status, reason, content.get("error_code"), content.get("error_description"));
+			const LLSD& content = getContent();
+			log_flickr_connect_error("Share", getStatus(), getReason(),
+                                      content.get("error_code"), content.get("error_description"));
 		}
 	}
-    
-    void completedHeader(U32 status, const std::string& reason, const LLSD& content)
-    {
-        if (status == 302)
-        {
-            LLFlickrConnect::instance().openFlickrWeb(content["location"]);
-        }
-    }
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -163,24 +179,27 @@ class LLFlickrDisconnectResponder : public LLHTTPClient::Responder
 		LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_NOT_CONNECTED);
 	}
 
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
+	{
+		LL_DEBUGS("FlickrConnect") << "Disconnect successful. " << dumpResponse() << LL_ENDL;
+		setUserDisconnected();
+	}
+    
+	/* virtual */ void httpFailure()
 	{
-		if (isGoodStatus(status)) 
-		{
-			LL_DEBUGS("FlickrConnect") << "Disconnect successful. content: " << content << LL_ENDL;
-			setUserDisconnected();
-
-		}
 		//User not found so already disconnected
-		else if(status == 404)
+		if ( HTTP_NOT_FOUND == getStatus() )
 		{
-			LL_DEBUGS("FlickrConnect") << "Already disconnected. content: " << content << LL_ENDL;
+			LL_DEBUGS("FlickrConnect") << "Already disconnected. " << dumpResponse() << LL_ENDL;
 			setUserDisconnected();
 		}
 		else
 		{
+			LL_WARNS("FlickrConnect") << dumpResponse() << LL_ENDL;
 			LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_DISCONNECT_FAILED);
-            log_flickr_connect_error("Disconnect", status, reason, content.get("error_code"), content.get("error_description"));
+			const LLSD& content = getContent();
+			log_flickr_connect_error("Disconnect", getStatus(), getReason(),
+                                      content.get("error_code"), content.get("error_description"));
 		}
 	}
 };
@@ -197,33 +216,34 @@ class LLFlickrConnectedResponder : public LLHTTPClient::Responder
 		LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTION_IN_PROGRESS);
     }
     
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
+	{
+		LL_DEBUGS("FlickrConnect") << "Connect successful. " << dumpResponse() << LL_ENDL;
+        LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTED);
+	}
+    
+	/* virtual */ void httpFailure()
 	{
-		if (isGoodStatus(status))
+		// show the facebook login page if not connected yet
+		if ( HTTP_NOT_FOUND == getStatus() )
 		{
-			LL_DEBUGS("FlickrConnect") << "Connect successful. content: " << content << LL_ENDL;
-            
-            LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTED);
+			LL_DEBUGS("FlickrConnect") << "Not connected. " << dumpResponse() << LL_ENDL;
+			if (mAutoConnect)
+			{
+                LLFlickrConnect::instance().connectToFlickr();
+			}
+			else
+			{
+                LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_NOT_CONNECTED);
+			}
 		}
 		else
 		{
-			// show the flickr login page if not connected yet
-			if (status == 404)
-			{
-				if (mAutoConnect)
-				{
-					LLFlickrConnect::instance().connectToFlickr();
-				}
-				else
-				{
-					LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_NOT_CONNECTED);
-				}
-			}
-            else
-            {
-                LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTION_FAILED);
-				log_flickr_connect_error("Connected", status, reason, content.get("error_code"), content.get("error_description"));
-            }
+			LL_WARNS("FlickrConnect") << dumpResponse() << LL_ENDL;
+            LLFlickrConnect::instance().setConnectionState(LLFlickrConnect::FLICKR_CONNECTION_FAILED);
+			const LLSD& content = getContent();
+			log_flickr_connect_error("Connected", getStatus(), getReason(),
+                                      content.get("error_code"), content.get("error_description"));
 		}
 	}
     
@@ -238,25 +258,34 @@ class LLFlickrInfoResponder : public LLHTTPClient::Responder
 	LOG_CLASS(LLFlickrInfoResponder);
 public:
 
-	virtual void completed(U32 status, const std::string& reason, const LLSD& info)
+	/* virtual */ void httpSuccess()
+	{
+		LL_INFOS("FlickrConnect") << "Flickr: Info received" << LL_ENDL;
+		LL_DEBUGS("FlickrConnect") << "Getting Flickr info successful. " << dumpResponse() << LL_ENDL;
+        LLFlickrConnect::instance().storeInfo(getContent());
+	}
+    
+	/* virtual */ void httpFailure()
 	{
-		if (isGoodStatus(status))
+		if ( HTTP_FOUND == getStatus() )
 		{
-			llinfos << "Flickr: Info received" << llendl;
-			LL_DEBUGS("FlickrConnect") << "Getting Flickr info successful. info: " << info << LL_ENDL;
-			LLFlickrConnect::instance().storeInfo(info);
+			const std::string& location = getResponseHeader(HTTP_IN_HEADER_LOCATION);
+			if (location.empty())
+			{
+				LL_WARNS("FlickrConnect") << "Missing Location header " << dumpResponse()
+                << "[headers:" << getResponseHeaders() << "]" << LL_ENDL;
+			}
+			else
+			{
+                LLFlickrConnect::instance().openFlickrWeb(location);
+			}
 		}
 		else
 		{
-			log_flickr_connect_error("Info", status, reason, info.get("error_code"), info.get("error_description"));
-		}
-	}
-
-	void completedHeader(U32 status, const std::string& reason, const LLSD& content)
-	{
-		if (status == 302)
-		{
-			LLFlickrConnect::instance().openFlickrWeb(content["location"]);
+			LL_WARNS("FlickrConnect") << dumpResponse() << LL_ENDL;
+			const LLSD& content = getContent();
+			log_flickr_connect_error("Info", getStatus(), getReason(),
+                                      content.get("error_code"), content.get("error_description"));
 		}
 	}
 };
diff --git a/indra/newview/lltwitterconnect.cpp b/indra/newview/lltwitterconnect.cpp
index cfdbca1b818..7088558b83a 100644
--- a/indra/newview/lltwitterconnect.cpp
+++ b/indra/newview/lltwitterconnect.cpp
@@ -77,28 +77,36 @@ class LLTwitterConnectResponder : public LLHTTPClient::Responder
         LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_IN_PROGRESS);
     }
     
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
 	{
-		if (isGoodStatus(status))
+		LL_DEBUGS("TwitterConnect") << "Connect successful. " << dumpResponse() << LL_ENDL;
+        LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTED);
+	}
+    
+	/* virtual */ void httpFailure()
+	{
+		if ( HTTP_FOUND == getStatus() )
 		{
-			LL_DEBUGS("TwitterConnect") << "Connect successful. content: " << content << LL_ENDL;
-			
-            LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTED);
+			const std::string& location = getResponseHeader(HTTP_IN_HEADER_LOCATION);
+			if (location.empty())
+			{
+				LL_WARNS("TwitterConnect") << "Missing Location header " << dumpResponse()
+                << "[headers:" << getResponseHeaders() << "]" << LL_ENDL;
+			}
+			else
+			{
+                LLTwitterConnect::instance().openTwitterWeb(location);
+			}
 		}
-		else if (status != 302)
+		else
 		{
-            LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_FAILED);
-            log_twitter_connect_error("Connect", status, reason, content.get("error_code"), content.get("error_description"));
+			LL_WARNS("TwitterConnect") << dumpResponse() << LL_ENDL;
+			LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_FAILED);
+			const LLSD& content = getContent();
+			log_twitter_connect_error("Connect", getStatus(), getReason(),
+									   content.get("error_code"), content.get("error_description"));
 		}
 	}
-    
-    void completedHeader(U32 status, const std::string& reason, const LLSD& content)
-    {
-        if (status == 302)
-        {
-            LLTwitterConnect::instance().openTwitterWeb(content["location"]);
-        }
-    }
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -113,33 +121,41 @@ class LLTwitterShareResponder : public LLHTTPClient::Responder
 		LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_POSTING);
 	}
 	
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
 	{
-		if (isGoodStatus(status))
+        toast_user_for_twitter_success();
+		LL_DEBUGS("TwitterConnect") << "Post successful. " << dumpResponse() << LL_ENDL;
+        LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_POSTED);
+	}
+    
+	/* virtual */ void httpFailure()
+	{
+		if ( HTTP_FOUND == getStatus() )
 		{
-            toast_user_for_twitter_success();
-			LL_DEBUGS("TwitterConnect") << "Post successful. content: " << content << LL_ENDL;
-			
-			LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_POSTED);
+			const std::string& location = getResponseHeader(HTTP_IN_HEADER_LOCATION);
+			if (location.empty())
+			{
+				LL_WARNS("TwitterConnect") << "Missing Location header " << dumpResponse()
+                << "[headers:" << getResponseHeaders() << "]" << LL_ENDL;
+			}
+			else
+			{
+                LLTwitterConnect::instance().openTwitterWeb(location);
+			}
 		}
-		else if (status == 404)
+		else if ( HTTP_NOT_FOUND == getStatus() )
 		{
 			LLTwitterConnect::instance().connectToTwitter();
 		}
 		else
 		{
+			LL_WARNS("TwitterConnect") << dumpResponse() << LL_ENDL;
             LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_POST_FAILED);
-            log_twitter_connect_error("Share", status, reason, content.get("error_code"), content.get("error_description"));
+			const LLSD& content = getContent();
+			log_twitter_connect_error("Share", getStatus(), getReason(),
+									   content.get("error_code"), content.get("error_description"));
 		}
 	}
-    
-    void completedHeader(U32 status, const std::string& reason, const LLSD& content)
-    {
-        if (status == 302)
-        {
-            LLTwitterConnect::instance().openTwitterWeb(content["location"]);
-        }
-    }
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -163,24 +179,27 @@ class LLTwitterDisconnectResponder : public LLHTTPClient::Responder
 		LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_NOT_CONNECTED);
 	}
 
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
+	{
+		LL_DEBUGS("TwitterConnect") << "Disconnect successful. " << dumpResponse() << LL_ENDL;
+		setUserDisconnected();
+	}
+    
+	/* virtual */ void httpFailure()
 	{
-		if (isGoodStatus(status)) 
-		{
-			LL_DEBUGS("TwitterConnect") << "Disconnect successful. content: " << content << LL_ENDL;
-			setUserDisconnected();
-
-		}
 		//User not found so already disconnected
-		else if(status == 404)
+		if ( HTTP_NOT_FOUND == getStatus() )
 		{
-			LL_DEBUGS("TwitterConnect") << "Already disconnected. content: " << content << LL_ENDL;
+			LL_DEBUGS("TwitterConnect") << "Already disconnected. " << dumpResponse() << LL_ENDL;
 			setUserDisconnected();
 		}
 		else
 		{
+			LL_WARNS("TwitterConnect") << dumpResponse() << LL_ENDL;
 			LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_DISCONNECT_FAILED);
-            log_twitter_connect_error("Disconnect", status, reason, content.get("error_code"), content.get("error_description"));
+			const LLSD& content = getContent();
+			log_twitter_connect_error("Disconnect", getStatus(), getReason(),
+									   content.get("error_code"), content.get("error_description"));
 		}
 	}
 };
@@ -197,33 +216,34 @@ class LLTwitterConnectedResponder : public LLHTTPClient::Responder
 		LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_IN_PROGRESS);
     }
     
-	virtual void completed(U32 status, const std::string& reason, const LLSD& content)
+	/* virtual */ void httpSuccess()
+	{
+		LL_DEBUGS("TwitterConnect") << "Connect successful. " << dumpResponse() << LL_ENDL;
+        LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTED);
+	}
+    
+	/* virtual */ void httpFailure()
 	{
-		if (isGoodStatus(status))
+		// show the facebook login page if not connected yet
+		if ( HTTP_NOT_FOUND == getStatus() )
 		{
-			LL_DEBUGS("TwitterConnect") << "Connect successful. content: " << content << LL_ENDL;
-            
-            LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTED);
+			LL_DEBUGS("TwitterConnect") << "Not connected. " << dumpResponse() << LL_ENDL;
+			if (mAutoConnect)
+			{
+                LLTwitterConnect::instance().connectToTwitter();
+			}
+			else
+			{
+                LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_NOT_CONNECTED);
+			}
 		}
 		else
 		{
-			// show the twitter login page if not connected yet
-			if (status == 404)
-			{
-				if (mAutoConnect)
-				{
-					LLTwitterConnect::instance().connectToTwitter();
-				}
-				else
-				{
-					LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_NOT_CONNECTED);
-				}
-			}
-            else
-            {
-                LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_FAILED);
-				log_twitter_connect_error("Connected", status, reason, content.get("error_code"), content.get("error_description"));
-            }
+			LL_WARNS("TwitterConnect") << dumpResponse() << LL_ENDL;
+            LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_FAILED);
+			const LLSD& content = getContent();
+			log_twitter_connect_error("Connected", getStatus(), getReason(),
+									   content.get("error_code"), content.get("error_description"));
 		}
 	}
     
@@ -238,25 +258,34 @@ class LLTwitterInfoResponder : public LLHTTPClient::Responder
 	LOG_CLASS(LLTwitterInfoResponder);
 public:
 
-	virtual void completed(U32 status, const std::string& reason, const LLSD& info)
+	/* virtual */ void httpSuccess()
+	{
+		LL_INFOS("TwitterConnect") << "Twitter: Info received" << LL_ENDL;
+		LL_DEBUGS("TwitterConnect") << "Getting Twitter info successful. " << dumpResponse() << LL_ENDL;
+        LLTwitterConnect::instance().storeInfo(getContent());
+	}
+    
+	/* virtual */ void httpFailure()
 	{
-		if (isGoodStatus(status))
+		if ( HTTP_FOUND == getStatus() )
 		{
-			llinfos << "Twitter: Info received" << llendl;
-			LL_DEBUGS("TwitterConnect") << "Getting Twitter info successful. info: " << info << LL_ENDL;
-			LLTwitterConnect::instance().storeInfo(info);
+			const std::string& location = getResponseHeader(HTTP_IN_HEADER_LOCATION);
+			if (location.empty())
+			{
+				LL_WARNS("TwitterConnect") << "Missing Location header " << dumpResponse()
+                << "[headers:" << getResponseHeaders() << "]" << LL_ENDL;
+			}
+			else
+			{
+                LLTwitterConnect::instance().openTwitterWeb(location);
+			}
 		}
 		else
 		{
-			log_twitter_connect_error("Info", status, reason, info.get("error_code"), info.get("error_description"));
-		}
-	}
-
-	void completedHeader(U32 status, const std::string& reason, const LLSD& content)
-	{
-		if (status == 302)
-		{
-			LLTwitterConnect::instance().openTwitterWeb(content["location"]);
+			LL_WARNS("TwitterConnect") << dumpResponse() << LL_ENDL;
+			const LLSD& content = getContent();
+			log_twitter_connect_error("Info", getStatus(), getReason(),
+									   content.get("error_code"), content.get("error_description"));
 		}
 	}
 };
-- 
GitLab