aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/Null
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Data/Null/NullAuthenticationData.cs (renamed from OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs)58
-rw-r--r--OpenSim/Data/Null/NullAvatarData.cs (renamed from OpenSim/Grid/MessagingServer.Modules/PresenceBackreferenceEntry.cs)77
-rw-r--r--OpenSim/Data/Null/NullDataStore.cs6
-rw-r--r--OpenSim/Data/Null/NullFriendsData.cs (renamed from OpenSim/Grid/MessagingServer.Modules/UserDataBaseService.cs)73
-rw-r--r--OpenSim/Data/Null/NullInventoryData.cs193
-rw-r--r--OpenSim/Data/Null/NullPresenceData.cs285
-rw-r--r--OpenSim/Data/Null/NullRegionData.cs63
-rw-r--r--OpenSim/Data/Null/NullUserAccountData.cs160
8 files changed, 815 insertions, 100 deletions
diff --git a/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs b/OpenSim/Data/Null/NullAuthenticationData.cs
index 0c84348..3fb3105 100644
--- a/OpenSim/Grid/UserServer.Modules/GridInfoServiceModule.cs
+++ b/OpenSim/Data/Null/NullAuthenticationData.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -26,54 +26,56 @@
26 */ 26 */
27 27
28using System; 28using System;
29using System.Collections;
29using System.Collections.Generic; 30using System.Collections.Generic;
30using System.IO;
31using System.Reflection;
32using log4net;
33using log4net.Config;
34using OpenMetaverse; 31using OpenMetaverse;
35using OpenSim.Framework; 32using OpenSim.Framework;
36using OpenSim.Framework.Communications; 33using OpenSim.Data;
37using OpenSim.Framework.Communications.Services;
38using OpenSim.Framework.Communications.Cache;
39using OpenSim.Framework.Servers;
40using OpenSim.Framework.Servers.HttpServer;
41using OpenSim.Grid.Communications.OGS1;
42using OpenSim.Grid.Framework;
43 34
44namespace OpenSim.Grid.UserServer.Modules 35namespace OpenSim.Data.Null
45{ 36{
46 public class GridInfoServiceModule 37 public class NullAuthenticationData : IAuthenticationData
47 { 38 {
48 protected IGridServiceCore m_core; 39 private static Dictionary<UUID, AuthenticationData> m_DataByUUID = new Dictionary<UUID, AuthenticationData>();
49 protected GridInfoService m_gridInfoService; 40 private static Dictionary<UUID, string> m_Tokens = new Dictionary<UUID, string>();
50 protected BaseHttpServer m_httpServer;
51 41
52 public GridInfoServiceModule() 42 public NullAuthenticationData(string connectionString, string realm)
53 { 43 {
54 } 44 }
55 45
56 public void Initialise(IGridServiceCore core) 46 public AuthenticationData Get(UUID principalID)
57 { 47 {
58 m_core = core; 48 if (m_DataByUUID.ContainsKey(principalID))
59 m_gridInfoService = new GridInfoService(); 49 return m_DataByUUID[principalID];
50
51 return null;
60 } 52 }
61 53
62 public void PostInitialise() 54 public bool Store(AuthenticationData data)
63 { 55 {
56 m_DataByUUID[data.PrincipalID] = data;
57 return true;
58 }
64 59
60 public bool SetDataItem(UUID principalID, string item, string value)
61 {
62 // Not implemented
63 return false;
65 } 64 }
66 65
67 public void RegisterHandlers(BaseHttpServer httpServer) 66 public bool SetToken(UUID principalID, string token, int lifetime)
68 { 67 {
69 m_httpServer = httpServer; 68 m_Tokens[principalID] = token;
70 m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", 69 return true;
71 m_gridInfoService.RestGetGridInfoMethod));
72 m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
73 } 70 }
74 71
75 public void Close() 72 public bool CheckToken(UUID principalID, string token, int lifetime)
76 { 73 {
74 if (m_Tokens.ContainsKey(principalID))
75 return m_Tokens[principalID] == token;
76
77 return false;
77 } 78 }
79
78 } 80 }
79} 81}
diff --git a/OpenSim/Grid/MessagingServer.Modules/PresenceBackreferenceEntry.cs b/OpenSim/Data/Null/NullAvatarData.cs
index 67dde6d..c81ba43 100644
--- a/OpenSim/Grid/MessagingServer.Modules/PresenceBackreferenceEntry.cs
+++ b/OpenSim/Data/Null/NullAvatarData.cs
@@ -25,72 +25,69 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System;
29using System.Collections;
28using System.Collections.Generic; 30using System.Collections.Generic;
29using OpenMetaverse; 31using OpenMetaverse;
32using OpenSim.Framework;
33using OpenSim.Data;
30 34
31namespace OpenSim.Grid.MessagingServer.Modules 35namespace OpenSim.Data.Null
32{ 36{
33 // This is a wrapper for a List<UUID> so it can be happily stored in a hashtable. 37 public class NullAvatarData : IAvatarData
34 public class PresenceBackreferenceEntry
35 { 38 {
36 List<UUID> AgentList = new List<UUID>(); 39 private static Dictionary<UUID, AvatarBaseData> m_DataByUUID = new Dictionary<UUID, AvatarBaseData>();
37 40
38 public PresenceBackreferenceEntry() 41 public NullAvatarData(string connectionString, string realm)
39 { 42 {
40
41 } 43 }
42 44
43 public void Add(UUID item) 45 public AvatarBaseData[] Get(string field, string val)
44 { 46 {
45 lock (AgentList) 47 if (field == "PrincipalID")
46 { 48 {
47 AgentList.Add(item); 49 UUID id = UUID.Zero;
50 if (UUID.TryParse(val, out id))
51 if (m_DataByUUID.ContainsKey(id))
52 return new AvatarBaseData[] { m_DataByUUID[id] };
48 } 53 }
49 }
50 54
51 public UUID getitem(int index) 55 // Fail
52 { 56 return new AvatarBaseData[0];
53 UUID result = UUID.Zero;
54 lock (AgentList)
55 {
56 if (index > 0 && index < AgentList.Count)
57 {
58 result = AgentList[index];
59 }
60 }
61 return result;
62 } 57 }
63 58
64 public int Count 59 public bool Store(AvatarBaseData data)
65 { 60 {
66 get 61 m_DataByUUID[data.PrincipalID] = data;
67 { 62 return true;
68 int count = 0;
69 lock (AgentList)
70 {
71 count = AgentList.Count;
72 }
73 return count;
74 }
75 } 63 }
76 64
77 public void Remove(UUID item) 65 public bool Delete(UUID principalID, string name)
78 { 66 {
79 lock (AgentList) 67 if (m_DataByUUID.ContainsKey(principalID) && m_DataByUUID[principalID].Data.ContainsKey(name))
80 { 68 {
81 if (AgentList.Contains(item)) 69 m_DataByUUID[principalID].Data.Remove(name);
82 AgentList.Remove(item); 70 return true;
83 } 71 }
72
73 return false;
84 } 74 }
85 75
86 public bool contains(UUID item) 76 public bool Delete(string field, string val)
87 { 77 {
88 bool result = false; 78 if (field == "PrincipalID")
89 lock (AgentList)
90 { 79 {
91 result = AgentList.Contains(item); 80 UUID id = UUID.Zero;
81 if (UUID.TryParse(val, out id))
82 if (m_DataByUUID.ContainsKey(id))
83 {
84 m_DataByUUID.Remove(id);
85 return true;
86 }
92 } 87 }
93 return result; 88
89 return false;
94 } 90 }
91
95 } 92 }
96} 93}
diff --git a/OpenSim/Data/Null/NullDataStore.cs b/OpenSim/Data/Null/NullDataStore.cs
index 4b6d0f3..3ba44bb 100644
--- a/OpenSim/Data/Null/NullDataStore.cs
+++ b/OpenSim/Data/Null/NullDataStore.cs
@@ -50,13 +50,13 @@ namespace OpenSim.Data.Null
50 public void StoreRegionSettings(RegionSettings rs) 50 public void StoreRegionSettings(RegionSettings rs)
51 { 51 {
52 } 52 }
53 public RegionMeta7WindlightData LoadRegionWindlightSettings(UUID regionUUID) 53 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
54 { 54 {
55 //This connector doesn't support the windlight module yet 55 //This connector doesn't support the windlight module yet
56 //Return default LL windlight settings 56 //Return default LL windlight settings
57 return new RegionMeta7WindlightData(); 57 return new RegionLightShareData();
58 } 58 }
59 public void StoreRegionWindlightSettings(RegionMeta7WindlightData wl) 59 public void StoreRegionWindlightSettings(RegionLightShareData wl)
60 { 60 {
61 //This connector doesn't support the windlight module yet 61 //This connector doesn't support the windlight module yet
62 } 62 }
diff --git a/OpenSim/Grid/MessagingServer.Modules/UserDataBaseService.cs b/OpenSim/Data/Null/NullFriendsData.cs
index 76c4899..e7f7fd3 100644
--- a/OpenSim/Grid/MessagingServer.Modules/UserDataBaseService.cs
+++ b/OpenSim/Data/Null/NullFriendsData.cs
@@ -25,51 +25,68 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System;
29using System.Collections;
30using System.Collections.Generic;
28using OpenMetaverse; 31using OpenMetaverse;
29using OpenSim.Framework; 32using OpenSim.Framework;
30using OpenSim.Framework.Communications; 33using OpenSim.Data;
31 34
32namespace OpenSim.Grid.MessagingServer.Modules 35namespace OpenSim.Data.Null
33{ 36{
34 public class UserDataBaseService : UserManagerBase 37 public class NullFriendsData : IFriendsData
35 { 38 {
36 /// <summary> 39 private static List<FriendsData> m_Data = new List<FriendsData>();
37 /// Constructor. 40
38 /// </summary> 41 public NullFriendsData(string connectionString, string realm)
39 /// Passing null to parent because we never use any function that requires an interservice inventory call.
40 public UserDataBaseService()
41 : base(null)
42 { 42 {
43 } 43 }
44
45 public UserAgentData GetUserAgentData(UUID AgentID)
46 {
47 UserProfileData userProfile = GetUserProfile(AgentID);
48 44
49 if (userProfile != null) 45 /// <summary>
46 /// Tries to implement the Get [] semantics, but it cuts corners.
47 /// Specifically, it gets all friendships even if they weren't accepted yet.
48 /// </summary>
49 /// <param name="fields"></param>
50 /// <param name="values"></param>
51 /// <returns></returns>
52 public FriendsData[] GetFriends(UUID userID)
53 {
54 List<FriendsData> lst = m_Data.FindAll(delegate (FriendsData fdata)
50 { 55 {
51 return userProfile.CurrentAgent; 56 return fdata.PrincipalID == userID;
52 } 57 });
53 58
54 return null; 59 if (lst != null)
55 } 60 return lst.ToArray();
56 61
57 public override UserProfileData SetupMasterUser(string firstName, string lastName) 62 return new FriendsData[0];
58 {
59 //throw new Exception("The method or operation is not implemented.");
60 return null;
61 } 63 }
62 64
63 public override UserProfileData SetupMasterUser(string firstName, string lastName, string password) 65 public bool Store(FriendsData data)
64 { 66 {
65 //throw new Exception("The method or operation is not implemented."); 67 if (data == null)
66 return null; 68 return false;
69
70 m_Data.Add(data);
71
72 return true;
67 } 73 }
68 74
69 public override UserProfileData SetupMasterUser(UUID uuid) 75 public bool Delete(UUID userID, string friendID)
70 { 76 {
71 //throw new Exception("The method or operation is not implemented."); 77 List<FriendsData> lst = m_Data.FindAll(delegate(FriendsData fdata) { return fdata.PrincipalID == userID; });
72 return null; 78 if (lst != null)
79 {
80 FriendsData friend = lst.Find(delegate(FriendsData fdata) { return fdata.Friend == friendID; });
81 if (friendID != null)
82 {
83 m_Data.Remove(friend);
84 return true;
85 }
86 }
87
88 return false;
73 } 89 }
90
74 } 91 }
75} 92}
diff --git a/OpenSim/Data/Null/NullInventoryData.cs b/OpenSim/Data/Null/NullInventoryData.cs
new file mode 100644
index 0000000..8f196e2
--- /dev/null
+++ b/OpenSim/Data/Null/NullInventoryData.cs
@@ -0,0 +1,193 @@
1using System;
2using System.Collections.Generic;
3
4using OpenMetaverse;
5using OpenSim.Framework;
6
7namespace OpenSim.Data.Null
8{
9 /// <summary>
10 /// This class is completely null.
11 /// </summary>
12 public class NullInventoryData : IInventoryDataPlugin
13 {
14 public string Version { get { return "1.0.0.0"; } }
15
16 public void Initialise()
17 {
18 }
19
20 public void Dispose()
21 {
22 // Do nothing.
23 }
24
25 public string Name
26 {
27 get { return "Null Inventory Data Interface"; }
28 }
29
30 public void Initialise(string connect)
31 {
32 }
33
34
35 /// <summary>
36 /// Returns all descendent folders of this folder. Does not return the parent folder itself.
37 /// </summary>
38 /// <param name="parentID">The folder to get subfolders for</param>
39 /// <returns>A list of inventory folders</returns>
40 public List<InventoryFolderBase> getFolderHierarchy(UUID parentID)
41 {
42 return new List<InventoryFolderBase>();
43 }
44
45 /// <summary>
46 /// Returns a list of inventory items contained within the specified folder
47 /// </summary>
48 /// <param name="folderID">The UUID of the target folder</param>
49 /// <returns>A List of InventoryItemBase items</returns>
50 public List<InventoryItemBase> getInventoryInFolder(UUID folderID)
51 {
52 return new List<InventoryItemBase>();
53 }
54
55 /// <summary>
56 /// Returns a list of the root folders within a users inventory
57 /// </summary>
58 /// <param name="user">The user whos inventory is to be searched</param>
59 /// <returns>A list of folder objects</returns>
60 public List<InventoryFolderBase> getUserRootFolders(UUID user)
61 {
62 return new List<InventoryFolderBase>();
63 }
64
65 /// <summary>
66 /// Returns the users inventory root folder.
67 /// </summary>
68 /// <param name="user">The UUID of the user who is having inventory being returned</param>
69 /// <returns>Root inventory folder, null if no root inventory folder was found</returns>
70 public InventoryFolderBase getUserRootFolder(UUID user)
71 {
72 return null;
73 }
74
75 /// <summary>
76 /// Returns a list of inventory folders contained in the folder 'parentID'
77 /// </summary>
78 /// <param name="parentID">The folder to get subfolders for</param>
79 /// <returns>A list of inventory folders</returns>
80 public List<InventoryFolderBase> getInventoryFolders(UUID parentID)
81 {
82 return new List<InventoryFolderBase>();
83 }
84
85 /// <summary>
86 /// Returns an inventory item by its UUID
87 /// </summary>
88 /// <param name="item">The UUID of the item to be returned</param>
89 /// <returns>A class containing item information</returns>
90 public InventoryItemBase getInventoryItem(UUID item)
91 {
92 return null;
93 }
94
95 /// <summary>
96 /// Returns a specified inventory folder by its UUID
97 /// </summary>
98 /// <param name="folder">The UUID of the folder to be returned</param>
99 /// <returns>A class containing folder information</returns>
100 public InventoryFolderBase getInventoryFolder(UUID folder)
101 {
102 return null;
103 }
104
105 /// <summary>
106 /// Creates a new inventory item based on item
107 /// </summary>
108 /// <param name="item">The item to be created</param>
109 public void addInventoryItem(InventoryItemBase item)
110 {
111 }
112
113 /// <summary>
114 /// Updates an inventory item with item (updates based on ID)
115 /// </summary>
116 /// <param name="item">The updated item</param>
117 public void updateInventoryItem(InventoryItemBase item)
118 {
119 }
120
121 /// <summary>
122 ///
123 /// </summary>
124 /// <param name="item"></param>
125 public void deleteInventoryItem(UUID item)
126 {
127 }
128
129 /// <summary>
130 ///
131 /// </summary>
132 /// <param name="item"></param>
133 public InventoryItemBase queryInventoryItem(UUID item)
134 {
135 return null;
136 }
137
138 /// <summary>
139 ///
140 /// </summary>
141 /// <param name="item"></param>
142 public InventoryFolderBase queryInventoryFolder(UUID folder)
143 {
144 return null;
145 }
146
147 /// <summary>
148 /// Adds a new folder specified by folder
149 /// </summary>
150 /// <param name="folder">The inventory folder</param>
151 public void addInventoryFolder(InventoryFolderBase folder)
152 {
153 }
154
155 /// <summary>
156 /// Updates a folder based on its ID with folder
157 /// </summary>
158 /// <param name="folder">The inventory folder</param>
159 public void updateInventoryFolder(InventoryFolderBase folder)
160 {
161 }
162
163 /// <summary>
164 /// Updates a folder based on its ID with folder
165 /// </summary>
166 /// <param name="folder">The inventory folder</param>
167 public void moveInventoryFolder(InventoryFolderBase folder)
168 {
169 }
170
171 /// <summary>
172 /// Deletes a folder. Thie will delete both the folder itself and its contents (items and descendent folders)
173 /// </summary>
174 /// <param name="folder">The id of the folder</param>
175 public void deleteInventoryFolder(UUID folder)
176 {
177 }
178
179 /// <summary>
180 /// Returns all activated gesture-items in the inventory of the specified avatar.
181 /// </summary>
182 /// <param name="avatarID">
183 /// The <see cref="UUID"/> of the avatar
184 /// </param>
185 /// <returns>
186 /// The list of gestures (<see cref="InventoryItemBase"/>s)
187 /// </returns>
188 public List<InventoryItemBase> fetchActiveGestures(UUID avatarID)
189 {
190 return new List<InventoryItemBase>();
191 }
192 }
193}
diff --git a/OpenSim/Data/Null/NullPresenceData.cs b/OpenSim/Data/Null/NullPresenceData.cs
new file mode 100644
index 0000000..b98b5c9
--- /dev/null
+++ b/OpenSim/Data/Null/NullPresenceData.cs
@@ -0,0 +1,285 @@
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 System;
29using System.Collections;
30using System.Collections.Generic;
31using System.Reflection;
32using log4net;
33using OpenMetaverse;
34using OpenSim.Framework;
35using OpenSim.Data;
36
37namespace OpenSim.Data.Null
38{
39 public class NullPresenceData : IPresenceData
40 {
41// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
42
43 private static NullPresenceData Instance;
44
45 Dictionary<UUID, PresenceData> m_presenceData = new Dictionary<UUID, PresenceData>();
46
47 public NullPresenceData(string connectionString, string realm)
48 {
49 if (Instance == null)
50 {
51 Instance = this;
52
53 //Console.WriteLine("[XXX] NullRegionData constructor");
54 }
55 }
56
57 public bool Store(PresenceData data)
58 {
59 if (Instance != this)
60 return Instance.Store(data);
61
62// m_log.DebugFormat("[NULL PRESENCE DATA]: Storing presence {0}", data.UserID);
63// Console.WriteLine("HOME for " + data.UserID + " is " + (data.Data.ContainsKey("HomeRegionID") ? data.Data["HomeRegionID"] : "Not found"));
64
65 m_presenceData[data.SessionID] = data;
66 return true;
67 }
68
69 public PresenceData Get(UUID sessionID)
70 {
71 if (Instance != this)
72 return Instance.Get(sessionID);
73
74 if (m_presenceData.ContainsKey(sessionID))
75 {
76 return m_presenceData[sessionID];
77 }
78
79 return null;
80 }
81
82 public void LogoutRegionAgents(UUID regionID)
83 {
84 if (Instance != this)
85 {
86 Instance.LogoutRegionAgents(regionID);
87 return;
88 }
89
90 List<UUID> toBeDeleted = new List<UUID>();
91 foreach (KeyValuePair<UUID, PresenceData> kvp in m_presenceData)
92 if (kvp.Value.RegionID == regionID)
93 toBeDeleted.Add(kvp.Key);
94
95 foreach (UUID u in toBeDeleted)
96 m_presenceData.Remove(u);
97 }
98
99 public bool ReportAgent(UUID sessionID, UUID regionID, string position, string lookAt)
100 {
101 if (Instance != this)
102 return Instance.ReportAgent(sessionID, regionID, position, lookAt);
103
104 if (m_presenceData.ContainsKey(sessionID))
105 {
106 m_presenceData[sessionID].RegionID = regionID;
107 m_presenceData[sessionID].Data["Position"] = position;
108 m_presenceData[sessionID].Data["LookAt"] = lookAt;
109 return true;
110 }
111
112 return false;
113 }
114
115 public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
116 {
117 if (Instance != this)
118 return Instance.SetHomeLocation(userID, regionID, position, lookAt);
119
120 bool foundone = false;
121 foreach (PresenceData p in m_presenceData.Values)
122 {
123 if (p.UserID == userID)
124 {
125// m_log.DebugFormat(
126// "[NULL PRESENCE DATA]: Setting home location {0} {1} {2} for {3}",
127// regionID, position, lookAt, p.UserID);
128
129 p.Data["HomeRegionID"] = regionID.ToString();
130 p.Data["HomePosition"] = position.ToString();
131 p.Data["HomeLookAt"] = lookAt.ToString();
132 foundone = true;
133 }
134 }
135
136 return foundone;
137 }
138
139 public PresenceData[] Get(string field, string data)
140 {
141 if (Instance != this)
142 return Instance.Get(field, data);
143
144// m_log.DebugFormat(
145// "[NULL PRESENCE DATA]: Getting presence data for field {0} with parameter {1}", field, data);
146
147 List<PresenceData> presences = new List<PresenceData>();
148 if (field == "UserID")
149 {
150 foreach (PresenceData p in m_presenceData.Values)
151 {
152 if (p.UserID == data)
153 {
154 presences.Add(p);
155// Console.WriteLine("HOME for " + p.UserID + " is " + (p.Data.ContainsKey("HomeRegionID") ? p.Data["HomeRegionID"] : "Not found"));
156 }
157 }
158
159 return presences.ToArray();
160 }
161 else if (field == "SessionID")
162 {
163 UUID session = UUID.Zero;
164 if (!UUID.TryParse(data, out session))
165 return presences.ToArray();
166
167 if (m_presenceData.ContainsKey(session))
168 {
169 presences.Add(m_presenceData[session]);
170 return presences.ToArray();
171 }
172 }
173 else if (field == "RegionID")
174 {
175 UUID region = UUID.Zero;
176 if (!UUID.TryParse(data, out region))
177 return presences.ToArray();
178 foreach (PresenceData p in m_presenceData.Values)
179 if (p.RegionID == region)
180 presences.Add(p);
181 return presences.ToArray();
182 }
183 else
184 {
185 foreach (PresenceData p in m_presenceData.Values)
186 {
187 if (p.Data.ContainsKey(field) && p.Data[field] == data)
188 presences.Add(p);
189 }
190 return presences.ToArray();
191 }
192
193 return presences.ToArray();
194 }
195
196 public void Prune(string userID)
197 {
198 if (Instance != this)
199 {
200 Instance.Prune(userID);
201 return;
202 }
203
204// m_log.DebugFormat("[NULL PRESENCE DATA]: Prune called for {0}", userID);
205
206 List<UUID> deleteSessions = new List<UUID>();
207 int online = 0;
208
209 foreach (KeyValuePair<UUID, PresenceData> kvp in m_presenceData)
210 {
211// m_log.DebugFormat("Online: {0}", kvp.Value.Data["Online"]);
212
213 bool on = false;
214 if (bool.TryParse(kvp.Value.Data["Online"], out on) && on)
215 online++;
216 else
217 deleteSessions.Add(kvp.Key);
218 }
219
220// m_log.DebugFormat("[NULL PRESENCE DATA]: online [{0}], deleteSession.Count [{1}]", online, deleteSessions.Count);
221
222 // Leave one session behind so that we can pick up details such as home location
223 if (online == 0 && deleteSessions.Count > 0)
224 deleteSessions.RemoveAt(0);
225
226 foreach (UUID s in deleteSessions)
227 m_presenceData.Remove(s);
228 }
229
230 public bool Delete(string field, string data)
231 {
232// m_log.DebugFormat(
233// "[NULL PRESENCE DATA]: Deleting presence data for field {0} with parameter {1}", field, data);
234
235 if (Instance != this)
236 return Instance.Delete(field, data);
237
238 List<UUID> presences = new List<UUID>();
239 if (field == "UserID")
240 {
241 foreach (KeyValuePair<UUID, PresenceData> p in m_presenceData)
242 if (p.Value.UserID == data)
243 presences.Add(p.Key);
244 }
245 else if (field == "SessionID")
246 {
247 UUID session = UUID.Zero;
248 if (UUID.TryParse(data, out session))
249 {
250 if (m_presenceData.ContainsKey(session))
251 {
252 presences.Add(session);
253 }
254 }
255 }
256 else if (field == "RegionID")
257 {
258 UUID region = UUID.Zero;
259 if (UUID.TryParse(data, out region))
260 {
261 foreach (KeyValuePair<UUID, PresenceData> p in m_presenceData)
262 if (p.Value.RegionID == region)
263 presences.Add(p.Key);
264 }
265 }
266 else
267 {
268 foreach (KeyValuePair<UUID, PresenceData> p in m_presenceData)
269 {
270 if (p.Value.Data.ContainsKey(field) && p.Value.Data[field] == data)
271 presences.Add(p.Key);
272 }
273 }
274
275 foreach (UUID u in presences)
276 m_presenceData.Remove(u);
277
278 if (presences.Count == 0)
279 return false;
280
281 return true;
282 }
283
284 }
285}
diff --git a/OpenSim/Data/Null/NullRegionData.cs b/OpenSim/Data/Null/NullRegionData.cs
index e8263ea..30ad747 100644
--- a/OpenSim/Data/Null/NullRegionData.cs
+++ b/OpenSim/Data/Null/NullRegionData.cs
@@ -31,20 +31,31 @@ using System.Collections.Generic;
31using OpenMetaverse; 31using OpenMetaverse;
32using OpenSim.Framework; 32using OpenSim.Framework;
33using OpenSim.Data; 33using OpenSim.Data;
34using System.Reflection;
35using log4net;
34 36
35namespace OpenSim.Data.Null 37namespace OpenSim.Data.Null
36{ 38{
37 public class NullRegionData : IRegionData 39 public class NullRegionData : IRegionData
38 { 40 {
41 private static NullRegionData Instance = null;
42
43// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44
39 Dictionary<UUID, RegionData> m_regionData = new Dictionary<UUID, RegionData>(); 45 Dictionary<UUID, RegionData> m_regionData = new Dictionary<UUID, RegionData>();
40 46
41 public NullRegionData(string connectionString, string realm) 47 public NullRegionData(string connectionString, string realm)
42 { 48 {
49 if (Instance == null)
50 Instance = this;
43 //Console.WriteLine("[XXX] NullRegionData constructor"); 51 //Console.WriteLine("[XXX] NullRegionData constructor");
44 } 52 }
45 53
46 public List<RegionData> Get(string regionName, UUID scopeID) 54 public List<RegionData> Get(string regionName, UUID scopeID)
47 { 55 {
56 if (Instance != this)
57 return Instance.Get(regionName, scopeID);
58
48 List<RegionData> ret = new List<RegionData>(); 59 List<RegionData> ret = new List<RegionData>();
49 60
50 foreach (RegionData r in m_regionData.Values) 61 foreach (RegionData r in m_regionData.Values)
@@ -69,6 +80,9 @@ namespace OpenSim.Data.Null
69 80
70 public RegionData Get(int posX, int posY, UUID scopeID) 81 public RegionData Get(int posX, int posY, UUID scopeID)
71 { 82 {
83 if (Instance != this)
84 return Instance.Get(posX, posY, scopeID);
85
72 List<RegionData> ret = new List<RegionData>(); 86 List<RegionData> ret = new List<RegionData>();
73 87
74 foreach (RegionData r in m_regionData.Values) 88 foreach (RegionData r in m_regionData.Values)
@@ -85,6 +99,9 @@ namespace OpenSim.Data.Null
85 99
86 public RegionData Get(UUID regionID, UUID scopeID) 100 public RegionData Get(UUID regionID, UUID scopeID)
87 { 101 {
102 if (Instance != this)
103 return Instance.Get(regionID, scopeID);
104
88 if (m_regionData.ContainsKey(regionID)) 105 if (m_regionData.ContainsKey(regionID))
89 return m_regionData[regionID]; 106 return m_regionData[regionID];
90 107
@@ -93,6 +110,9 @@ namespace OpenSim.Data.Null
93 110
94 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID) 111 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID)
95 { 112 {
113 if (Instance != this)
114 return Instance.Get(startX, startY, endX, endY, scopeID);
115
96 List<RegionData> ret = new List<RegionData>(); 116 List<RegionData> ret = new List<RegionData>();
97 117
98 foreach (RegionData r in m_regionData.Values) 118 foreach (RegionData r in m_regionData.Values)
@@ -106,6 +126,9 @@ namespace OpenSim.Data.Null
106 126
107 public bool Store(RegionData data) 127 public bool Store(RegionData data)
108 { 128 {
129 if (Instance != this)
130 return Instance.Store(data);
131
109 m_regionData[data.RegionID] = data; 132 m_regionData[data.RegionID] = data;
110 133
111 return true; 134 return true;
@@ -113,6 +136,9 @@ namespace OpenSim.Data.Null
113 136
114 public bool SetDataItem(UUID regionID, string item, string value) 137 public bool SetDataItem(UUID regionID, string item, string value)
115 { 138 {
139 if (Instance != this)
140 return Instance.SetDataItem(regionID, item, value);
141
116 if (!m_regionData.ContainsKey(regionID)) 142 if (!m_regionData.ContainsKey(regionID))
117 return false; 143 return false;
118 144
@@ -123,6 +149,9 @@ namespace OpenSim.Data.Null
123 149
124 public bool Delete(UUID regionID) 150 public bool Delete(UUID regionID)
125 { 151 {
152 if (Instance != this)
153 return Instance.Delete(regionID);
154
126 if (!m_regionData.ContainsKey(regionID)) 155 if (!m_regionData.ContainsKey(regionID))
127 return false; 156 return false;
128 157
@@ -130,5 +159,37 @@ namespace OpenSim.Data.Null
130 159
131 return true; 160 return true;
132 } 161 }
162
163 public List<RegionData> GetDefaultRegions(UUID scopeID)
164 {
165 if (Instance != this)
166 return Instance.GetDefaultRegions(scopeID);
167
168 List<RegionData> ret = new List<RegionData>();
169
170 foreach (RegionData r in m_regionData.Values)
171 {
172 if ((Convert.ToInt32(r.Data["flags"]) & 1) != 0)
173 ret.Add(r);
174 }
175
176 return ret;
177 }
178
179 public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y)
180 {
181 if (Instance != this)
182 return Instance.GetFallbackRegions(scopeID, x, y);
183
184 List<RegionData> ret = new List<RegionData>();
185
186 foreach (RegionData r in m_regionData.Values)
187 {
188 if ((Convert.ToInt32(r.Data["flags"]) & 2) != 0)
189 ret.Add(r);
190 }
191
192 return ret;
193 }
133 } 194 }
134} 195} \ No newline at end of file
diff --git a/OpenSim/Data/Null/NullUserAccountData.cs b/OpenSim/Data/Null/NullUserAccountData.cs
new file mode 100644
index 0000000..9eb94e6
--- /dev/null
+++ b/OpenSim/Data/Null/NullUserAccountData.cs
@@ -0,0 +1,160 @@
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 System;
29using System.Collections;
30using System.Collections.Generic;
31using OpenMetaverse;
32using OpenSim.Framework;
33using OpenSim.Data;
34
35namespace OpenSim.Data.Null
36{
37 public class NullUserAccountData : IUserAccountData
38 {
39 private static Dictionary<UUID, UserAccountData> m_DataByUUID = new Dictionary<UUID, UserAccountData>();
40 private static Dictionary<string, UserAccountData> m_DataByName = new Dictionary<string, UserAccountData>();
41 private static Dictionary<string, UserAccountData> m_DataByEmail = new Dictionary<string, UserAccountData>();
42
43 public NullUserAccountData(string connectionString, string realm)
44 {
45 }
46
47 /// <summary>
48 /// Tries to implement the Get [] semantics, but it cuts corners like crazy.
49 /// Specifically, it relies on the knowledge that the only Gets used are
50 /// keyed on PrincipalID, Email, and FirstName+LastName.
51 /// </summary>
52 /// <param name="fields"></param>
53 /// <param name="values"></param>
54 /// <returns></returns>
55 public UserAccountData[] Get(string[] fields, string[] values)
56 {
57 List<string> fieldsLst = new List<string>(fields);
58 if (fieldsLst.Contains("PrincipalID"))
59 {
60 int i = fieldsLst.IndexOf("PrincipalID");
61 UUID id = UUID.Zero;
62 if (UUID.TryParse(values[i], out id))
63 if (m_DataByUUID.ContainsKey(id))
64 return new UserAccountData[] { m_DataByUUID[id] };
65 }
66 if (fieldsLst.Contains("FirstName") && fieldsLst.Contains("LastName"))
67 {
68 int findex = fieldsLst.IndexOf("FirstName");
69 int lindex = fieldsLst.IndexOf("LastName");
70 if (m_DataByName.ContainsKey(values[findex] + " " + values[lindex]))
71 return new UserAccountData[] { m_DataByName[values[findex] + " " + values[lindex]] };
72 }
73 if (fieldsLst.Contains("Email"))
74 {
75 int i = fieldsLst.IndexOf("Email");
76 if (m_DataByEmail.ContainsKey(values[i]))
77 return new UserAccountData[] { m_DataByEmail[values[i]] };
78 }
79
80 // Fail
81 return new UserAccountData[0];
82 }
83
84 public bool Store(UserAccountData data)
85 {
86 if (data == null)
87 return false;
88
89 m_DataByUUID[data.PrincipalID] = data;
90 m_DataByName[data.FirstName + " " + data.LastName] = data;
91 if (data.Data.ContainsKey("Email") && data.Data["Email"] != string.Empty)
92 m_DataByEmail[data.Data["Email"]] = data;
93
94 return true;
95 }
96
97 public UserAccountData[] GetUsers(UUID scopeID, string query)
98 {
99 string[] words = query.Split(new char[] { ' ' });
100
101 for (int i = 0; i < words.Length; i++)
102 {
103 if (words[i].Length < 3)
104 {
105 if (i != words.Length - 1)
106 Array.Copy(words, i + 1, words, i, words.Length - i - 1);
107 Array.Resize(ref words, words.Length - 1);
108 }
109 }
110
111 if (words.Length == 0)
112 return new UserAccountData[0];
113
114 if (words.Length > 2)
115 return new UserAccountData[0];
116
117 List<string> lst = new List<string>(m_DataByName.Keys);
118 if (words.Length == 1)
119 {
120 lst = lst.FindAll(delegate(string s) { return s.StartsWith(words[0]); });
121 }
122 else
123 {
124 lst = lst.FindAll(delegate(string s) { return s.Contains(words[0]) || s.Contains(words[1]); });
125 }
126
127 if (lst == null || (lst != null && lst.Count == 0))
128 return new UserAccountData[0];
129
130 UserAccountData[] result = new UserAccountData[lst.Count];
131 int n = 0;
132 foreach (string key in lst)
133 result[n++] = m_DataByName[key];
134
135 return result;
136 }
137
138 public bool Delete(string field, string val)
139 {
140 // Only delete by PrincipalID
141 if (field.Equals("PrincipalID"))
142 {
143 UUID uuid = UUID.Zero;
144 if (UUID.TryParse(val, out uuid) && m_DataByUUID.ContainsKey(uuid))
145 {
146 UserAccountData account = m_DataByUUID[uuid];
147 m_DataByUUID.Remove(uuid);
148 if (m_DataByName.ContainsKey(account.FirstName + " " + account.LastName))
149 m_DataByName.Remove(account.FirstName + " " + account.LastName);
150 if (account.Data.ContainsKey("Email") && account.Data["Email"] != string.Empty && m_DataByEmail.ContainsKey(account.Data["Email"]))
151 m_DataByEmail.Remove(account.Data["Email"]);
152
153 return true;
154 }
155 }
156
157 return false;
158 }
159 }
160}