aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework')
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs209
-rw-r--r--OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs30
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs29
3 files changed, 53 insertions, 215 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
index 75f0774..f54298c 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs
@@ -35,6 +35,7 @@ using System.Xml;
35using log4net; 35using log4net;
36using OpenMetaverse; 36using OpenMetaverse;
37using OpenSim.Framework; 37using OpenSim.Framework;
38using OpenSim.Framework.Serialization.External;
38 39
39using OpenSim.Region.Framework.Scenes; 40using OpenSim.Region.Framework.Scenes;
40using OpenSim.Region.Framework.Scenes.Serialization; 41using OpenSim.Region.Framework.Scenes.Serialization;
@@ -189,217 +190,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
189 return Utils.StringToBytes(RewriteSOP(xml)); 190 return Utils.StringToBytes(RewriteSOP(xml));
190 } 191 }
191 192
192 protected void TransformXml(XmlReader reader, XmlWriter writer)
193 {
194// m_log.DebugFormat("[HG ASSET MAPPER]: Transforming XML");
195
196 int sopDepth = -1;
197 UserAccount creator = null;
198 bool hasCreatorData = false;
199
200 while (reader.Read())
201 {
202// Console.WriteLine("Depth: {0}, name {1}", reader.Depth, reader.Name);
203
204 switch (reader.NodeType)
205 {
206 case XmlNodeType.Attribute:
207// Console.WriteLine("FOUND ATTRIBUTE {0}", reader.Name);
208 writer.WriteAttributeString(reader.Prefix, reader.Name, reader.NamespaceURI, reader.Value);
209 break;
210
211 case XmlNodeType.CDATA:
212 writer.WriteCData(reader.Value);
213 break;
214
215 case XmlNodeType.Comment:
216 writer.WriteComment(reader.Value);
217 break;
218
219 case XmlNodeType.DocumentType:
220 writer.WriteDocType(reader.Name, reader.Value, null, null);
221 break;
222
223 case XmlNodeType.Element:
224// m_log.DebugFormat("Depth {0} at element {1}", reader.Depth, reader.Name);
225
226 writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
227
228 if (reader.HasAttributes)
229 {
230 while (reader.MoveToNextAttribute())
231 writer.WriteAttributeString(reader.Prefix, reader.Name, reader.NamespaceURI, reader.Value);
232
233 reader.MoveToElement();
234 }
235
236 if (reader.LocalName == "SceneObjectPart")
237 {
238 if (sopDepth < 0)
239 {
240 sopDepth = reader.Depth;
241// m_log.DebugFormat("[HG ASSET MAPPER]: Set sopDepth to {0}", sopDepth);
242 }
243 }
244 else
245 {
246 if (sopDepth >= 0 && reader.Depth == sopDepth + 1)
247 {
248 if (reader.Name == "CreatorID")
249 {
250 reader.Read();
251 if (reader.NodeType == XmlNodeType.Element && reader.Name == "Guid" || reader.Name == "UUID")
252 {
253 reader.Read();
254
255 if (reader.NodeType == XmlNodeType.Text)
256 {
257 UUID uuid = UUID.Zero;
258 UUID.TryParse(reader.Value, out uuid);
259 creator = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, uuid);
260 writer.WriteElementString("UUID", reader.Value);
261 reader.Read();
262 }
263 else
264 {
265 // If we unexpected run across mixed content in this node, still carry on
266 // transforming the subtree (this replicates earlier behaviour).
267 TransformXml(reader, writer);
268 }
269 }
270 else
271 {
272 // If we unexpected run across mixed content in this node, still carry on
273 // transforming the subtree (this replicates earlier behaviour).
274 TransformXml(reader, writer);
275 }
276 }
277 else if (reader.Name == "CreatorData")
278 {
279 reader.Read();
280 if (reader.NodeType == XmlNodeType.Text)
281 {
282 hasCreatorData = true;
283 writer.WriteString(reader.Value);
284 }
285 else
286 {
287 // If we unexpected run across mixed content in this node, still carry on
288 // transforming the subtree (this replicates earlier behaviour).
289 TransformXml(reader, writer);
290 }
291 }
292 }
293 }
294
295 if (reader.IsEmptyElement)
296 {
297// m_log.DebugFormat("[HG ASSET MAPPER]: Writing end for empty element {0}", reader.Name);
298 writer.WriteEndElement();
299 }
300
301 break;
302
303 case XmlNodeType.EndElement:
304// m_log.DebugFormat("Depth {0} at EndElement", reader.Depth);
305 if (sopDepth == reader.Depth)
306 {
307 if (!hasCreatorData && creator != null)
308 writer.WriteElementString(reader.Prefix, "CreatorData", reader.NamespaceURI, string.Format("{0};{1} {2}", m_HomeURI, creator.FirstName, creator.LastName));
309
310// m_log.DebugFormat("[HG ASSET MAPPER]: Reset sopDepth");
311 sopDepth = -1;
312 creator = null;
313 hasCreatorData = false;
314 }
315 writer.WriteEndElement();
316 break;
317
318 case XmlNodeType.EntityReference:
319 writer.WriteEntityRef(reader.Name);
320 break;
321
322 case XmlNodeType.ProcessingInstruction:
323 writer.WriteProcessingInstruction(reader.Name, reader.Value);
324 break;
325
326 case XmlNodeType.Text:
327 writer.WriteString(reader.Value);
328 break;
329
330 case XmlNodeType.XmlDeclaration:
331 // For various reasons, not all serializations have xml declarations (or consistent ones)
332 // and as it's embedded inside a byte stream we don't need it anyway, so ignore.
333 break;
334
335 default:
336 m_log.WarnFormat(
337 "[HG ASSET MAPPER]: Unrecognized node {0} in asset XML transform in {1}",
338 reader.NodeType, m_scene.Name);
339 break;
340 }
341 }
342 }
343
344 protected string RewriteSOP(string xmlData) 193 protected string RewriteSOP(string xmlData)
345 { 194 {
346// Console.WriteLine("Input XML [{0}]", xmlData); 195// Console.WriteLine("Input XML [{0}]", xmlData);
196 return ExternalRepresentationUtils.RewriteSOP(xmlData, m_scene.Name, m_HomeURI, m_scene.UserAccountService, m_scene.RegionInfo.ScopeID);
347 197
348 using (StringWriter sw = new StringWriter())
349 using (XmlTextWriter writer = new XmlTextWriter(sw))
350 using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null))
351 using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment }))
352 {
353 TransformXml(reader, writer);
354
355// Console.WriteLine("Output: [{0}]", sw.ToString());
356
357 return sw.ToString();
358 }
359
360 // We are now taking the more complex streaming approach above because some assets can be very large
361 // and can trigger higher CPU use or possibly memory problems.
362// XmlDocument doc = new XmlDocument();
363// doc.LoadXml(xml);
364// XmlNodeList sops = doc.GetElementsByTagName("SceneObjectPart");
365//
366// foreach (XmlNode sop in sops)
367// {
368// UserAccount creator = null;
369// bool hasCreatorData = false;
370// XmlNodeList nodes = sop.ChildNodes;
371// foreach (XmlNode node in nodes)
372// {
373// if (node.Name == "CreatorID")
374// {
375// UUID uuid = UUID.Zero;
376// UUID.TryParse(node.InnerText, out uuid);
377// creator = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, uuid);
378// }
379// if (node.Name == "CreatorData" && node.InnerText != null && node.InnerText != string.Empty)
380// hasCreatorData = true;
381//
382// //if (node.Name == "OwnerID")
383// //{
384// // UserAccount owner = GetUser(node.InnerText);
385// // if (owner != null)
386// // node.InnerText = m_ProfileServiceURL + "/" + node.InnerText + "/" + owner.FirstName + " " + owner.LastName;
387// //}
388// }
389//
390// if (!hasCreatorData && creator != null)
391// {
392// XmlElement creatorData = doc.CreateElement("CreatorData");
393// creatorData.InnerText = m_HomeURI + ";" + creator.FirstName + " " + creator.LastName;
394// sop.AppendChild(creatorData);
395// }
396// }
397//
398// using (StringWriter wr = new StringWriter())
399// {
400// doc.Save(wr);
401// return wr.ToString();
402// }
403 } 198 }
404 199
405 // TODO: unused 200 // TODO: unused
diff --git a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
index 01814a1..e657f53 100644
--- a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
+++ b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
@@ -65,7 +65,7 @@ namespace OpenSim.Region.CoreModules.Framework.Library
65 { 65 {
66 InventoryFolderImpl folder = null; 66 InventoryFolderImpl folder = null;
67 InventoryCollection inv = new InventoryCollection(); 67 InventoryCollection inv = new InventoryCollection();
68 inv.UserID = m_Library.Owner; 68 inv.OwnerID = m_Library.Owner;
69 69
70 if (folderID != m_Library.ID) 70 if (folderID != m_Library.ID)
71 { 71 {
@@ -87,6 +87,34 @@ namespace OpenSim.Region.CoreModules.Framework.Library
87 return inv; 87 return inv;
88 } 88 }
89 89
90 public virtual InventoryCollection[] GetMultipleFoldersContent(UUID principalID, UUID[] folderIDs)
91 {
92 InventoryCollection[] invColl = new InventoryCollection[folderIDs.Length];
93 int i = 0;
94 foreach (UUID fid in folderIDs)
95 {
96 invColl[i++] = GetFolderContent(principalID, fid);
97 }
98
99 return invColl;
100 }
101
102 public virtual InventoryItemBase[] GetMultipleItems(UUID principalID, UUID[] itemIDs)
103 {
104 InventoryItemBase[] itemColl = new InventoryItemBase[itemIDs.Length];
105 int i = 0;
106 InventoryItemBase item = new InventoryItemBase();
107 item.Owner = principalID;
108 foreach (UUID fid in itemIDs)
109 {
110 item.ID = fid;
111 itemColl[i++] = GetItem(item);
112 }
113
114 return itemColl;
115 }
116
117
90 /// <summary> 118 /// <summary>
91 /// Add a new folder to the user's inventory 119 /// Add a new folder to the user's inventory
92 /// </summary> 120 /// </summary>
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index ba71dc5..7ecbd26 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -154,7 +154,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
154 154
155 #endregion ISharedRegionModule 155 #endregion ISharedRegionModule
156 156
157 157
158 #region Event Handlers 158 #region Event Handlers
159 159
160 void EventManager_OnPrimsLoaded(Scene s) 160 void EventManager_OnPrimsLoaded(Scene s)
@@ -180,7 +180,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
180 void HandleUUIDNameRequest(UUID uuid, IClientAPI client) 180 void HandleUUIDNameRequest(UUID uuid, IClientAPI client)
181 { 181 {
182// m_log.DebugFormat( 182// m_log.DebugFormat(
183// "[USER MANAGEMENT MODULE]: Handling request for name binding of UUID {0} from {1}", 183// "[USER MANAGEMENT MODULE]: Handling request for name binding of UUID {0} from {1}",
184// uuid, remote_client.Name); 184// uuid, remote_client.Name);
185 185
186 if (m_Scenes[0].LibraryService != null && (m_Scenes[0].LibraryService.LibraryRootFolder.Owner == uuid)) 186 if (m_Scenes[0].LibraryService != null && (m_Scenes[0].LibraryService.LibraryRootFolder.Owner == uuid))
@@ -212,7 +212,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
212 // appear to clear this when the user asks it to clear the cache, but others may not. 212 // appear to clear this when the user asks it to clear the cache, but others may not.
213 // 213 //
214 // So to avoid clients 214 // So to avoid clients
215 // (particularly Hypergrid clients) permanently binding "Unknown User" to a given UUID, we will 215 // (particularly Hypergrid clients) permanently binding "Unknown User" to a given UUID, we will
216 // instead drop the request entirely. 216 // instead drop the request entirely.
217 if (GetUser(uuid, out user)) 217 if (GetUser(uuid, out user))
218 { 218 {
@@ -220,7 +220,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
220 } 220 }
221// else 221// else
222// m_log.DebugFormat( 222// m_log.DebugFormat(
223// "[USER MANAGEMENT MODULE]: No bound name for {0} found, ignoring request from {1}", 223// "[USER MANAGEMENT MODULE]: No bound name for {0} found, ignoring request from {1}",
224// uuid, client.Name); 224// uuid, client.Name);
225 }); 225 });
226 } 226 }
@@ -416,7 +416,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
416 m_log.Debug("[USER MANAGEMENT MODULE]: GetServerURLs call failed ", e); 416 m_log.Debug("[USER MANAGEMENT MODULE]: GetServerURLs call failed ", e);
417 userdata.ServerURLs = new Dictionary<string, object>(); 417 userdata.ServerURLs = new Dictionary<string, object>();
418 } 418 }
419 419
420 if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null) 420 if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null)
421 return userdata.ServerURLs[serverType].ToString(); 421 return userdata.ServerURLs[serverType].ToString();
422 } 422 }
@@ -620,7 +620,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
620 AddUser(id, string.Empty, string.Empty, string.Empty); 620 AddUser(id, string.Empty, string.Empty, string.Empty);
621 } 621 }
622 else 622 else
623 { 623 {
624 string homeURL; 624 string homeURL;
625 string firstname = string.Empty; 625 string firstname = string.Empty;
626 string lastname = string.Empty; 626 string lastname = string.Empty;
@@ -676,7 +676,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
676 else 676 else
677 { 677 {
678 lock(m_UserCache) 678 lock(m_UserCache)
679 { 679 {
680 if(!m_UserCache.ContainsKey(id)) 680 if(!m_UserCache.ContainsKey(id))
681 { 681 {
682 UserData newUser = new UserData(); 682 UserData newUser = new UserData();
@@ -726,6 +726,21 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
726 "Show the bindings between user UUIDs and user names", 726 "Show the bindings between user UUIDs and user names",
727 String.Empty, 727 String.Empty,
728 HandleShowUsers); 728 HandleShowUsers);
729
730 MainConsole.Instance.Commands.AddCommand("Users", true,
731 "reset user cache",
732 "reset user cache",
733 "reset user cache to allow changed settings to be applied",
734 String.Empty,
735 HandleResetUserCache);
736 }
737
738 private void HandleResetUserCache(string module, string[] cmd)
739 {
740 lock(m_UserCache)
741 {
742 m_UserCache.Clear();
743 }
729 } 744 }
730 745
731 private void HandleShowUser(string module, string[] cmd) 746 private void HandleShowUser(string module, string[] cmd)