aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie2013-04-30 23:35:59 +0200
committerMelanie2013-04-30 23:50:23 +0100
commitac135c649c55fefc73e2f5f654a5ff65f45d50c0 (patch)
tree522130f0a6df75c1b48d156db78ea8cc0af10386
parentBulletSim: fix error messages created while an avatar has no initial (diff)
downloadopensim-SC-ac135c649c55fefc73e2f5f654a5ff65f45d50c0.zip
opensim-SC-ac135c649c55fefc73e2f5f654a5ff65f45d50c0.tar.gz
opensim-SC-ac135c649c55fefc73e2f5f654a5ff65f45d50c0.tar.bz2
opensim-SC-ac135c649c55fefc73e2f5f654a5ff65f45d50c0.tar.xz
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.
-rw-r--r--OpenSim/Capabilities/CapsHandlers.cs7
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs13
-rw-r--r--OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs2
3 files changed, 18 insertions, 4 deletions
diff --git a/OpenSim/Capabilities/CapsHandlers.cs b/OpenSim/Capabilities/CapsHandlers.cs
index 1709f46..458272d 100644
--- a/OpenSim/Capabilities/CapsHandlers.cs
+++ b/OpenSim/Capabilities/CapsHandlers.cs
@@ -158,7 +158,7 @@ namespace OpenSim.Framework.Capabilities
158 /// capabilities and their handler details. 158 /// capabilities and their handler details.
159 /// </summary> 159 /// </summary>
160 /// <param name="excludeSeed">If true, then exclude the seed cap.</param> 160 /// <param name="excludeSeed">If true, then exclude the seed cap.</param>
161 public Hashtable GetCapsDetails(bool excludeSeed) 161 public Hashtable GetCapsDetails(bool excludeSeed, List<string> requestedCaps)
162 { 162 {
163 Hashtable caps = new Hashtable(); 163 Hashtable caps = new Hashtable();
164 string protocol = "http://"; 164 string protocol = "http://";
@@ -175,6 +175,9 @@ namespace OpenSim.Framework.Capabilities
175 if (excludeSeed && "SEED" == capsName) 175 if (excludeSeed && "SEED" == capsName)
176 continue; 176 continue;
177 177
178 if (requestedCaps != null && !requestedCaps.Contains(capsName))
179 continue;
180
178 caps[capsName] = baseUrl + m_capsHandlers[capsName].Path; 181 caps[capsName] = baseUrl + m_capsHandlers[capsName].Path;
179 } 182 }
180 } 183 }
@@ -182,4 +185,4 @@ namespace OpenSim.Framework.Capabilities
182 return caps; 185 return caps;
183 } 186 }
184 } 187 }
185} \ No newline at end of file 188}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 8752404..a46c24a 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -273,11 +273,22 @@ namespace OpenSim.Region.ClientStack.Linden
273 return string.Empty; 273 return string.Empty;
274 } 274 }
275 275
276 Hashtable caps = m_HostCapsObj.CapsHandlers.GetCapsDetails(true); 276 OSDArray capsRequested = (OSDArray)OSDParser.DeserializeLLSDXml(request);
277 List<string> validCaps = new List<string>();
278
279 foreach (OSD c in capsRequested)
280 validCaps.Add(c.AsString());
281
282 Hashtable caps = m_HostCapsObj.CapsHandlers.GetCapsDetails(true, validCaps);
277 283
278 // Add the external too 284 // Add the external too
279 foreach (KeyValuePair<string, string> kvp in m_HostCapsObj.ExternalCapsHandlers) 285 foreach (KeyValuePair<string, string> kvp in m_HostCapsObj.ExternalCapsHandlers)
286 {
287 if (!validCaps.Contains(kvp.Key))
288 continue;
289
280 caps[kvp.Key] = kvp.Value; 290 caps[kvp.Key] = kvp.Value;
291 }
281 292
282 string result = LLSDHelpers.SerialiseLLSDReply(caps); 293 string result = LLSDHelpers.SerialiseLLSDReply(caps);
283 294
diff --git a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
index 8329af0..6ae9448 100644
--- a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
@@ -240,7 +240,7 @@ namespace OpenSim.Region.CoreModules.Framework
240 { 240 {
241 caps.AppendFormat("** User {0}:\n", kvp.Key); 241 caps.AppendFormat("** User {0}:\n", kvp.Key);
242 242
243 for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false).GetEnumerator(); kvp2.MoveNext(); ) 243 for (IDictionaryEnumerator kvp2 = kvp.Value.CapsHandlers.GetCapsDetails(false, null).GetEnumerator(); kvp2.MoveNext(); )
244 { 244 {
245 Uri uri = new Uri(kvp2.Value.ToString()); 245 Uri uri = new Uri(kvp2.Value.ToString());
246 caps.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery); 246 caps.AppendFormat(m_showCapsCommandFormat, kvp2.Key, uri.PathAndQuery);