aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Communications/Tests/LoginServiceTests.cs5
-rw-r--r--OpenSim/Framework/Console/CommandConsole.cs4
-rw-r--r--OpenSim/Framework/Console/ConsoleBase.cs4
-rw-r--r--OpenSim/Framework/Console/RemoteConsole.cs6
-rw-r--r--OpenSim/Framework/IClientAPI.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/RestSessionService.cs3
-rw-r--r--OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs2
-rw-r--r--OpenSim/Grid/InventoryServer/AuthedSessionCache.cs (renamed from OpenSim/Framework/Communications/Cache/AuthedSessionCache.cs)2
-rw-r--r--OpenSim/Grid/InventoryServer/InventoryServiceBase.cs (renamed from OpenSim/Framework/Communications/InventoryServiceBase.cs)4
-rw-r--r--OpenSim/Grid/MessagingServer/Main.cs1
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs26
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs5
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs17
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs5
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs18
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs2
-rw-r--r--OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs16
-rw-r--r--OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs81
-rw-r--r--OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs13
-rw-r--r--OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs5
-rw-r--r--OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs49
-rw-r--r--OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs6
-rw-r--r--OpenSim/Services/Interfaces/IInventoryService.cs8
-rw-r--r--OpenSim/Services/InventoryService/InventoryService.cs16
-rw-r--r--OpenSim/Tests/Common/Mock/TestInventoryService.cs5
-rw-r--r--bin/OpenSim.Grid.AssetInventoryServer.addin.xml24
-rw-r--r--bin/OpenSim.Grid.AssetInventoryServer.exe.config34
28 files changed, 276 insertions, 99 deletions
diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs
index 6f86704..57a908e 100644
--- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs
+++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs
@@ -532,6 +532,11 @@ namespace OpenSim.Framework.Communications.Tests
532 return false; 532 return false;
533 } 533 }
534 534
535 public bool DeleteFolders(UUID ownerID, List<UUID> ids)
536 {
537 return false;
538 }
539
535 public bool PurgeFolder(InventoryFolderBase folder) 540 public bool PurgeFolder(InventoryFolderBase folder)
536 { 541 {
537 return false; 542 return false;
diff --git a/OpenSim/Framework/Console/CommandConsole.cs b/OpenSim/Framework/Console/CommandConsole.cs
index 3387013..06136ff 100644
--- a/OpenSim/Framework/Console/CommandConsole.cs
+++ b/OpenSim/Framework/Console/CommandConsole.cs
@@ -576,7 +576,7 @@ namespace OpenSim.Framework.Console
576 576
577 public void Prompt() 577 public void Prompt()
578 { 578 {
579 string line = ReadLine(m_defaultPrompt, true, true); 579 string line = ReadLine(m_defaultPrompt + "# ", true, true);
580 580
581 if (line != String.Empty) 581 if (line != String.Empty)
582 { 582 {
@@ -592,7 +592,7 @@ namespace OpenSim.Framework.Console
592 592
593 public override string ReadLine(string p, bool isCommand, bool e) 593 public override string ReadLine(string p, bool isCommand, bool e)
594 { 594 {
595 System.Console.Write("{0}", prompt); 595 System.Console.Write("{0}", p);
596 string cmdinput = System.Console.ReadLine(); 596 string cmdinput = System.Console.ReadLine();
597 597
598 if (isCommand) 598 if (isCommand)
diff --git a/OpenSim/Framework/Console/ConsoleBase.cs b/OpenSim/Framework/Console/ConsoleBase.cs
index 5e258ae..0a51266 100644
--- a/OpenSim/Framework/Console/ConsoleBase.cs
+++ b/OpenSim/Framework/Console/ConsoleBase.cs
@@ -48,7 +48,7 @@ namespace OpenSim.Framework.Console
48 /// </summary> 48 /// </summary>
49 public string DefaultPrompt 49 public string DefaultPrompt
50 { 50 {
51 set { m_defaultPrompt = value + "# "; } 51 set { m_defaultPrompt = value; }
52 get { return m_defaultPrompt; } 52 get { return m_defaultPrompt; }
53 } 53 }
54 protected string m_defaultPrompt; 54 protected string m_defaultPrompt;
@@ -123,7 +123,7 @@ namespace OpenSim.Framework.Console
123 123
124 public virtual string ReadLine(string p, bool isCommand, bool e) 124 public virtual string ReadLine(string p, bool isCommand, bool e)
125 { 125 {
126 System.Console.Write("{0}", prompt); 126 System.Console.Write("{0}", p);
127 string cmdinput = System.Console.ReadLine(); 127 string cmdinput = System.Console.ReadLine();
128 128
129 return cmdinput; 129 return cmdinput;
diff --git a/OpenSim/Framework/Console/RemoteConsole.cs b/OpenSim/Framework/Console/RemoteConsole.cs
index da8556a..1810614 100644
--- a/OpenSim/Framework/Console/RemoteConsole.cs
+++ b/OpenSim/Framework/Console/RemoteConsole.cs
@@ -217,6 +217,12 @@ namespace OpenSim.Framework.Console
217 id.AppendChild(xmldoc.CreateTextNode(sessionID.ToString())); 217 id.AppendChild(xmldoc.CreateTextNode(sessionID.ToString()));
218 218
219 rootElement.AppendChild(id); 219 rootElement.AppendChild(id);
220
221 XmlElement prompt = xmldoc.CreateElement("", "Prompt", "");
222 prompt.AppendChild(xmldoc.CreateTextNode(DefaultPrompt));
223
224 rootElement.AppendChild(prompt);
225
220 rootElement.AppendChild(MainConsole.Instance.Commands.GetXml(xmldoc)); 226 rootElement.AppendChild(MainConsole.Instance.Commands.GetXml(xmldoc));
221 227
222 reply["str_response_string"] = xmldoc.InnerXml; 228 reply["str_response_string"] = xmldoc.InnerXml;
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index c6cdcaa..444adf9 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -260,7 +260,7 @@ namespace OpenSim.Framework
260 IClientAPI remoteClient, List<UUID> itemIDs); 260 IClientAPI remoteClient, List<UUID> itemIDs);
261 261
262 public delegate void RemoveInventoryFolder( 262 public delegate void RemoveInventoryFolder(
263 IClientAPI remoteClient, UUID folderID); 263 IClientAPI remoteClient, List<UUID> folderIDs);
264 264
265 public delegate void RequestAsset(IClientAPI remoteClient, RequestAssetArgs transferRequest); 265 public delegate void RequestAsset(IClientAPI remoteClient, RequestAssetArgs transferRequest);
266 266
diff --git a/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs b/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs
index ec2f9ec..2ef4a36 100644
--- a/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs
+++ b/OpenSim/Framework/Servers/HttpServer/RestSessionService.cs
@@ -75,6 +75,7 @@ namespace OpenSim.Framework.Servers.HttpServer
75 WebRequest request = WebRequest.Create(requestUrl); 75 WebRequest request = WebRequest.Create(requestUrl);
76 request.Method = verb; 76 request.Method = verb;
77 request.ContentType = "text/xml"; 77 request.ContentType = "text/xml";
78 request.Timeout = 20000;
78 79
79 MemoryStream buffer = new MemoryStream(); 80 MemoryStream buffer = new MemoryStream();
80 81
@@ -98,7 +99,9 @@ namespace OpenSim.Framework.Servers.HttpServer
98 { 99 {
99 XmlSerializer deserializer = new XmlSerializer(typeof(TResponse)); 100 XmlSerializer deserializer = new XmlSerializer(typeof(TResponse));
100 deserial = (TResponse)deserializer.Deserialize(resp.GetResponseStream()); 101 deserial = (TResponse)deserializer.Deserialize(resp.GetResponseStream());
102 resp.Close();
101 } 103 }
104 requestStream.Close();
102 return deserial; 105 return deserial;
103 } 106 }
104 } 107 }
diff --git a/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs b/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs
index 09ef95b..ec9bd4f 100644
--- a/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs
+++ b/OpenSim/Framework/Servers/HttpServer/SynchronousRestObjectRequester.cs
@@ -62,7 +62,7 @@ namespace OpenSim.Framework.Servers.HttpServer
62 WebRequest request = WebRequest.Create(requestUrl); 62 WebRequest request = WebRequest.Create(requestUrl);
63 request.Method = verb; 63 request.Method = verb;
64 64
65 if (verb == "POST") 65 if ((verb == "POST") || (verb == "PUT"))
66 { 66 {
67 request.ContentType = "text/xml"; 67 request.ContentType = "text/xml";
68 68
diff --git a/OpenSim/Framework/Communications/Cache/AuthedSessionCache.cs b/OpenSim/Grid/InventoryServer/AuthedSessionCache.cs
index d56e48a..dadf34a 100644
--- a/OpenSim/Framework/Communications/Cache/AuthedSessionCache.cs
+++ b/OpenSim/Grid/InventoryServer/AuthedSessionCache.cs
@@ -28,7 +28,7 @@
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30 30
31namespace OpenSim.Framework.Communications.Cache 31namespace OpenSim.Grid.InventoryServer
32{ 32{
33 public class AuthedSessionCache 33 public class AuthedSessionCache
34 { 34 {
diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Grid/InventoryServer/InventoryServiceBase.cs
index 309c415..f8b4949 100644
--- a/OpenSim/Framework/Communications/InventoryServiceBase.cs
+++ b/OpenSim/Grid/InventoryServer/InventoryServiceBase.cs
@@ -30,8 +30,10 @@ using System.Reflection;
30using log4net; 30using log4net;
31using OpenMetaverse; 31using OpenMetaverse;
32using OpenSim.Data; 32using OpenSim.Data;
33using OpenSim.Framework;
34using OpenSim.Framework.Communications;
33 35
34namespace OpenSim.Framework.Communications 36namespace OpenSim.Grid.InventoryServer
35{ 37{
36 /// <summary> 38 /// <summary>
37 /// Abstract base class used by local and grid implementations of an inventory service. 39 /// Abstract base class used by local and grid implementations of an inventory service.
diff --git a/OpenSim/Grid/MessagingServer/Main.cs b/OpenSim/Grid/MessagingServer/Main.cs
index c8035a4..f2631a7 100644
--- a/OpenSim/Grid/MessagingServer/Main.cs
+++ b/OpenSim/Grid/MessagingServer/Main.cs
@@ -65,6 +65,7 @@ namespace OpenSim.Grid.MessagingServer
65 { 65 {
66 ArgvConfigSource argvSource = new ArgvConfigSource(args); 66 ArgvConfigSource argvSource = new ArgvConfigSource(args);
67 argvSource.AddSwitch("Startup", "console", "c"); 67 argvSource.AddSwitch("Startup", "console", "c");
68 argvSource.AddSwitch("Startup", "xmlfile", "x");
68 69
69 IConfig startupConfig = argvSource.Configs["Startup"]; 70 IConfig startupConfig = argvSource.Configs["Startup"];
70 if (startupConfig != null) 71 if (startupConfig != null)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index a7a5aa3..dd01780 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -7090,14 +7090,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7090 if (OnRemoveInventoryFolder != null) 7090 if (OnRemoveInventoryFolder != null)
7091 { 7091 {
7092 handlerRemoveInventoryFolder = null; 7092 handlerRemoveInventoryFolder = null;
7093 List<UUID> uuids = new List<UUID>();
7093 foreach (RemoveInventoryFolderPacket.FolderDataBlock datablock in removeFolder.FolderData) 7094 foreach (RemoveInventoryFolderPacket.FolderDataBlock datablock in removeFolder.FolderData)
7094 { 7095 {
7095 handlerRemoveInventoryFolder = OnRemoveInventoryFolder; 7096 uuids.Add(datablock.FolderID);
7096 7097 }
7097 if (handlerRemoveInventoryFolder != null) 7098 handlerRemoveInventoryFolder = OnRemoveInventoryFolder;
7098 { 7099 if (handlerRemoveInventoryFolder != null)
7099 handlerRemoveInventoryFolder(this, datablock.FolderID); 7100 {
7100 } 7101 handlerRemoveInventoryFolder(this, uuids);
7101 } 7102 }
7102 } 7103 }
7103 break; 7104 break;
@@ -7114,14 +7115,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
7114 if (OnRemoveInventoryFolder != null) 7115 if (OnRemoveInventoryFolder != null)
7115 { 7116 {
7116 handlerRemoveInventoryFolder = null; 7117 handlerRemoveInventoryFolder = null;
7118 List<UUID> uuids = new List<UUID>();
7117 foreach (RemoveInventoryObjectsPacket.FolderDataBlock datablock in removeObject.FolderData) 7119 foreach (RemoveInventoryObjectsPacket.FolderDataBlock datablock in removeObject.FolderData)
7118 { 7120 {
7119 handlerRemoveInventoryFolder = OnRemoveInventoryFolder; 7121 uuids.Add(datablock.FolderID);
7120 7122 }
7121 if (handlerRemoveInventoryFolder != null) 7123 handlerRemoveInventoryFolder = OnRemoveInventoryFolder;
7122 { 7124 if (handlerRemoveInventoryFolder != null)
7123 handlerRemoveInventoryFolder(this, datablock.FolderID); 7125 {
7124 } 7126 handlerRemoveInventoryFolder(this, uuids);
7125 } 7127 }
7126 } 7128 }
7127 7129
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
index d4cb616..bd32f3b 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs
@@ -139,6 +139,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
139 public abstract bool MoveFolder(InventoryFolderBase folder); 139 public abstract bool MoveFolder(InventoryFolderBase folder);
140 140
141 /// <summary> 141 /// <summary>
142 /// Delete a list of inventory folders (from trash)
143 /// </summary>
144 public abstract bool DeleteFolders(UUID ownerID, List<UUID> folderIDs);
145
146 /// <summary>
142 /// Purge an inventory folder of all its items and subfolders. 147 /// Purge an inventory folder of all its items and subfolders.
143 /// </summary> 148 /// </summary>
144 /// <param name="folder"></param> 149 /// <param name="folder"></param>
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
index 787c6c8..1c66254 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs
@@ -330,6 +330,23 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
330 } 330 }
331 } 331 }
332 332
333 public override bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
334 {
335 if (folderIDs == null)
336 return false;
337 if (folderIDs.Count == 0)
338 return false;
339
340 if (IsLocalGridUser(ownerID))
341 return m_GridService.DeleteFolders(ownerID, folderIDs);
342 else
343 {
344 UUID sessionID = GetSessionID(ownerID);
345 string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString();
346 return m_HGService.DeleteFolders(uri, folderIDs, sessionID);
347 }
348 }
349
333 public override bool MoveFolder(InventoryFolderBase folder) 350 public override bool MoveFolder(InventoryFolderBase folder)
334 { 351 {
335 if (folder == null) 352 if (folder == null)
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
index e6edcf2..66d11dd 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
@@ -258,6 +258,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
258 return m_InventoryService.MoveFolder(folder); 258 return m_InventoryService.MoveFolder(folder);
259 } 259 }
260 260
261 public override bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
262 {
263 return m_InventoryService.DeleteFolders(ownerID, folderIDs);
264 }
265
261 /// <summary> 266 /// <summary>
262 /// Purge an inventory folder of all its items and subfolders. 267 /// Purge an inventory folder of all its items and subfolders.
263 /// </summary> 268 /// </summary>
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
index 201442c..0d32c77 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
@@ -243,6 +243,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
243 return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID); 243 return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID);
244 } 244 }
245 245
246 public override bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
247 {
248 if (folderIDs == null)
249 return false;
250 if (folderIDs.Count == 0)
251 return false;
252
253 UUID sessionID = GetSessionID(ownerID);
254 return m_RemoteConnector.DeleteFolders(ownerID.ToString(), folderIDs, sessionID);
255 }
256
257
246 public override bool PurgeFolder(InventoryFolderBase folder) 258 public override bool PurgeFolder(InventoryFolderBase folder)
247 { 259 {
248 if (folder == null) 260 if (folder == null)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index a9d361b..3301536 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -789,23 +789,15 @@ namespace OpenSim.Region.Framework.Scenes
789 } 789 }
790 790
791 /// <summary> 791 /// <summary>
792 /// Removes an inventory folder. Although there is a packet in the Linden protocol for this, it may be 792 /// Removes an inventory folder. This packet is sent when the user
793 /// legacy and not currently used (purge folder is used to remove folders from trash instead). 793 /// right-clicks a folder that's already in trash and chooses "purge"
794 /// </summary> 794 /// </summary>
795 /// <param name="remoteClient"></param> 795 /// <param name="remoteClient"></param>
796 /// <param name="folderID"></param> 796 /// <param name="folderID"></param>
797 private void RemoveInventoryFolder(IClientAPI remoteClient, UUID folderID) 797 private void RemoveInventoryFolder(IClientAPI remoteClient, List<UUID> folderIDs)
798 { 798 {
799 // Unclear is this handler is ever called by the Linden client, but it might 799 m_log.DebugFormat("[SCENE INVENTORY]: RemoveInventoryFolders count {0}", folderIDs.Count);
800 800 InventoryService.DeleteFolders(remoteClient.AgentId, folderIDs);
801 InventoryFolderBase folder = new InventoryFolderBase(folderID);
802 folder.Owner = remoteClient.AgentId;
803 InventoryFolderBase trash = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.TrashFolder);
804 if (trash != null)
805 {
806 folder.ParentID = trash.ID;
807 InventoryService.MoveFolder(folder);
808 }
809 } 801 }
810 802
811 private SceneObjectGroup GetGroupByPrim(uint localID) 803 private SceneObjectGroup GetGroupByPrim(uint localID)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 2b815a2..d3e414f 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -552,7 +552,7 @@ namespace OpenSim.Region.Framework.Scenes
552 552
553 public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID) 553 public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID)
554 { 554 {
555 InventoryFolderBase folder = new InventoryFolderBase(folderID); 555 InventoryFolderBase folder = new InventoryFolderBase(folderID, remoteClient.AgentId);
556 folder = InventoryService.GetFolder(folder); 556 folder = InventoryService.GetFolder(folder);
557 if (folder != null) 557 if (folder != null)
558 { 558 {
diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs
index 6ef1d9d..998b322 100644
--- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs
+++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs
@@ -106,6 +106,10 @@ namespace OpenSim.Server.Handlers.Inventory
106 106
107 m_httpServer.AddStreamHandler( 107 m_httpServer.AddStreamHandler(
108 new RestDeserialiseSecureHandler<List<Guid>, bool>( 108 new RestDeserialiseSecureHandler<List<Guid>, bool>(
109 "POST", "/DeleteFolders/", DeleteFolders, CheckAuthSession));
110
111 m_httpServer.AddStreamHandler(
112 new RestDeserialiseSecureHandler<List<Guid>, bool>(
109 "POST", "/DeleteItem/", DeleteItems, CheckAuthSession)); 113 "POST", "/DeleteItem/", DeleteItems, CheckAuthSession));
110 114
111 m_httpServer.AddStreamHandler( 115 m_httpServer.AddStreamHandler(
@@ -143,6 +147,9 @@ namespace OpenSim.Server.Handlers.Inventory
143 m_httpServer.AddStreamHandler( 147 m_httpServer.AddStreamHandler(
144 new RestDeserialiseSecureHandler<List<InventoryItemBase>, bool>( 148 new RestDeserialiseSecureHandler<List<InventoryItemBase>, bool>(
145 "POST", "/MoveItems/", MoveItems, CheckAuthSession)); 149 "POST", "/MoveItems/", MoveItems, CheckAuthSession));
150
151 m_httpServer.AddStreamHandler(new InventoryServerMoveItemsHandler(m_InventoryService));
152
146 153
147 // for persistent active gestures 154 // for persistent active gestures
148 m_httpServer.AddStreamHandler( 155 m_httpServer.AddStreamHandler(
@@ -251,6 +258,15 @@ namespace OpenSim.Server.Handlers.Inventory
251 return m_InventoryService.GetAssetPermissions(item.Owner, item.AssetID); 258 return m_InventoryService.GetAssetPermissions(item.Owner, item.AssetID);
252 } 259 }
253 260
261 public bool DeleteFolders(List<Guid> items)
262 {
263 List<UUID> uuids = new List<UUID>();
264 foreach (Guid g in items)
265 uuids.Add(new UUID(g));
266 // oops we lost the user info here. Bad bad handlers
267 return m_InventoryService.DeleteFolders(UUID.Zero, uuids);
268 }
269
254 public bool DeleteItems(List<Guid> items) 270 public bool DeleteItems(List<Guid> items)
255 { 271 {
256 List<UUID> uuids = new List<UUID>(); 272 List<UUID> uuids = new List<UUID>();
diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs
new file mode 100644
index 0000000..850bf14
--- /dev/null
+++ b/OpenSim/Server/Handlers/Inventory/InventoryServerMoveItemsHandler.cs
@@ -0,0 +1,81 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using Nini.Config;
29using log4net;
30using System;
31using System.Collections.Generic;
32using System.Reflection;
33using System.IO;
34using System.Net;
35using System.Text;
36using System.Text.RegularExpressions;
37using System.Xml;
38using System.Xml.Serialization;
39using OpenSim.Server.Base;
40using OpenSim.Services.Interfaces;
41using OpenSim.Framework;
42using OpenSim.Framework.Servers.HttpServer;
43using OpenMetaverse;
44
45namespace OpenSim.Server.Handlers.Inventory
46{
47 public class InventoryServerMoveItemsHandler : BaseStreamHandler
48 {
49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50
51 private IInventoryService m_InventoryService;
52
53 public InventoryServerMoveItemsHandler(IInventoryService service) :
54 base("PUT", "/inventory")
55 {
56 m_InventoryService = service;
57 }
58
59 public override byte[] Handle(string path, Stream request,
60 OSHttpRequest httpRequest, OSHttpResponse httpResponse)
61 {
62 XmlSerializer xs = new XmlSerializer(typeof (List<InventoryItemBase>));
63 List<InventoryItemBase> items = (List<InventoryItemBase>)xs.Deserialize(request);
64
65 bool result = false;
66 string[] p = SplitParams(path);
67
68 if (p.Length > 0)
69 {
70 UUID ownerID = UUID.Zero;
71 UUID.TryParse(p[0], out ownerID);
72 result = m_InventoryService.MoveItems(ownerID, items);
73 }
74 else
75 m_log.WarnFormat("[MOVEITEMS HANDLER]: ownerID not provided in request. Unable to serve.");
76
77 xs = new XmlSerializer(typeof(bool));
78 return ServerUtils.SerializeResult(xs, result);
79 }
80 }
81}
diff --git a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs
index 45e921a..1004fb9 100644
--- a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs
@@ -201,6 +201,19 @@ namespace OpenSim.Services.Connectors.Inventory
201 return false; 201 return false;
202 } 202 }
203 203
204 public bool DeleteFolders(string id, List<UUID> folders, UUID sessionID)
205 {
206 string url = string.Empty;
207 string userID = string.Empty;
208
209 if (StringToUrlAndUserID(id, out url, out userID))
210 {
211 ISessionAuthInventoryService connector = GetConnector(url);
212 return connector.DeleteFolders(userID, folders, sessionID);
213 }
214 return false;
215 }
216
204 public bool PurgeFolder(string id, InventoryFolderBase folder, UUID sessionID) 217 public bool PurgeFolder(string id, InventoryFolderBase folder, UUID sessionID)
205 { 218 {
206 string url = string.Empty; 219 string url = string.Empty;
diff --git a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs
index c89c9b7..da8c7e2 100644
--- a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs
+++ b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs
@@ -89,6 +89,11 @@ namespace OpenSim.Services.Connectors
89 bool MoveFolder(string userID, InventoryFolderBase folder, UUID session_id); 89 bool MoveFolder(string userID, InventoryFolderBase folder, UUID session_id);
90 90
91 /// <summary> 91 /// <summary>
92 /// Delete a list of inventory folders (from trash)
93 /// </summary>
94 bool DeleteFolders(string userID, List<UUID> folders, UUID session_id);
95
96 /// <summary>
92 /// Purge an inventory folder of all its items and subfolders. 97 /// Purge an inventory folder of all its items and subfolders.
93 /// </summary> 98 /// </summary>
94 /// <param name="folder"></param> 99 /// <param name="folder"></param>
diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs
index b573a06..a2261ba 100644
--- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs
@@ -229,6 +229,11 @@ namespace OpenSim.Services.Connectors
229 return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( 229 return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject(
230 "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString()); 230 "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString());
231 } 231 }
232 catch (TimeoutException e)
233 {
234 m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation to {0} timed out {0} {1}.", m_ServerURI,
235 e.Source, e.Message);
236 }
232 catch (Exception e) 237 catch (Exception e)
233 { 238 {
234 // Maybe we're talking to an old inventory server. Try this other thing. 239 // Maybe we're talking to an old inventory server. Try this other thing.
@@ -308,6 +313,25 @@ namespace OpenSim.Services.Connectors
308 return false; 313 return false;
309 } 314 }
310 315
316 public bool DeleteFolders(string userID, List<UUID> folderIDs, UUID sessionID)
317 {
318 try
319 {
320 List<Guid> guids = new List<Guid>();
321 foreach (UUID u in folderIDs)
322 guids.Add(u.Guid);
323 return SynchronousRestSessionObjectPoster<List<Guid>, bool>.BeginPostObject(
324 "POST", m_ServerURI + "/DeleteFolders/", guids, sessionID.ToString(), userID);
325 }
326 catch (Exception e)
327 {
328 m_log.ErrorFormat("[INVENTORY CONNECTOR]: Delete inventory folders operation failed, {0} {1}",
329 e.Source, e.Message);
330 }
331
332 return false;
333 }
334
311 public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID) 335 public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID)
312 { 336 {
313 try 337 try
@@ -397,13 +421,28 @@ namespace OpenSim.Services.Connectors
397 421
398 private void MoveItemsAsync(string userID, List<InventoryItemBase> items, UUID sessionID) 422 private void MoveItemsAsync(string userID, List<InventoryItemBase> items, UUID sessionID)
399 { 423 {
424 if (items == null)
425 {
426 m_log.WarnFormat("[INVENTORY CONNECTOR]: request to move items got a null list.");
427 return;
428 }
429
400 try 430 try
401 { 431 {
402 SynchronousRestSessionObjectPoster<List<InventoryItemBase>, bool>.BeginPostObject( 432 //SynchronousRestSessionObjectPoster<List<InventoryItemBase>, bool>.BeginPostObject(
403 "POST", m_ServerURI + "/MoveItems/", items, sessionID.ToString(), userID.ToString()); 433 // "POST", m_ServerURI + "/MoveItems/", items, sessionID.ToString(), userID.ToString());
434
435 //// Success
436 //return;
437 string uri = m_ServerURI + "/inventory/" + userID;
438 if (SynchronousRestObjectRequester.
439 MakeRequest<List<InventoryItemBase>, bool>("PUT", uri, items))
440 m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster succeeded {1}", items.Count, uri);
441 else
442 m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster failed {1}", items.Count, uri); ;
404 443
405 // Success
406 return; 444 return;
445
407 } 446 }
408 catch (Exception e) 447 catch (Exception e)
409 { 448 {
@@ -466,12 +505,12 @@ namespace OpenSim.Services.Connectors
466 return null; 505 return null;
467 } 506 }
468 507
469 public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID sessionID) 508 public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase folder, UUID sessionID)
470 { 509 {
471 try 510 try
472 { 511 {
473 return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject( 512 return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject(
474 "POST", m_ServerURI + "/QueryFolder/", item, sessionID.ToString(), item.Owner.ToString()); 513 "POST", m_ServerURI + "/QueryFolder/", folder, sessionID.ToString(), userID);
475 } 514 }
476 catch (Exception e) 515 catch (Exception e)
477 { 516 {
diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs
index cd283ff..a7aa138 100644
--- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs
@@ -136,6 +136,12 @@ namespace OpenSim.Services.Connectors
136 return false; 136 return false;
137 } 137 }
138 138
139 public bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
140 {
141 return false;
142 }
143
144
139 public bool PurgeFolder(InventoryFolderBase folder) 145 public bool PurgeFolder(InventoryFolderBase folder)
140 { 146 {
141 return false; 147 return false;
diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs
index ebdb09a..c775090 100644
--- a/OpenSim/Services/Interfaces/IInventoryService.cs
+++ b/OpenSim/Services/Interfaces/IInventoryService.cs
@@ -122,6 +122,14 @@ namespace OpenSim.Services.Interfaces
122 bool MoveFolder(InventoryFolderBase folder); 122 bool MoveFolder(InventoryFolderBase folder);
123 123
124 /// <summary> 124 /// <summary>
125 /// Delete an item from the user's inventory
126 /// </summary>
127 /// <param name="item"></param>
128 /// <returns>true if the item was successfully deleted</returns>
129 //bool DeleteItem(InventoryItemBase item);
130 bool DeleteFolders(UUID userID, List<UUID> folderIDs);
131
132 /// <summary>
125 /// Purge an inventory folder of all its items and subfolders. 133 /// Purge an inventory folder of all its items and subfolders.
126 /// </summary> 134 /// </summary>
127 /// <param name="folder"></param> 135 /// <param name="folder"></param>
diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs
index 45bbd37..19b1fd8 100644
--- a/OpenSim/Services/InventoryService/InventoryService.cs
+++ b/OpenSim/Services/InventoryService/InventoryService.cs
@@ -425,15 +425,27 @@ namespace OpenSim.Services.InventoryService
425 return null; 425 return null;
426 } 426 }
427 427
428 public virtual InventoryFolderBase GetFolder(InventoryFolderBase item) 428 public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder)
429 { 429 {
430 InventoryFolderBase result = m_Database.getInventoryFolder(item.ID); 430 InventoryFolderBase result = m_Database.getInventoryFolder(folder.ID);
431 if (result != null) 431 if (result != null)
432 return result; 432 return result;
433 433
434 m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder failed to find folder {0}", folder.ID);
434 return null; 435 return null;
435 } 436 }
436 437
438 public virtual bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
439 {
440 foreach (UUID id in folderIDs)
441 {
442 InventoryFolderBase folder = new InventoryFolderBase(id, ownerID);
443 PurgeFolder(folder);
444 m_Database.deleteInventoryFolder(id);
445 }
446 return true;
447 }
448
437 /// <summary> 449 /// <summary>
438 /// Purge a folder of all items items and subfolders. 450 /// Purge a folder of all items items and subfolders.
439 /// 451 ///
diff --git a/OpenSim/Tests/Common/Mock/TestInventoryService.cs b/OpenSim/Tests/Common/Mock/TestInventoryService.cs
index ee22e5e..5a0ee7c 100644
--- a/OpenSim/Tests/Common/Mock/TestInventoryService.cs
+++ b/OpenSim/Tests/Common/Mock/TestInventoryService.cs
@@ -128,6 +128,11 @@ namespace OpenSim.Tests.Common.Mock
128 return false; 128 return false;
129 } 129 }
130 130
131 public bool DeleteFolders(UUID ownerID, List<UUID> ids)
132 {
133 return false;
134 }
135
131 public bool PurgeFolder(InventoryFolderBase folder) 136 public bool PurgeFolder(InventoryFolderBase folder)
132 { 137 {
133 return false; 138 return false;
diff --git a/bin/OpenSim.Grid.AssetInventoryServer.addin.xml b/bin/OpenSim.Grid.AssetInventoryServer.addin.xml
deleted file mode 100644
index 1f1bdbd..0000000
--- a/bin/OpenSim.Grid.AssetInventoryServer.addin.xml
+++ /dev/null
@@ -1,24 +0,0 @@
1<Addin id="OpenSim.Grid.AssetInventoryServer" isroot="true" version="0.1">
2 <Runtime>
3 <Import assembly="OpenSim.Grid.AssetInventoryServer.exe" />
4 <Import assembly="OpenSim.Framework.dll" />
5 </Runtime>
6 <ExtensionPoint path="/OpenSim/AssetInventoryServer/Frontend">
7 <ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Grid.AssetInventoryServer.IAssetInventoryServerPlugin" />
8 </ExtensionPoint>
9 <ExtensionPoint path="/OpenSim/AssetInventoryServer/AssetStorageProvider">
10 <ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Grid.AssetInventoryServer.IAssetStorageProvider" />
11 </ExtensionPoint>
12 <ExtensionPoint path="/OpenSim/AssetInventoryServer/InventoryStorageProvider">
13 <ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Grid.AssetInventoryServer.IInventoryStorageProvider" />
14 </ExtensionPoint>
15 <ExtensionPoint path="/OpenSim/AssetInventoryServer/AuthenticationProvider">
16 <ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Grid.AssetInventoryServer.IAuthenticationProvider" />
17 </ExtensionPoint>
18 <ExtensionPoint path="/OpenSim/AssetInventoryServer/AuthorizationProvider">
19 <ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Grid.AssetInventoryServer.IAuthorizationProvider" />
20 </ExtensionPoint>
21 <ExtensionPoint path="/OpenSim/AssetInventoryServer/MetricsProvider">
22 <ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Grid.AssetInventoryServer.IMetricsProvider" />
23 </ExtensionPoint>
24</Addin>
diff --git a/bin/OpenSim.Grid.AssetInventoryServer.exe.config b/bin/OpenSim.Grid.AssetInventoryServer.exe.config
deleted file mode 100644
index e542cf2..0000000
--- a/bin/OpenSim.Grid.AssetInventoryServer.exe.config
+++ /dev/null
@@ -1,34 +0,0 @@
1<?xml version="1.0" encoding="utf-8" ?>
2<configuration>
3 <configSections>
4 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
5 </configSections>
6 <appSettings>
7 </appSettings>
8 <log4net>
9 <appender name="Console" type="OpenSim.Framework.Console.OpenSimAppender, OpenSim.Framework.Console">
10 <layout type="log4net.Layout.PatternLayout">
11 <conversionPattern value="%date{HH:mm:ss} - %message%newline" />
12 </layout>
13 </appender>
14 <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
15 <file value="OpenSim.Grid.AssetInventoryServer.log" />
16 <appendToFile value="true" />
17 <layout type="log4net.Layout.PatternLayout">
18 <conversionPattern value="%date %-5level - %logger %message%newline" />
19 </layout>
20 </appender>
21
22 <!-- if you'd like to know what NHibernate is doing more set value="DEBUG" -->
23 <logger name="NHibernate" additivity="false">
24 <level value="INFO"/>
25 <appender-ref ref="NHibernateFileLog"/>
26 </logger>
27
28 <root>
29 <level value="DEBUG" />
30 <appender-ref ref="Console" />
31 <appender-ref ref="LogFileAppender" />
32 </root>
33 </log4net>
34</configuration>