Fix CAPS to work like they should - do not send caps to the viewer if they're not in the requested caps list.
The previous wrong behavior caused the debug setting "UseHTTPInventory" to fail on all viewers when turned off. UDB inventory would not be correctly used in that case.user_profiles
parent
46ae84cfba
commit
ac135c649c
|
@ -158,7 +158,7 @@ namespace OpenSim.Framework.Capabilities
|
||||||
/// capabilities and their handler details.
|
/// capabilities and their handler details.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="excludeSeed">If true, then exclude the seed cap.</param>
|
/// <param name="excludeSeed">If true, then exclude the seed cap.</param>
|
||||||
public Hashtable GetCapsDetails(bool excludeSeed)
|
public Hashtable GetCapsDetails(bool excludeSeed, List<string> requestedCaps)
|
||||||
{
|
{
|
||||||
Hashtable caps = new Hashtable();
|
Hashtable caps = new Hashtable();
|
||||||
string protocol = "http://";
|
string protocol = "http://";
|
||||||
|
@ -175,6 +175,9 @@ namespace OpenSim.Framework.Capabilities
|
||||||
if (excludeSeed && "SEED" == capsName)
|
if (excludeSeed && "SEED" == capsName)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (requestedCaps != null && !requestedCaps.Contains(capsName))
|
||||||
|
continue;
|
||||||
|
|
||||||
caps[capsName] = baseUrl + m_capsHandlers[capsName].Path;
|
caps[capsName] = baseUrl + m_capsHandlers[capsName].Path;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,11 +273,22 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hashtable caps = m_HostCapsObj.CapsHandlers.GetCapsDetails(true);
|
OSDArray capsRequested = (OSDArray)OSDParser.DeserializeLLSDXml(request);
|
||||||
|
List<string> validCaps = new List<string>();
|
||||||
|
|
||||||
|
foreach (OSD c in capsRequested)
|
||||||
|
validCaps.Add(c.AsString());
|
||||||
|
|
||||||
|
Hashtable caps = m_HostCapsObj.CapsHandlers.GetCapsDetails(true, validCaps);
|
||||||
|
|
||||||
// Add the external too
|
// Add the external too
|
||||||
foreach (KeyValuePair<string, string> kvp in m_HostCapsObj.ExternalCapsHandlers)
|
foreach (KeyValuePair<string, string> kvp in m_HostCapsObj.ExternalCapsHandlers)
|
||||||
|
{
|
||||||
|
if (!validCaps.Contains(kvp.Key))
|
||||||
|
continue;
|
||||||
|
|
||||||
caps[kvp.Key] = kvp.Value;
|
caps[kvp.Key] = kvp.Value;
|
||||||
|
}
|
||||||
|
|
||||||
string result = LLSDHelpers.SerialiseLLSDReply(caps);
|
string result = LLSDHelpers.SerialiseLLSDReply(caps);
|
||||||
|
|
||||||
|
|
|
@ -240,7 +240,7 @@ namespace OpenSim.Region.CoreModules.Framework
|
||||||
{
|
{
|
||||||
caps.AppendFormat("** User {0}:\n", kvp.Key);
|
caps.AppendFormat("** User {0}:\n", kvp.Key);
|
||||||
|
|
||||||
for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false).GetEnumerator(); kvp2.MoveNext(); )
|
for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false, null).GetEnumerator(); kvp2.MoveNext(); )
|
||||||
{
|
{
|
||||||
Uri uri = new Uri(kvp2.Value.ToString());
|
Uri uri = new Uri(kvp2.Value.ToString());
|
||||||
caps.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery);
|
caps.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery);
|
||||||
|
|
Loading…
Reference in New Issue