From cfd35b8b22e8043ab14c57f6ee6108cea471a1ab Mon Sep 17 00:00:00 2001
From: Logan Dethrow <log@lindenlab.com>
Date: Thu, 28 Mar 2013 18:07:54 -0400
Subject: Made a bug that was masking the warning about mismatched caps coming
 from a region. They could never match because certain capabilities are
 explicitly not stored when we receive them. * Made mSecondCapabilitiesTracker
 set capabilities in a way that more closely matches mCapabilities so that
 they will match up when we get a second cap grant from a region if the caps
 that were sent are actually the same. * Added more logging around setting a
 region's seed capability. * Also added a static function in llviewerregion to
 dump out a CapabilityMap based on the logActiveCapabilities method. Defined
 the old method in terms of the new static free function.

---
 indra/newview/app_settings/logcontrol.xml |  4 +-
 indra/newview/llstartup.cpp               |  2 +
 indra/newview/llviewermessage.cpp         |  5 ++
 indra/newview/llviewerregion.cpp          | 81 +++++++++++++++++++++++--------
 indra/newview/llworld.cpp                 |  2 +
 5 files changed, 70 insertions(+), 24 deletions(-)

(limited to 'indra')

diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml
index c5561166fc..04b3c81602 100644
--- a/indra/newview/app_settings/logcontrol.xml
+++ b/indra/newview/app_settings/logcontrol.xml
@@ -43,9 +43,7 @@
 					<key>tags</key>
 						<array>
 						     <string>Avatar</string>
-						<!-- sample entry for debugging specific items	
-						     <string>Voice</string>		
-						-->
+						     <string>CrossingCaps</string>		
 						</array>
 				</map>
       </array>
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 8b71f1067f..e4627b132f 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1279,6 +1279,8 @@ bool idle_startup()
 		LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(gFirstSimHandle);
 		LL_INFOS("AppInit") << "Adding initial simulator " << regionp->getOriginGlobal() << LL_ENDL;
 		
+		LL_DEBUGS("CrossingCaps") << "Calling setSeedCapability from init_idle(). Seed cap == "
+		<< gFirstSimSeedCap << LL_ENDL;
 		regionp->setSeedCapability(gFirstSimSeedCap);
 		LL_DEBUGS("AppInit") << "Waiting for seed grant ...." << LL_ENDL;
 		display_startup();
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index f167bd14d8..0178982d45 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -3922,6 +3922,8 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
 	gAgent.setTeleportState( LLAgent::TELEPORT_MOVING );
 	gAgent.setTeleportMessage(LLAgent::sTeleportProgressMessages["contacting"]);
 
+	LL_DEBUGS("CrossingCaps") << "Calling setSeedCapability from process_teleport_finish(). Seed cap == "
+			<< seedCap << LL_ENDL;
 	regionp->setSeedCapability(seedCap);
 
 	// Don't send camera updates to the new region until we're
@@ -4176,6 +4178,9 @@ void process_crossed_region(LLMessageSystem* msg, void**)
 	send_complete_agent_movement(sim_host);
 
 	LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host);
+
+	LL_DEBUGS("CrossingCaps") << "Calling setSeedCapability from process_crossed_region(). Seed cap == "
+			<< seedCap << LL_ENDL;
 	regionp->setSeedCapability(seedCap);
 }
 
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 2286bb09e1..223f754c2e 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -87,6 +87,8 @@ const S32 MAX_CAP_REQUEST_ATTEMPTS = 30;
 
 typedef std::map<std::string, std::string> CapabilityMap;
 
+static void logCapabilities(const CapabilityMap &capmap);
+
 class LLViewerRegionImpl {
 public:
 	LLViewerRegionImpl(LLViewerRegion * region, LLHost const & host)
@@ -321,17 +323,36 @@ private:
 		if ( regionp->getRegionImpl()->mCapabilities.size() != regionp->getRegionImpl()->mSecondCapabilitiesTracker.size() )
 		{
 			LL_WARNS2("AppInit", "Capabilities") 
-				<< "Sim sent duplicate seed caps that differs in size - most likely content." << LL_ENDL;
-			//todo#add cap debug versus original check?
-			/*CapabilityMap::const_iterator iter = regionp->getRegionImpl()->mCapabilities.begin();
-			while (iter!=regionp->getRegionImpl()->mCapabilities.end() )
-			{
-				llinfos<<"BaseCapabilitiesCompleteTracker Original "<<iter->first<<" "<< iter->second<<llendl;
-				++iter;
-			}
-			*/
+				<< "Sim sent duplicate base caps that differ in size from what we initially received - most likely content. "
+				<< "mCapabilities == " << regionp->getRegionImpl()->mCapabilities.size()
+				<< " mSecondCapabilitiesTracker == " << regionp->getRegionImpl()->mSecondCapabilitiesTracker.size()
+				<< LL_ENDL;
+
+			//LL_WARNS2("AppInit", "Capabilities")
+			//	<< "Initial Base capabilities: " << LL_ENDL;
+
+			//logCapabilities(regionp->getRegionImpl()->mCapabilities);
+
+			//LL_WARNS2("AppInit", "Capabilities")
+			//				<< "Latest base capabilities: " << LL_ENDL;
+
+			//logCapabilities(regionp->getRegionImpl()->mSecondCapabilitiesTracker);
+
+			// *TODO 
+			//add cap debug versus original check?
+			//CapabilityMap::const_iterator iter = regionp->getRegionImpl()->mCapabilities.begin();
+			//while (iter!=regionp->getRegionImpl()->mCapabilities.end() )
+			//{
+			//	llinfos<<"BaseCapabilitiesCompleteTracker Original "<<iter->first<<" "<< iter->second<<llendl;
+			//	++iter;
+			//}
+
 			regionp->getRegionImplNC()->mSecondCapabilitiesTracker.clear();
 		}
+		else
+		{
+			LL_DEBUGS("CrossingCaps") << "Sim sent multiple base cap grants with matching sizes." << LL_ENDL;
+		}
 	}
 
 
@@ -1671,7 +1692,9 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 {
 	if (getCapability("Seed") == url)
     {	
-		//llwarns << "Ignoring duplicate seed capability" << llendl;
+		setCapabilityDebug("Seed", url);
+		LL_DEBUGS("CrossingCaps") <<  "Received duplicate seed capability, posting to seed " <<
+				url	<< llendl;
 		//Instead of just returning we build up a second set of seed caps and compare them 
 		//to the "original" seed cap received and determine why there is problem!
 		LLSD capabilityNames = LLSD::emptyArray();
@@ -1821,7 +1844,16 @@ void LLViewerRegion::setCapability(const std::string& name, const std::string& u
 
 void LLViewerRegion::setCapabilityDebug(const std::string& name, const std::string& url)
 {
-	mImpl->mSecondCapabilitiesTracker[name] = url;
+	// Continue to not add certain caps, as we do in setCapability. This is so they match up when we check them later.
+	if ( ! ( name == "EventQueueGet" || name == "UntrustedSimulatorMessage" || name == "SimulatorFeatures" ) )
+	{
+		mImpl->mSecondCapabilitiesTracker[name] = url;
+		if(name == "GetTexture")
+		{
+			mHttpUrl = url ;
+		}
+	}
+
 }
 
 bool LLViewerRegion::isSpecialCapabilityName(const std::string &name)
@@ -1872,16 +1904,7 @@ boost::signals2::connection LLViewerRegion::setCapabilitiesReceivedCallback(cons
 
 void LLViewerRegion::logActiveCapabilities() const
 {
-	int count = 0;
-	CapabilityMap::const_iterator iter;
-	for (iter = mImpl->mCapabilities.begin(); iter != mImpl->mCapabilities.end(); ++iter, ++count)
-	{
-		if (!iter->second.empty())
-		{
-			llinfos << iter->first << " URL is " << iter->second << llendl;
-		}
-	}
-	llinfos << "Dumped " << count << " entries." << llendl;
+	logCapabilities(mImpl->mCapabilities);
 }
 
 LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type)
@@ -1965,3 +1988,19 @@ bool LLViewerRegion::dynamicPathfindingEnabled() const
 			 mSimulatorFeatures["DynamicPathfindingEnabled"].asBoolean());
 }
 
+/* Static Functions */
+
+void logCapabilities(const CapabilityMap &capmap)
+{
+	S32 count = 0;
+	CapabilityMap::const_iterator iter;
+	for (iter = capmap.begin(); iter != capmap.end(); ++iter, ++count)
+	{
+		if (!iter->second.empty())
+		{
+			llinfos << "logCapabilities: " << iter->first << " URL is " << iter->second << llendl;
+		}
+	}
+	llinfos << "logCapabilities: Dumped " << count << " entries." << llendl;
+}
+
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 793becf0c8..d9da639af9 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -1065,6 +1065,8 @@ public:
 					<< sim << llendl;
 			return;
 		}
+		LL_DEBUGS("CrossingCaps") << "Calling setSeedCapability from LLEstablishAgentCommunication::post. Seed cap == "
+				<< input["body"]["seed-capability"] << LL_ENDL;
 		regionp->setSeedCapability(input["body"]["seed-capability"]);
 	}
 };
-- 
cgit v1.2.3