aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs')
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs279
1 files changed, 279 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
new file mode 100644
index 0000000..9b51da7
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs
@@ -0,0 +1,279 @@
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 log4net;
29using System;
30using System.Collections.Generic;
31using System.Reflection;
32using Nini.Config;
33using OpenSim.Framework;
34using OpenSim.Framework.Statistics;
35using OpenSim.Services.Connectors;
36using OpenSim.Region.Framework.Interfaces;
37using OpenSim.Region.Framework.Scenes;
38using OpenSim.Services.Interfaces;
39using OpenMetaverse;
40
41namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
42{
43 public class RemoteInventoryServicesConnector : ISharedRegionModule, IInventoryService
44 {
45 private static readonly ILog m_log =
46 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47
48 private bool m_Enabled = false;
49 private bool m_Initialized = false;
50 private Scene m_Scene;
51 private InventoryServicesConnector m_RemoteConnector;
52
53 public string Name
54 {
55 get { return "RemoteInventoryServicesConnector"; }
56 }
57
58 public RemoteInventoryServicesConnector()
59 {
60 }
61
62 public RemoteInventoryServicesConnector(IConfigSource source)
63 {
64 Init(source);
65 }
66
67 private void Init(IConfigSource source)
68 {
69 m_RemoteConnector = new InventoryServicesConnector(source);
70 }
71
72
73 #region ISharedRegionModule
74
75 public void Initialise(IConfigSource source)
76 {
77 IConfig moduleConfig = source.Configs["Modules"];
78 if (moduleConfig != null)
79 {
80 string name = moduleConfig.GetString("InventoryServices", "");
81 if (name == Name)
82 {
83 Init(source);
84 m_Enabled = true;
85
86 m_log.Info("[INVENTORY CONNECTOR]: Remote inventory enabled");
87 }
88 }
89 }
90
91 public void PostInitialise()
92 {
93 }
94
95 public void Close()
96 {
97 }
98
99 public void AddRegion(Scene scene)
100 {
101 if (!m_Enabled)
102 return;
103
104 if (!m_Initialized)
105 {
106 m_Scene = scene;
107 // ugh!
108 scene.CommsManager.UserProfileCacheService.SetInventoryService(this);
109 scene.CommsManager.UserService.SetInventoryService(this);
110 m_Initialized = true;
111 }
112
113 scene.RegisterModuleInterface<IInventoryService>(this);
114 }
115
116 public void RemoveRegion(Scene scene)
117 {
118 }
119
120 public void RegionLoaded(Scene scene)
121 {
122 if (!m_Enabled)
123 return;
124
125 m_log.InfoFormat("[INVENTORY CONNECTOR]: Enabled remote inventory for region {0}", scene.RegionInfo.RegionName);
126
127 }
128
129 #endregion ISharedRegionModule
130
131 #region IInventoryService
132
133 public bool CreateUserInventory(UUID user)
134 {
135 return false;
136 }
137
138 public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
139 {
140 return new List<InventoryFolderBase>();
141 }
142
143 public InventoryCollection GetUserInventory(UUID userID)
144 {
145 return null;
146 }
147
148 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
149 {
150 UUID sessionID = GetSessionID(userID);
151 try
152 {
153 m_RemoteConnector.GetUserInventory(userID.ToString(), sessionID, callback);
154 }
155 catch (Exception e)
156 {
157 if (StatsManager.SimExtraStats != null)
158 StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();
159
160 m_log.ErrorFormat("[INVENTORY CONNECTOR]: Request inventory operation failed, {0} {1}",
161 e.Source, e.Message);
162 }
163
164 }
165
166 public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
167 {
168 return new List<InventoryItemBase>();
169 }
170
171 public bool AddFolder(InventoryFolderBase folder)
172 {
173 if (folder == null)
174 return false;
175
176 UUID sessionID = GetSessionID(folder.Owner);
177 return m_RemoteConnector.AddFolder(folder.Owner.ToString(), folder, sessionID);
178 }
179
180 public bool UpdateFolder(InventoryFolderBase folder)
181 {
182 if (folder == null)
183 return false;
184
185 UUID sessionID = GetSessionID(folder.Owner);
186 return m_RemoteConnector.UpdateFolder(folder.Owner.ToString(), folder, sessionID);
187 }
188
189 public bool MoveFolder(InventoryFolderBase folder)
190 {
191 if (folder == null)
192 return false;
193
194 UUID sessionID = GetSessionID(folder.Owner);
195 return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID);
196 }
197
198 public bool PurgeFolder(InventoryFolderBase folder)
199 {
200 if (folder == null)
201 return false;
202
203 UUID sessionID = GetSessionID(folder.Owner);
204 return m_RemoteConnector.PurgeFolder(folder.Owner.ToString(), folder, sessionID);
205 }
206
207 public bool AddItem(InventoryItemBase item)
208 {
209 if (item == null)
210 return false;
211
212 UUID sessionID = GetSessionID(item.Owner);
213 return m_RemoteConnector.AddItem(item.Owner.ToString(), item, sessionID);
214 }
215
216 public bool UpdateItem(InventoryItemBase item)
217 {
218 if (item == null)
219 return false;
220
221 UUID sessionID = GetSessionID(item.Owner);
222 return m_RemoteConnector.UpdateItem(item.Owner.ToString(), item, sessionID);
223 }
224
225 public bool DeleteItem(InventoryItemBase item)
226 {
227 if (item == null)
228 return false;
229
230 UUID sessionID = GetSessionID(item.Owner);
231 return m_RemoteConnector.DeleteItem(item.Owner.ToString(), item, sessionID);
232 }
233
234 public InventoryItemBase QueryItem(InventoryItemBase item)
235 {
236 if (item == null)
237 return null;
238
239 UUID sessionID = GetSessionID(item.Owner);
240 return m_RemoteConnector.QueryItem(item.Owner.ToString(), item, sessionID);
241 }
242
243 public InventoryFolderBase QueryFolder(InventoryFolderBase folder)
244 {
245 if (folder == null)
246 return null;
247
248 UUID sessionID = GetSessionID(folder.Owner);
249 return m_RemoteConnector.QueryFolder(folder.Owner.ToString(), folder, sessionID);
250 }
251
252 public bool HasInventoryForUser(UUID userID)
253 {
254 return false;
255 }
256
257 public InventoryFolderBase RequestRootFolder(UUID userID)
258 {
259 return null;
260 }
261
262 public List<InventoryItemBase> GetActiveGestures(UUID userId)
263 {
264 return new List<InventoryItemBase>();
265 }
266
267 #endregion
268
269 private UUID GetSessionID(UUID userID)
270 {
271 ScenePresence sp = m_Scene.GetScenePresence(userID);
272 if (sp != null)
273 return sp.ControllingClient.SessionId;
274
275 return UUID.Zero;
276 }
277
278 }
279}