diff options
author | Justin Clark-Casey (justincc) | 2014-03-25 00:20:38 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2014-03-25 00:20:38 +0000 |
commit | 091f3a80008a0f4a756fcb9ff4e87a24c2948c3c (patch) | |
tree | a98354e9317e0ed6892dec344a69447c0e9c70b8 /OpenSim | |
parent | Don't fail to enable permissions modules correctly if there is any leading or... (diff) | |
parent | Fixed Debug command for Groups. (Use of wrong capitalization caused *two* "de... (diff) | |
download | opensim-SC_OLD-091f3a80008a0f4a756fcb9ff4e87a24c2948c3c.zip opensim-SC_OLD-091f3a80008a0f4a756fcb9ff4e87a24c2948c3c.tar.gz opensim-SC_OLD-091f3a80008a0f4a756fcb9ff4e87a24c2948c3c.tar.bz2 opensim-SC_OLD-091f3a80008a0f4a756fcb9ff4e87a24c2948c3c.tar.xz |
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim')
42 files changed, 498 insertions, 321 deletions
diff --git a/OpenSim/Addons/Groups/GroupsMessagingModule.cs b/OpenSim/Addons/Groups/GroupsMessagingModule.cs index 92528a2..bbb5e05 100644 --- a/OpenSim/Addons/Groups/GroupsMessagingModule.cs +++ b/OpenSim/Addons/Groups/GroupsMessagingModule.cs | |||
@@ -110,7 +110,15 @@ namespace OpenSim.Groups | |||
110 | m_messageOnlineAgentsOnly = groupsConfig.GetBoolean("MessageOnlineUsersOnly", false); | 110 | m_messageOnlineAgentsOnly = groupsConfig.GetBoolean("MessageOnlineUsersOnly", false); |
111 | 111 | ||
112 | if (m_messageOnlineAgentsOnly) | 112 | if (m_messageOnlineAgentsOnly) |
113 | { | ||
113 | m_usersOnlineCache = new ExpiringCache<UUID, PresenceInfo[]>(); | 114 | m_usersOnlineCache = new ExpiringCache<UUID, PresenceInfo[]>(); |
115 | } | ||
116 | else | ||
117 | { | ||
118 | m_log.Error("[Groups.Messaging]: GroupsMessagingModule V2 requires MessageOnlineUsersOnly = true"); | ||
119 | m_groupMessagingEnabled = false; | ||
120 | return; | ||
121 | } | ||
114 | 122 | ||
115 | m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", true); | 123 | m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", true); |
116 | 124 | ||
@@ -260,7 +268,7 @@ namespace OpenSim.Groups | |||
260 | // Sending to offline members is not an option. | 268 | // Sending to offline members is not an option. |
261 | string[] t1 = groupMembers.ConvertAll<string>(gmd => gmd.AgentID.ToString()).ToArray(); | 269 | string[] t1 = groupMembers.ConvertAll<string>(gmd => gmd.AgentID.ToString()).ToArray(); |
262 | 270 | ||
263 | // We cache in order not to overwhlem the presence service on large grids with many groups. This does | 271 | // We cache in order not to overwhelm the presence service on large grids with many groups. This does |
264 | // mean that members coming online will not see all group members until after m_usersOnlineCacheExpirySeconds has elapsed. | 272 | // mean that members coming online will not see all group members until after m_usersOnlineCacheExpirySeconds has elapsed. |
265 | // (assuming this is the same across all grid simulators). | 273 | // (assuming this is the same across all grid simulators). |
266 | if (!m_usersOnlineCache.TryGetValue(groupID, out onlineAgents)) | 274 | if (!m_usersOnlineCache.TryGetValue(groupID, out onlineAgents)) |
diff --git a/OpenSim/Addons/Groups/GroupsModule.cs b/OpenSim/Addons/Groups/GroupsModule.cs index 7f453db..f11606a 100644 --- a/OpenSim/Addons/Groups/GroupsModule.cs +++ b/OpenSim/Addons/Groups/GroupsModule.cs | |||
@@ -101,7 +101,7 @@ namespace OpenSim.Groups | |||
101 | { | 101 | { |
102 | scene.RegisterModuleInterface<IGroupsModule>(this); | 102 | scene.RegisterModuleInterface<IGroupsModule>(this); |
103 | scene.AddCommand( | 103 | scene.AddCommand( |
104 | "debug", | 104 | "Debug", |
105 | this, | 105 | this, |
106 | "debug groups verbose", | 106 | "debug groups verbose", |
107 | "debug groups verbose <true|false>", | 107 | "debug groups verbose <true|false>", |
diff --git a/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs index d2bcba5..dc36787 100644 --- a/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs +++ b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.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 | * |
@@ -158,7 +158,7 @@ namespace OpenSim.Groups | |||
158 | } | 158 | } |
159 | catch (Exception e) | 159 | catch (Exception e) |
160 | { | 160 | { |
161 | m_log.DebugFormat("[Groups.RobustHGConnector]: Exception {0}", e.StackTrace); | 161 | m_log.Error(string.Format("[Groups.RobustHGConnector]: Exception {0} ", e.Message), e); |
162 | } | 162 | } |
163 | 163 | ||
164 | return FailureResult(); | 164 | return FailureResult(); |
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs index 249d974..616afa9 100644 --- a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs +++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs | |||
@@ -140,7 +140,7 @@ namespace OpenSim.Groups | |||
140 | } | 140 | } |
141 | catch (Exception e) | 141 | catch (Exception e) |
142 | { | 142 | { |
143 | m_log.DebugFormat("[GROUPS HANDLER]: Exception {0}", e.StackTrace); | 143 | m_log.Error(string.Format("[GROUPS HANDLER]: Exception {0} ", e.Message), e); |
144 | } | 144 | } |
145 | 145 | ||
146 | return FailureResult(); | 146 | return FailureResult(); |
diff --git a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs index 13b0e7e..ed5c742 100644 --- a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs +++ b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs | |||
@@ -109,7 +109,7 @@ namespace OpenSim.OfflineIM | |||
109 | } | 109 | } |
110 | catch (Exception e) | 110 | catch (Exception e) |
111 | { | 111 | { |
112 | m_log.DebugFormat("[OFFLINE IM HANDLER]: Exception {0}", e.StackTrace); | 112 | m_log.Error(string.Format("[OFFLINE IM HANDLER]: Exception {0} ", e.Message), e); |
113 | } | 113 | } |
114 | 114 | ||
115 | return FailureResult(); | 115 | return FailureResult(); |
diff --git a/OpenSim/Data/MySQL/MySQLGroupsData.cs b/OpenSim/Data/MySQL/MySQLGroupsData.cs index 0318284..8e39229 100644 --- a/OpenSim/Data/MySQL/MySQLGroupsData.cs +++ b/OpenSim/Data/MySQL/MySQLGroupsData.cs | |||
@@ -86,11 +86,11 @@ namespace OpenSim.Data.MySQL | |||
86 | public GroupData[] RetrieveGroups(string pattern) | 86 | public GroupData[] RetrieveGroups(string pattern) |
87 | { | 87 | { |
88 | if (string.IsNullOrEmpty(pattern)) | 88 | if (string.IsNullOrEmpty(pattern)) |
89 | pattern = "1 ORDER BY Name LIMIT 100"; | 89 | pattern = "1"; |
90 | else | 90 | else |
91 | pattern = string.Format("Name LIKE '%{0}%' ORDER BY Name LIMIT 100", pattern); | 91 | pattern = string.Format("Name LIKE '%{0}%'", pattern); |
92 | 92 | ||
93 | return m_Groups.Get(pattern); | 93 | return m_Groups.Get(string.Format("ShowInList=1 AND ({0}) ORDER BY Name LIMIT 100", pattern)); |
94 | } | 94 | } |
95 | 95 | ||
96 | public bool DeleteGroup(UUID groupID) | 96 | public bool DeleteGroup(UUID groupID) |
diff --git a/OpenSim/Data/MySQL/MySQLUserProfilesData.cs b/OpenSim/Data/MySQL/MySQLUserProfilesData.cs index 6ed3b06..cc4c5b0 100644 --- a/OpenSim/Data/MySQL/MySQLUserProfilesData.cs +++ b/OpenSim/Data/MySQL/MySQLUserProfilesData.cs | |||
@@ -974,8 +974,8 @@ namespace OpenSim.Data.MySQL | |||
974 | dbcon.Open(); | 974 | dbcon.Open(); |
975 | using (MySqlCommand cmd = new MySqlCommand(query, dbcon)) | 975 | using (MySqlCommand cmd = new MySqlCommand(query, dbcon)) |
976 | { | 976 | { |
977 | cmd.Parameters.AddWithValue("?ImViaEmail", pref.IMViaEmail); | 977 | cmd.Parameters.AddWithValue("?ImViaEmail", pref.IMViaEmail.ToString().ToLower()); |
978 | cmd.Parameters.AddWithValue("?Visible", pref.Visible); | 978 | cmd.Parameters.AddWithValue("?Visible", pref.Visible.ToString().ToLower()); |
979 | cmd.Parameters.AddWithValue("?uuid", pref.UserId.ToString()); | 979 | cmd.Parameters.AddWithValue("?uuid", pref.UserId.ToString()); |
980 | 980 | ||
981 | cmd.ExecuteNonQuery(); | 981 | cmd.ExecuteNonQuery(); |
diff --git a/OpenSim/Framework/InventoryItemBase.cs b/OpenSim/Framework/InventoryItemBase.cs index 558dfd0..5761200 100644 --- a/OpenSim/Framework/InventoryItemBase.cs +++ b/OpenSim/Framework/InventoryItemBase.cs | |||
@@ -82,12 +82,15 @@ namespace OpenSim.Framework | |||
82 | set | 82 | set |
83 | { | 83 | { |
84 | m_creatorId = value; | 84 | m_creatorId = value; |
85 | |||
86 | if ((m_creatorId == null) || !UUID.TryParse(m_creatorId, out m_creatorIdAsUuid)) | ||
87 | m_creatorIdAsUuid = UUID.Zero; | ||
85 | } | 88 | } |
86 | } | 89 | } |
87 | protected string m_creatorId; | 90 | protected string m_creatorId; |
88 | 91 | ||
89 | /// <value> | 92 | /// <value> |
90 | /// The CreatorId expressed as a UUID.tely | 93 | /// The CreatorId expressed as a UUID. |
91 | /// </value> | 94 | /// </value> |
92 | public UUID CreatorIdAsUuid | 95 | public UUID CreatorIdAsUuid |
93 | { | 96 | { |
diff --git a/OpenSim/Framework/PluginLoader.cs b/OpenSim/Framework/PluginLoader.cs index 819cb7b..a2bf9f3 100644 --- a/OpenSim/Framework/PluginLoader.cs +++ b/OpenSim/Framework/PluginLoader.cs | |||
@@ -215,7 +215,7 @@ namespace OpenSim.Framework | |||
215 | AddinManager.AddinLoadError += on_addinloaderror_; | 215 | AddinManager.AddinLoadError += on_addinloaderror_; |
216 | AddinManager.AddinLoaded += on_addinloaded_; | 216 | AddinManager.AddinLoaded += on_addinloaded_; |
217 | 217 | ||
218 | clear_registry_(); | 218 | clear_registry_(dir); |
219 | 219 | ||
220 | suppress_console_output_(true); | 220 | suppress_console_output_(true); |
221 | AddinManager.Initialize(dir); | 221 | AddinManager.Initialize(dir); |
@@ -239,18 +239,19 @@ namespace OpenSim.Framework | |||
239 | + args.Exception.StackTrace); | 239 | + args.Exception.StackTrace); |
240 | } | 240 | } |
241 | 241 | ||
242 | private void clear_registry_() | 242 | private void clear_registry_(string dir) |
243 | { | 243 | { |
244 | // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) | 244 | // The Mono addin manager (in Mono.Addins.dll version 0.2.0.0) |
245 | // occasionally seems to corrupt its addin cache | 245 | // occasionally seems to corrupt its addin cache |
246 | // Hence, as a temporary solution we'll remove it before each startup | 246 | // Hence, as a temporary solution we'll remove it before each startup |
247 | |||
247 | try | 248 | try |
248 | { | 249 | { |
249 | if (Directory.Exists("addin-db-000")) | 250 | if (Directory.Exists(dir + "/addin-db-000")) |
250 | Directory.Delete("addin-db-000", true); | 251 | Directory.Delete(dir + "/addin-db-000", true); |
251 | 252 | ||
252 | if (Directory.Exists("addin-db-001")) | 253 | if (Directory.Exists(dir + "/addin-db-001")) |
253 | Directory.Delete("addin-db-001", true); | 254 | Directory.Delete(dir + "/addin-db-001", true); |
254 | } | 255 | } |
255 | catch (IOException) | 256 | catch (IOException) |
256 | { | 257 | { |
diff --git a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs index c56f213..db46ea8 100644 --- a/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.cs +++ b/OpenSim/Framework/Serialization/External/ExternalRepresentationUtils.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 | * |
@@ -161,7 +161,7 @@ namespace OpenSim.Framework.Serialization.External | |||
161 | if (!hasCreatorData && creator != null) | 161 | if (!hasCreatorData && creator != null) |
162 | { | 162 | { |
163 | XmlElement creatorData = doc.CreateElement("CreatorData"); | 163 | XmlElement creatorData = doc.CreateElement("CreatorData"); |
164 | creatorData.InnerText = homeURL + ";" + creator.FirstName + " " + creator.LastName; | 164 | creatorData.InnerText = CalcCreatorData(homeURL, creator.FirstName + " " + creator.LastName); |
165 | sop.AppendChild(creatorData); | 165 | sop.AppendChild(creatorData); |
166 | } | 166 | } |
167 | } | 167 | } |
@@ -172,5 +172,15 @@ namespace OpenSim.Framework.Serialization.External | |||
172 | return wr.ToString(); | 172 | return wr.ToString(); |
173 | } | 173 | } |
174 | } | 174 | } |
175 | |||
176 | public static string CalcCreatorData(string homeURL, string name) | ||
177 | { | ||
178 | return homeURL + ";" + name; | ||
179 | } | ||
180 | |||
181 | internal static string CalcCreatorData(string homeURL, UUID uuid, string name) | ||
182 | { | ||
183 | return homeURL + "/" + uuid + ";" + name; | ||
184 | } | ||
175 | } | 185 | } |
176 | } \ No newline at end of file | 186 | } |
diff --git a/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs b/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs index f2a6b8b..135cefb 100644 --- a/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs +++ b/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs | |||
@@ -286,7 +286,8 @@ namespace OpenSim.Framework.Serialization.External | |||
286 | UserAccount account = userAccountService.GetUserAccount(UUID.Zero, inventoryItem.CreatorIdAsUuid); | 286 | UserAccount account = userAccountService.GetUserAccount(UUID.Zero, inventoryItem.CreatorIdAsUuid); |
287 | if (account != null) | 287 | if (account != null) |
288 | { | 288 | { |
289 | writer.WriteElementString("CreatorData", (string)options["home"] + "/" + inventoryItem.CreatorIdAsUuid + ";" + account.FirstName + " " + account.LastName); | 289 | string creatorData = ExternalRepresentationUtils.CalcCreatorData((string)options["home"], inventoryItem.CreatorIdAsUuid, account.FirstName + " " + account.LastName); |
290 | writer.WriteElementString("CreatorData", creatorData); | ||
290 | } | 291 | } |
291 | writer.WriteElementString("CreatorID", inventoryItem.CreatorId); | 292 | writer.WriteElementString("CreatorID", inventoryItem.CreatorId); |
292 | } | 293 | } |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index efaed62..c2c9698 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -2250,10 +2250,15 @@ namespace OpenSim.Framework | |||
2250 | { | 2250 | { |
2251 | string[] parts = firstName.Split(new char[] { '.' }); | 2251 | string[] parts = firstName.Split(new char[] { '.' }); |
2252 | if (parts.Length == 2) | 2252 | if (parts.Length == 2) |
2253 | return id.ToString() + ";" + agentsURI + ";" + parts[0] + " " + parts[1]; | 2253 | return CalcUniversalIdentifier(id, agentsURI, parts[0] + " " + parts[1]); |
2254 | } | 2254 | } |
2255 | return id.ToString() + ";" + agentsURI + ";" + firstName + " " + lastName; | 2255 | |
2256 | return CalcUniversalIdentifier(id, agentsURI, firstName + " " + lastName); | ||
2257 | } | ||
2256 | 2258 | ||
2259 | private static string CalcUniversalIdentifier(UUID id, string agentsURI, string name) | ||
2260 | { | ||
2261 | return id.ToString() + ";" + agentsURI + ";" + name; | ||
2257 | } | 2262 | } |
2258 | 2263 | ||
2259 | /// <summary> | 2264 | /// <summary> |
@@ -2288,6 +2293,38 @@ namespace OpenSim.Framework | |||
2288 | { | 2293 | { |
2289 | return str.Replace("_", "\\_").Replace("%", "\\%"); | 2294 | return str.Replace("_", "\\_").Replace("%", "\\%"); |
2290 | } | 2295 | } |
2296 | |||
2297 | /// <summary> | ||
2298 | /// Returns the name of the user's viewer. | ||
2299 | /// </summary> | ||
2300 | /// <remarks> | ||
2301 | /// This method handles two ways that viewers specify their name: | ||
2302 | /// 1. Viewer = "Firestorm-Release 4.4.2.34167", Channel = "(don't care)" -> "Firestorm-Release 4.4.2.34167" | ||
2303 | /// 2. Viewer = "4.5.1.38838", Channel = "Firestorm-Beta" -> "Firestorm-Beta 4.5.1.38838" | ||
2304 | /// </remarks> | ||
2305 | public static string GetViewerName(AgentCircuitData agent) | ||
2306 | { | ||
2307 | string name = agent.Viewer; | ||
2308 | if (name == null) | ||
2309 | name = ""; | ||
2310 | else | ||
2311 | name = name.Trim(); | ||
2312 | |||
2313 | // Check if 'Viewer' is just a version number. If it's *not*, then we | ||
2314 | // assume that it contains the real viewer name, and we return it. | ||
2315 | foreach (char c in name) | ||
2316 | { | ||
2317 | if (Char.IsLetter(c)) | ||
2318 | return name; | ||
2319 | } | ||
2320 | |||
2321 | // The 'Viewer' string contains just a version number. If there's anything in | ||
2322 | // 'Channel' then assume that it's the viewer name. | ||
2323 | if ((agent.Channel != null) && (agent.Channel.Length > 0)) | ||
2324 | name = agent.Channel.Trim() + " " + name; | ||
2325 | |||
2326 | return name; | ||
2327 | } | ||
2291 | } | 2328 | } |
2292 | 2329 | ||
2293 | public class DoubleQueue<T> where T:class | 2330 | public class DoubleQueue<T> where T:class |
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 6d3331b..5c3039d 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -982,7 +982,7 @@ namespace OpenSim | |||
982 | aCircuit.child ? "child" : "root", | 982 | aCircuit.child ? "child" : "root", |
983 | aCircuit.circuitcode.ToString(), | 983 | aCircuit.circuitcode.ToString(), |
984 | aCircuit.IPAddress != null ? aCircuit.IPAddress.ToString() : "not set", | 984 | aCircuit.IPAddress != null ? aCircuit.IPAddress.ToString() : "not set", |
985 | aCircuit.Viewer); | 985 | Util.GetViewerName(aCircuit)); |
986 | }); | 986 | }); |
987 | 987 | ||
988 | MainConsole.Instance.Output(cdt.ToString()); | 988 | MainConsole.Instance.Output(cdt.ToString()); |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 0dc9306..9d36986 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -158,10 +158,27 @@ namespace OpenSim | |||
158 | 158 | ||
159 | protected virtual void LoadPlugins() | 159 | protected virtual void LoadPlugins() |
160 | { | 160 | { |
161 | using (PluginLoader<IApplicationPlugin> loader = new PluginLoader<IApplicationPlugin>(new ApplicationPluginInitialiser(this))) | 161 | IConfig startupConfig = Config.Configs["Startup"]; |
162 | string registryLocation = (startupConfig != null) ? startupConfig.GetString("RegistryLocation", String.Empty) : String.Empty; | ||
163 | |||
164 | // The location can also be specified in the environment. If there | ||
165 | // is no location in the configuration, we must call the constructor | ||
166 | // without a location parameter to allow that to happen. | ||
167 | if (registryLocation == String.Empty) | ||
162 | { | 168 | { |
163 | loader.Load("/OpenSim/Startup"); | 169 | using (PluginLoader<IApplicationPlugin> loader = new PluginLoader<IApplicationPlugin>(new ApplicationPluginInitialiser(this))) |
164 | m_plugins = loader.Plugins; | 170 | { |
171 | loader.Load("/OpenSim/Startup"); | ||
172 | m_plugins = loader.Plugins; | ||
173 | } | ||
174 | } | ||
175 | else | ||
176 | { | ||
177 | using (PluginLoader<IApplicationPlugin> loader = new PluginLoader<IApplicationPlugin>(new ApplicationPluginInitialiser(this), registryLocation)) | ||
178 | { | ||
179 | loader.Load("/OpenSim/Startup"); | ||
180 | m_plugins = loader.Plugins; | ||
181 | } | ||
165 | } | 182 | } |
166 | } | 183 | } |
167 | 184 | ||
@@ -1049,4 +1066,4 @@ namespace OpenSim | |||
1049 | { | 1066 | { |
1050 | public IConfigSource Source; | 1067 | public IConfigSource Source; |
1051 | } | 1068 | } |
1052 | } \ No newline at end of file | 1069 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 05dd764..86161c9 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -10387,7 +10387,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
10387 | handlerDirFindQuery(this, | 10387 | handlerDirFindQuery(this, |
10388 | dirFindQueryPacket.QueryData.QueryID, | 10388 | dirFindQueryPacket.QueryData.QueryID, |
10389 | Utils.BytesToString( | 10389 | Utils.BytesToString( |
10390 | dirFindQueryPacket.QueryData.QueryText), | 10390 | dirFindQueryPacket.QueryData.QueryText).Trim(), |
10391 | dirFindQueryPacket.QueryData.QueryFlags, | 10391 | dirFindQueryPacket.QueryData.QueryFlags, |
10392 | dirFindQueryPacket.QueryData.QueryStart); | 10392 | dirFindQueryPacket.QueryData.QueryStart); |
10393 | } | 10393 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 1ca142e..c3846d9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -245,8 +245,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
245 | string state = sog.GetStateSnapshot(); | 245 | string state = sog.GetStateSnapshot(); |
246 | ad.AttachmentObjectStates.Add(state); | 246 | ad.AttachmentObjectStates.Add(state); |
247 | sp.InTransitScriptStates.Add(state); | 247 | sp.InTransitScriptStates.Add(state); |
248 | // Let's remove the scripts of the original object here | 248 | |
249 | sog.RemoveScriptInstances(true); | 249 | // Scripts of the originals will be removed when the Agent is successfully removed. |
250 | // sog.RemoveScriptInstances(true); | ||
250 | } | 251 | } |
251 | } | 252 | } |
252 | } | 253 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index f7057fe..9963521 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -483,52 +483,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
483 | { | 483 | { |
484 | if (m_creatorIdForAssetId.ContainsKey(assetId)) | 484 | if (m_creatorIdForAssetId.ContainsKey(assetId)) |
485 | { | 485 | { |
486 | string xmlData = Utils.BytesToString(data); | 486 | data = SceneObjectSerializer.ModifySerializedObject(assetId, data, |
487 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); | 487 | sog => { |
488 | bool modified = false; | ||
489 | |||
490 | foreach (SceneObjectPart sop in sog.Parts) | ||
491 | { | ||
492 | if (string.IsNullOrEmpty(sop.CreatorData)) | ||
493 | { | ||
494 | sop.CreatorID = m_creatorIdForAssetId[assetId]; | ||
495 | modified = true; | ||
496 | } | ||
497 | } | ||
498 | |||
499 | return modified; | ||
500 | }); | ||
488 | 501 | ||
489 | CoalescedSceneObjects coa = null; | 502 | if (data == null) |
490 | if (CoalescedSceneObjectsSerializer.TryFromXml(xmlData, out coa)) | 503 | return false; |
491 | { | ||
492 | // m_log.DebugFormat( | ||
493 | // "[INVENTORY ARCHIVER]: Loaded coalescence {0} has {1} objects", assetId, coa.Count); | ||
494 | |||
495 | if (coa.Objects.Count == 0) | ||
496 | { | ||
497 | m_log.WarnFormat( | ||
498 | "[INVENTORY ARCHIVE READ REQUEST]: Aborting load of coalesced object from asset {0} as it has zero loaded components", | ||
499 | assetId); | ||
500 | return false; | ||
501 | } | ||
502 | |||
503 | sceneObjects.AddRange(coa.Objects); | ||
504 | } | ||
505 | else | ||
506 | { | ||
507 | SceneObjectGroup deserializedObject = SceneObjectSerializer.FromOriginalXmlFormat(xmlData); | ||
508 | |||
509 | if (deserializedObject != null) | ||
510 | { | ||
511 | sceneObjects.Add(deserializedObject); | ||
512 | } | ||
513 | else | ||
514 | { | ||
515 | m_log.WarnFormat( | ||
516 | "[INVENTORY ARCHIVE READ REQUEST]: Aborting load of object from asset {0} as deserialization failed", | ||
517 | assetId); | ||
518 | |||
519 | return false; | ||
520 | } | ||
521 | } | ||
522 | |||
523 | foreach (SceneObjectGroup sog in sceneObjects) | ||
524 | foreach (SceneObjectPart sop in sog.Parts) | ||
525 | if (string.IsNullOrEmpty(sop.CreatorData)) | ||
526 | sop.CreatorID = m_creatorIdForAssetId[assetId]; | ||
527 | |||
528 | if (coa != null) | ||
529 | data = Utils.StringToBytes(CoalescedSceneObjectsSerializer.ToXml(coa)); | ||
530 | else | ||
531 | data = Utils.StringToBytes(SceneObjectSerializer.ToOriginalXmlFormat(sceneObjects[0])); | ||
532 | } | 504 | } |
533 | } | 505 | } |
534 | 506 | ||
@@ -550,7 +522,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
550 | return false; | 522 | return false; |
551 | } | 523 | } |
552 | } | 524 | } |
553 | 525 | ||
554 | /// <summary> | 526 | /// <summary> |
555 | /// Load control file | 527 | /// Load control file |
556 | /// </summary> | 528 | /// </summary> |
@@ -656,4 +628,4 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
656 | m_assetsLoaded = true; | 628 | m_assetsLoaded = true; |
657 | } | 629 | } |
658 | } | 630 | } |
659 | } \ No newline at end of file | 631 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs b/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs index 8838612..3849996 100644 --- a/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs +++ b/OpenSim/Region/CoreModules/Framework/Search/BasicSearchModule.cs | |||
@@ -150,6 +150,8 @@ namespace OpenSim.Region.CoreModules.Framework.Search | |||
150 | 150 | ||
151 | void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart) | 151 | void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart) |
152 | { | 152 | { |
153 | queryText = queryText.Trim(); | ||
154 | |||
153 | if (((DirFindFlags)queryFlags & DirFindFlags.People) == DirFindFlags.People) | 155 | if (((DirFindFlags)queryFlags & DirFindFlags.People) == DirFindFlags.People) |
154 | { | 156 | { |
155 | if (string.IsNullOrEmpty(queryText)) | 157 | if (string.IsNullOrEmpty(queryText)) |
@@ -194,4 +196,4 @@ namespace OpenSim.Region.CoreModules.Framework.Search | |||
194 | 196 | ||
195 | } | 197 | } |
196 | 198 | ||
197 | } \ No newline at end of file | 199 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 9f0a719..3455e2c 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -278,7 +278,8 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
278 | { | 278 | { |
279 | foreach (UserData data in m_UserCache.Values) | 279 | foreach (UserData data in m_UserCache.Values) |
280 | { | 280 | { |
281 | if (users.Find(delegate(UserData d) { return d.Id == data.Id; }) == null && | 281 | if (data.Id != UUID.Zero && |
282 | users.Find(delegate(UserData d) { return d.Id == data.Id; }) == null && | ||
282 | (data.FirstName.ToLower().StartsWith(query.ToLower()) || data.LastName.ToLower().StartsWith(query.ToLower()))) | 283 | (data.FirstName.ToLower().StartsWith(query.ToLower()) || data.LastName.ToLower().StartsWith(query.ToLower()))) |
283 | users.Add(data); | 284 | users.Add(data); |
284 | } | 285 | } |
@@ -725,4 +726,4 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
725 | 726 | ||
726 | } | 727 | } |
727 | 728 | ||
728 | } \ No newline at end of file | 729 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 2e638d4..7920748 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | |||
@@ -189,8 +189,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
189 | m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"] | 189 | m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"] |
190 | : new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f); | 190 | : new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f); |
191 | 191 | ||
192 | // Zero can never be a valid user id | 192 | // Zero can never be a valid user or group id |
193 | m_validUserUuids[UUID.Zero] = false; | 193 | m_validUserUuids[UUID.Zero] = false; |
194 | m_validGroupUuids[UUID.Zero] = false; | ||
194 | 195 | ||
195 | m_groupsModule = m_rootScene.RequestModuleInterface<IGroupsModule>(); | 196 | m_groupsModule = m_rootScene.RequestModuleInterface<IGroupsModule>(); |
196 | m_assetService = m_rootScene.AssetService; | 197 | m_assetService = m_rootScene.AssetService; |
@@ -523,58 +524,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
523 | oldTelehubUUID = UUID.Zero; | 524 | oldTelehubUUID = UUID.Zero; |
524 | } | 525 | } |
525 | 526 | ||
526 | // Try to retain the original creator/owner/lastowner if their uuid is present on this grid | 527 | ModifySceneObject(scene, sceneObject); |
527 | // or creator data is present. Otherwise, use the estate owner instead. | ||
528 | foreach (SceneObjectPart part in sceneObject.Parts) | ||
529 | { | ||
530 | if (string.IsNullOrEmpty(part.CreatorData)) | ||
531 | { | ||
532 | if (!ResolveUserUuid(scene, part.CreatorID)) | ||
533 | part.CreatorID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
534 | } | ||
535 | if (UserManager != null) | ||
536 | UserManager.AddUser(part.CreatorID, part.CreatorData); | ||
537 | |||
538 | if (!ResolveUserUuid(scene, part.OwnerID)) | ||
539 | part.OwnerID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
540 | |||
541 | if (!ResolveUserUuid(scene, part.LastOwnerID)) | ||
542 | part.LastOwnerID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
543 | |||
544 | if (!ResolveGroupUuid(part.GroupID)) | ||
545 | part.GroupID = UUID.Zero; | ||
546 | |||
547 | // And zap any troublesome sit target information | ||
548 | // part.SitTargetOrientation = new Quaternion(0, 0, 0, 1); | ||
549 | // part.SitTargetPosition = new Vector3(0, 0, 0); | ||
550 | |||
551 | // Fix ownership/creator of inventory items | ||
552 | // Not doing so results in inventory items | ||
553 | // being no copy/no mod for everyone | ||
554 | lock (part.TaskInventory) | ||
555 | { | ||
556 | TaskInventoryDictionary inv = part.TaskInventory; | ||
557 | foreach (KeyValuePair<UUID, TaskInventoryItem> kvp in inv) | ||
558 | { | ||
559 | if (!ResolveUserUuid(scene, kvp.Value.OwnerID)) | ||
560 | { | ||
561 | kvp.Value.OwnerID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
562 | } | ||
563 | |||
564 | if (string.IsNullOrEmpty(kvp.Value.CreatorData)) | ||
565 | { | ||
566 | if (!ResolveUserUuid(scene, kvp.Value.CreatorID)) | ||
567 | kvp.Value.CreatorID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
568 | } | ||
569 | |||
570 | if (UserManager != null) | ||
571 | UserManager.AddUser(kvp.Value.CreatorID, kvp.Value.CreatorData); | ||
572 | |||
573 | if (!ResolveGroupUuid(kvp.Value.GroupID)) | ||
574 | kvp.Value.GroupID = UUID.Zero; | ||
575 | } | ||
576 | } | ||
577 | } | ||
578 | 528 | ||
579 | if (scene.AddRestoredSceneObject(sceneObject, true, false)) | 529 | if (scene.AddRestoredSceneObject(sceneObject, true, false)) |
580 | { | 530 | { |
@@ -598,6 +548,67 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
598 | scene.RegionInfo.RegionSettings.ClearSpawnPoints(); | 548 | scene.RegionInfo.RegionSettings.ClearSpawnPoints(); |
599 | } | 549 | } |
600 | } | 550 | } |
551 | |||
552 | /// <summary> | ||
553 | /// Optionally modify a loaded SceneObjectGroup. Currently this just ensures that the | ||
554 | /// User IDs and Group IDs are valid, but other manipulations could be done as well. | ||
555 | /// </summary> | ||
556 | private void ModifySceneObject(Scene scene, SceneObjectGroup sceneObject) | ||
557 | { | ||
558 | // Try to retain the original creator/owner/lastowner if their uuid is present on this grid | ||
559 | // or creator data is present. Otherwise, use the estate owner instead. | ||
560 | foreach (SceneObjectPart part in sceneObject.Parts) | ||
561 | { | ||
562 | if (string.IsNullOrEmpty(part.CreatorData)) | ||
563 | { | ||
564 | if (!ResolveUserUuid(scene, part.CreatorID)) | ||
565 | part.CreatorID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
566 | } | ||
567 | if (UserManager != null) | ||
568 | UserManager.AddUser(part.CreatorID, part.CreatorData); | ||
569 | |||
570 | if (!(ResolveUserUuid(scene, part.OwnerID) || ResolveGroupUuid(part.OwnerID))) | ||
571 | part.OwnerID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
572 | |||
573 | if (!(ResolveUserUuid(scene, part.LastOwnerID) || ResolveGroupUuid(part.LastOwnerID))) | ||
574 | part.LastOwnerID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
575 | |||
576 | if (!ResolveGroupUuid(part.GroupID)) | ||
577 | part.GroupID = UUID.Zero; | ||
578 | |||
579 | // And zap any troublesome sit target information | ||
580 | // part.SitTargetOrientation = new Quaternion(0, 0, 0, 1); | ||
581 | // part.SitTargetPosition = new Vector3(0, 0, 0); | ||
582 | |||
583 | // Fix ownership/creator of inventory items | ||
584 | // Not doing so results in inventory items | ||
585 | // being no copy/no mod for everyone | ||
586 | lock (part.TaskInventory) | ||
587 | { | ||
588 | TaskInventoryDictionary inv = part.TaskInventory; | ||
589 | foreach (KeyValuePair<UUID, TaskInventoryItem> kvp in inv) | ||
590 | { | ||
591 | if (!(ResolveUserUuid(scene, kvp.Value.OwnerID) || ResolveGroupUuid(kvp.Value.OwnerID))) | ||
592 | { | ||
593 | kvp.Value.OwnerID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
594 | } | ||
595 | |||
596 | if (string.IsNullOrEmpty(kvp.Value.CreatorData)) | ||
597 | { | ||
598 | if (!ResolveUserUuid(scene, kvp.Value.CreatorID)) | ||
599 | kvp.Value.CreatorID = scene.RegionInfo.EstateSettings.EstateOwner; | ||
600 | } | ||
601 | |||
602 | if (UserManager != null) | ||
603 | UserManager.AddUser(kvp.Value.CreatorID, kvp.Value.CreatorData); | ||
604 | |||
605 | if (!ResolveGroupUuid(kvp.Value.GroupID)) | ||
606 | kvp.Value.GroupID = UUID.Zero; | ||
607 | } | ||
608 | } | ||
609 | } | ||
610 | } | ||
611 | |||
601 | 612 | ||
602 | /// <summary> | 613 | /// <summary> |
603 | /// Load serialized parcels. | 614 | /// Load serialized parcels. |
@@ -695,9 +706,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
695 | /// <returns></returns> | 706 | /// <returns></returns> |
696 | private bool ResolveGroupUuid(UUID uuid) | 707 | private bool ResolveGroupUuid(UUID uuid) |
697 | { | 708 | { |
698 | if (uuid == UUID.Zero) | ||
699 | return true; // this means the object has no group | ||
700 | |||
701 | lock (m_validGroupUuids) | 709 | lock (m_validGroupUuids) |
702 | { | 710 | { |
703 | if (!m_validGroupUuids.ContainsKey(uuid)) | 711 | if (!m_validGroupUuids.ContainsKey(uuid)) |
@@ -754,7 +762,21 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
754 | sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension]; | 762 | sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension]; |
755 | 763 | ||
756 | if (assetType == (sbyte)AssetType.Unknown) | 764 | if (assetType == (sbyte)AssetType.Unknown) |
765 | { | ||
757 | m_log.WarnFormat("[ARCHIVER]: Importing {0} byte asset {1} with unknown type", data.Length, uuid); | 766 | m_log.WarnFormat("[ARCHIVER]: Importing {0} byte asset {1} with unknown type", data.Length, uuid); |
767 | } | ||
768 | else if (assetType == (sbyte)AssetType.Object) | ||
769 | { | ||
770 | data = SceneObjectSerializer.ModifySerializedObject(UUID.Parse(uuid), data, | ||
771 | sog => | ||
772 | { | ||
773 | ModifySceneObject(m_rootScene, sog); | ||
774 | return true; | ||
775 | }); | ||
776 | |||
777 | if (data == null) | ||
778 | return false; | ||
779 | } | ||
758 | 780 | ||
759 | //m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType); | 781 | //m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType); |
760 | 782 | ||
@@ -977,4 +999,4 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
977 | return dearchivedScenes; | 999 | return dearchivedScenes; |
978 | } | 1000 | } |
979 | } | 1001 | } |
980 | } \ No newline at end of file | 1002 | } |
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 3bd7b4a..cb9ad4a 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -1342,10 +1342,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1342 | { | 1342 | { |
1343 | m_regionChangeTimer.Stop(); | 1343 | m_regionChangeTimer.Stop(); |
1344 | m_regionChangeTimer.Start(); | 1344 | m_regionChangeTimer.Start(); |
1345 | } | ||
1346 | 1345 | ||
1347 | protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e) | ||
1348 | { | ||
1349 | ChangeDelegate change = OnRegionInfoChange; | 1346 | ChangeDelegate change = OnRegionInfoChange; |
1350 | 1347 | ||
1351 | if (change != null) | 1348 | if (change != null) |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 7f17aff..0ecf13b 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -1340,6 +1340,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1340 | 1340 | ||
1341 | m_scene.ForEachClient(SendParcelOverlay); | 1341 | m_scene.ForEachClient(SendParcelOverlay); |
1342 | land.SendLandUpdateToClient(true, remote_client); | 1342 | land.SendLandUpdateToClient(true, remote_client); |
1343 | UpdateLandObject(land.LandData.LocalID, land.LandData); | ||
1343 | } | 1344 | } |
1344 | } | 1345 | } |
1345 | } | 1346 | } |
@@ -1360,8 +1361,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1360 | land.LandData.GroupID = UUID.Zero; | 1361 | land.LandData.GroupID = UUID.Zero; |
1361 | land.LandData.IsGroupOwned = false; | 1362 | land.LandData.IsGroupOwned = false; |
1362 | land.LandData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects | ParcelFlags.ShowDirectory); | 1363 | land.LandData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects | ParcelFlags.ShowDirectory); |
1364 | |||
1363 | m_scene.ForEachClient(SendParcelOverlay); | 1365 | m_scene.ForEachClient(SendParcelOverlay); |
1364 | land.SendLandUpdateToClient(true, remote_client); | 1366 | land.SendLandUpdateToClient(true, remote_client); |
1367 | UpdateLandObject(land.LandData.LocalID, land.LandData); | ||
1365 | } | 1368 | } |
1366 | } | 1369 | } |
1367 | } | 1370 | } |
@@ -1388,6 +1391,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1388 | 1391 | ||
1389 | m_scene.ForEachClient(SendParcelOverlay); | 1392 | m_scene.ForEachClient(SendParcelOverlay); |
1390 | land.SendLandUpdateToClient(true, remote_client); | 1393 | land.SendLandUpdateToClient(true, remote_client); |
1394 | UpdateLandObject(land.LandData.LocalID, land.LandData); | ||
1391 | } | 1395 | } |
1392 | } | 1396 | } |
1393 | } | 1397 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index d16b73b..51f6c5e 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -1757,6 +1757,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1757 | { | 1757 | { |
1758 | if (group != null) | 1758 | if (group != null) |
1759 | { | 1759 | { |
1760 | group.HasGroupChanged = true; | ||
1760 | group.ProcessBackup(SimulationDataService, true); | 1761 | group.ProcessBackup(SimulationDataService, true); |
1761 | } | 1762 | } |
1762 | } | 1763 | } |
@@ -2345,13 +2346,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2345 | { | 2346 | { |
2346 | if (!softDelete) | 2347 | if (!softDelete) |
2347 | { | 2348 | { |
2348 | // Force a database update so that the scene object group ID is accurate. It's possible that the | 2349 | // If the group contains prims whose SceneGroupID is incorrect then force a |
2349 | // group has recently been delinked from another group but that this change has not been persisted | 2350 | // database update, because RemoveObject() works by searching on the SceneGroupID. |
2350 | // to the DB. | ||
2351 | // This is an expensive thing to do so only do it if absolutely necessary. | 2351 | // This is an expensive thing to do so only do it if absolutely necessary. |
2352 | if (so.HasGroupChangedDueToDelink) | 2352 | if (so.GroupContainsForeignPrims) |
2353 | ForceSceneObjectBackup(so); | 2353 | ForceSceneObjectBackup(so); |
2354 | 2354 | ||
2355 | so.DetachFromBackup(); | 2355 | so.DetachFromBackup(); |
2356 | SimulationDataService.RemoveObject(so.UUID, RegionInfo.RegionID); | 2356 | SimulationDataService.RemoveObject(so.UUID, RegionInfo.RegionID); |
2357 | } | 2357 | } |
@@ -3413,6 +3413,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3413 | // TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport | 3413 | // TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport |
3414 | 3414 | ||
3415 | // Don't disable this log message - it's too helpful | 3415 | // Don't disable this log message - it's too helpful |
3416 | string curViewer = Util.GetViewerName(acd); | ||
3416 | m_log.DebugFormat( | 3417 | m_log.DebugFormat( |
3417 | "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags ({8}), position {9})", | 3418 | "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags ({8}), position {9})", |
3418 | RegionInfo.RegionName, | 3419 | RegionInfo.RegionName, |
@@ -3422,7 +3423,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3422 | acd.AgentID, | 3423 | acd.AgentID, |
3423 | acd.circuitcode, | 3424 | acd.circuitcode, |
3424 | acd.IPAddress, | 3425 | acd.IPAddress, |
3425 | acd.Viewer, | 3426 | curViewer, |
3426 | ((TPFlags)teleportFlags).ToString(), | 3427 | ((TPFlags)teleportFlags).ToString(), |
3427 | acd.startpos | 3428 | acd.startpos |
3428 | ); | 3429 | ); |
@@ -3442,7 +3443,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3442 | { | 3443 | { |
3443 | foreach (string viewer in m_AllowedViewers) | 3444 | foreach (string viewer in m_AllowedViewers) |
3444 | { | 3445 | { |
3445 | if (viewer == acd.Viewer.Substring(0, viewer.Length).Trim().ToLower()) | 3446 | if (viewer == curViewer.Substring(0, viewer.Length).Trim().ToLower()) |
3446 | { | 3447 | { |
3447 | ViewerDenied = false; | 3448 | ViewerDenied = false; |
3448 | break; | 3449 | break; |
@@ -3459,7 +3460,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3459 | { | 3460 | { |
3460 | foreach (string viewer in m_BannedViewers) | 3461 | foreach (string viewer in m_BannedViewers) |
3461 | { | 3462 | { |
3462 | if (viewer == acd.Viewer.Substring(0, viewer.Length).Trim().ToLower()) | 3463 | if (viewer == curViewer.Substring(0, viewer.Length).Trim().ToLower()) |
3463 | { | 3464 | { |
3464 | ViewerDenied = true; | 3465 | ViewerDenied = true; |
3465 | break; | 3466 | break; |
@@ -3471,7 +3472,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3471 | { | 3472 | { |
3472 | m_log.DebugFormat( | 3473 | m_log.DebugFormat( |
3473 | "[SCENE]: Access denied for {0} {1} using {2}", | 3474 | "[SCENE]: Access denied for {0} {1} using {2}", |
3474 | acd.firstname, acd.lastname, acd.Viewer); | 3475 | acd.firstname, acd.lastname, curViewer); |
3475 | reason = "Access denied, your viewer is banned by the region owner"; | 3476 | reason = "Access denied, your viewer is banned by the region owner"; |
3476 | return false; | 3477 | return false; |
3477 | } | 3478 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 6f26176..b70e9df 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -150,12 +150,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
150 | 150 | ||
151 | get { return m_hasGroupChanged; } | 151 | get { return m_hasGroupChanged; } |
152 | } | 152 | } |
153 | |||
154 | private bool m_groupContainsForeignPrims = false; | ||
153 | 155 | ||
154 | /// <summary> | 156 | /// <summary> |
155 | /// Has the group changed due to an unlink operation? We record this in order to optimize deletion, since | 157 | /// Whether the group contains prims that came from a different group. This happens when |
156 | /// an unlinked group currently has to be persisted to the database before we can perform an unlink operation. | 158 | /// linking or delinking groups. The implication is that until the group is persisted, |
159 | /// the prims in the database still use the old SceneGroupID. That's a problem if the group | ||
160 | /// is deleted, because we delete groups by searching for prims by their SceneGroupID. | ||
157 | /// </summary> | 161 | /// </summary> |
158 | public bool HasGroupChangedDueToDelink { get; private set; } | 162 | public bool GroupContainsForeignPrims |
163 | { | ||
164 | private set | ||
165 | { | ||
166 | m_groupContainsForeignPrims = value; | ||
167 | if (m_groupContainsForeignPrims) | ||
168 | HasGroupChanged = true; | ||
169 | } | ||
170 | |||
171 | get { return m_groupContainsForeignPrims; } | ||
172 | } | ||
173 | |||
159 | 174 | ||
160 | private bool isTimeToPersist() | 175 | private bool isTimeToPersist() |
161 | { | 176 | { |
@@ -1624,7 +1639,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1624 | backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity; | 1639 | backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity; |
1625 | backup_group.RootPart.ParticleSystem = RootPart.ParticleSystem; | 1640 | backup_group.RootPart.ParticleSystem = RootPart.ParticleSystem; |
1626 | HasGroupChanged = false; | 1641 | HasGroupChanged = false; |
1627 | HasGroupChangedDueToDelink = false; | 1642 | GroupContainsForeignPrims = false; |
1628 | 1643 | ||
1629 | m_scene.EventManager.TriggerOnSceneObjectPreSave(backup_group, this); | 1644 | m_scene.EventManager.TriggerOnSceneObjectPreSave(backup_group, this); |
1630 | datastore.StoreObject(backup_group, m_scene.RegionInfo.RegionID); | 1645 | datastore.StoreObject(backup_group, m_scene.RegionInfo.RegionID); |
@@ -1686,28 +1701,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1686 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); | 1701 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); |
1687 | dupe.Backup = false; | 1702 | dupe.Backup = false; |
1688 | dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>(); | 1703 | dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>(); |
1689 | |||
1690 | // Warning, The following code related to previousAttachmentStatus is needed so that clones of | ||
1691 | // attachments do not bordercross while they're being duplicated. This is hacktastic! | ||
1692 | // Normally, setting AbsolutePosition will bordercross a prim if it's outside the region! | ||
1693 | // unless IsAttachment is true!, so to prevent border crossing, we save it's attachment state | ||
1694 | // (which should be false anyway) set it as an Attachment and then set it's Absolute Position, | ||
1695 | // then restore it's attachment state | ||
1696 | |||
1697 | // This is only necessary when userExposed is false! | ||
1698 | |||
1699 | bool previousAttachmentStatus = dupe.IsAttachment; | ||
1700 | |||
1701 | if (!userExposed) | ||
1702 | dupe.IsAttachment = true; | ||
1703 | |||
1704 | dupe.m_sittingAvatars = new List<UUID>(); | 1704 | dupe.m_sittingAvatars = new List<UUID>(); |
1705 | |||
1706 | if (!userExposed) | ||
1707 | { | ||
1708 | dupe.IsAttachment = previousAttachmentStatus; | ||
1709 | } | ||
1710 | |||
1711 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); | 1705 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); |
1712 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; | 1706 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; |
1713 | 1707 | ||
@@ -2388,6 +2382,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2388 | // If linking prims with different permissions, fix them | 2382 | // If linking prims with different permissions, fix them |
2389 | AdjustChildPrimPermissions(); | 2383 | AdjustChildPrimPermissions(); |
2390 | 2384 | ||
2385 | GroupContainsForeignPrims = true; | ||
2386 | |||
2391 | AttachToBackup(); | 2387 | AttachToBackup(); |
2392 | 2388 | ||
2393 | // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the | 2389 | // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the |
@@ -2531,9 +2527,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
2531 | 2527 | ||
2532 | linkPart.Rezzed = RootPart.Rezzed; | 2528 | linkPart.Rezzed = RootPart.Rezzed; |
2533 | 2529 | ||
2534 | // When we delete a group, we currently have to force persist to the database if the object id has changed | 2530 | // We must persist the delinked group to the database immediately, for safety. The problem |
2535 | // (since delete works by deleting all rows which have a given object id) | 2531 | // is that although in memory the new group has a new SceneGroupID, in the database it |
2536 | objectGroup.HasGroupChangedDueToDelink = true; | 2532 | // still has the parent group's SceneGroupID (until the next backup). This means that if the |
2533 | // parent group is deleted then the delinked group will also be deleted from the database. | ||
2534 | // This problem will disappear if the region remains alive long enough for another backup, | ||
2535 | // since at that time the delinked group's new SceneGroupID will be written to the database. | ||
2536 | // But if the region crashes before that then the prims will be permanently gone, and this must | ||
2537 | // not happen. (We can't use a just-in-time trick like GroupContainsForeignPrims in this case | ||
2538 | // because the delinked group doesn't know when the source group is deleted.) | ||
2539 | m_scene.ForceSceneObjectBackup(objectGroup); | ||
2537 | 2540 | ||
2538 | return objectGroup; | 2541 | return objectGroup; |
2539 | } | 2542 | } |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 491d0bf..64c464d 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -848,7 +848,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
848 | 848 | ||
849 | public string Viewer | 849 | public string Viewer |
850 | { | 850 | { |
851 | get { return m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode).Viewer; } | 851 | get { return Util.GetViewerName(m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode)); } |
852 | } | 852 | } |
853 | 853 | ||
854 | #endregion | 854 | #endregion |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs index 5cb271d..a556f9d 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/CoalescedSceneObjectsSerializer.cs | |||
@@ -119,21 +119,22 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
119 | return output; | 119 | return output; |
120 | } | 120 | } |
121 | } | 121 | } |
122 | 122 | ||
123 | public static bool TryFromXml(string xml, out CoalescedSceneObjects coa) | 123 | public static bool TryFromXml(string xml, out CoalescedSceneObjects coa) |
124 | { | 124 | { |
125 | // m_log.DebugFormat("[COALESCED SCENE OBJECTS SERIALIZER]: TryFromXml() deserializing {0}", xml); | 125 | // m_log.DebugFormat("[COALESCED SCENE OBJECTS SERIALIZER]: TryFromXml() deserializing {0}", xml); |
126 | 126 | ||
127 | coa = null; | 127 | coa = null; |
128 | int i = 0; | ||
129 | 128 | ||
130 | using (StringReader sr = new StringReader(xml)) | 129 | try |
131 | { | 130 | { |
132 | using (XmlTextReader reader = new XmlTextReader(sr)) | 131 | // Quickly check if this is a coalesced object, without fully parsing the XML |
133 | { | 132 | using (StringReader sr = new StringReader(xml)) |
134 | try | 133 | { |
134 | using (XmlTextReader reader = new XmlTextReader(sr)) | ||
135 | { | 135 | { |
136 | reader.Read(); | 136 | reader.MoveToContent(); // skip possible xml declaration |
137 | |||
137 | if (reader.Name != "CoalescedObject") | 138 | if (reader.Name != "CoalescedObject") |
138 | { | 139 | { |
139 | // m_log.DebugFormat( | 140 | // m_log.DebugFormat( |
@@ -142,49 +143,49 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
142 | 143 | ||
143 | return false; | 144 | return false; |
144 | } | 145 | } |
145 | 146 | } | |
146 | coa = new CoalescedSceneObjects(UUID.Zero); | 147 | } |
147 | reader.Read(); | ||
148 | |||
149 | while (reader.NodeType != XmlNodeType.EndElement && reader.Name != "CoalescedObject") | ||
150 | { | ||
151 | if (reader.Name == "SceneObjectGroup") | ||
152 | { | ||
153 | string soXml = reader.ReadOuterXml(); | ||
154 | |||
155 | SceneObjectGroup so = SceneObjectSerializer.FromOriginalXmlFormat(soXml); | ||
156 | |||
157 | if (so != null) | ||
158 | { | ||
159 | coa.Add(so); | ||
160 | } | ||
161 | else | ||
162 | { | ||
163 | // XXX: Possibly we should fail outright here rather than continuing if a particular component of the | ||
164 | // coalesced object fails to load. | ||
165 | m_log.WarnFormat( | ||
166 | "[COALESCED SCENE OBJECTS SERIALIZER]: Deserialization of xml for component {0} failed. Continuing.", | ||
167 | i); | ||
168 | } | ||
169 | 148 | ||
170 | i++; | 149 | XmlDocument doc = new XmlDocument(); |
171 | } | 150 | doc.LoadXml(xml); |
172 | } | 151 | XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject"); |
152 | if (e == null) | ||
153 | return false; | ||
173 | 154 | ||
174 | reader.ReadEndElement(); // CoalescedObject | 155 | coa = new CoalescedSceneObjects(UUID.Zero); |
156 | |||
157 | XmlNodeList groups = e.SelectNodes("SceneObjectGroup"); | ||
158 | int i = 0; | ||
159 | |||
160 | foreach (XmlNode n in groups) | ||
161 | { | ||
162 | SceneObjectGroup so = SceneObjectSerializer.FromOriginalXmlFormat(n.OuterXml); | ||
163 | if (so != null) | ||
164 | { | ||
165 | coa.Add(so); | ||
175 | } | 166 | } |
176 | catch (Exception e) | 167 | else |
177 | { | 168 | { |
178 | m_log.ErrorFormat( | 169 | // XXX: Possibly we should fail outright here rather than continuing if a particular component of the |
179 | "[COALESCED SCENE OBJECTS SERIALIZER]: Deserialization of xml failed with {0} {1}", | 170 | // coalesced object fails to load. |
180 | e.Message, e.StackTrace); | 171 | m_log.WarnFormat( |
181 | 172 | "[COALESCED SCENE OBJECTS SERIALIZER]: Deserialization of xml for component {0} failed. Continuing.", | |
182 | return false; | 173 | i); |
183 | } | 174 | } |
175 | |||
176 | i++; | ||
184 | } | 177 | } |
185 | } | 178 | } |
179 | catch (Exception e) | ||
180 | { | ||
181 | m_log.Error(string.Format( | ||
182 | "[COALESCED SCENE OBJECTS SERIALIZER]: Deserialization of xml failed with {0} ", | ||
183 | e.Message), e); | ||
184 | |||
185 | return false; | ||
186 | } | ||
186 | 187 | ||
187 | return true; | 188 | return true; |
188 | } | 189 | } |
189 | } | 190 | } |
190 | } \ No newline at end of file | 191 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index f07dee9..a93f3c8 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | |||
@@ -299,6 +299,73 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
299 | } | 299 | } |
300 | } | 300 | } |
301 | 301 | ||
302 | |||
303 | /// <summary> | ||
304 | /// Modifies a SceneObjectGroup. | ||
305 | /// </summary> | ||
306 | /// <param name="sog">The object</param> | ||
307 | /// <returns>Whether the object was actually modified</returns> | ||
308 | public delegate bool SceneObjectModifier(SceneObjectGroup sog); | ||
309 | |||
310 | /// <summary> | ||
311 | /// Modifies an object by deserializing it; applying 'modifier' to each SceneObjectGroup; and reserializing. | ||
312 | /// </summary> | ||
313 | /// <param name="assetId">The object's UUID</param> | ||
314 | /// <param name="data">Serialized data</param> | ||
315 | /// <param name="modifier">The function to run on each SceneObjectGroup</param> | ||
316 | /// <returns>The new serialized object's data, or null if an error occurred</returns> | ||
317 | public static byte[] ModifySerializedObject(UUID assetId, byte[] data, SceneObjectModifier modifier) | ||
318 | { | ||
319 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); | ||
320 | CoalescedSceneObjects coa = null; | ||
321 | |||
322 | string xmlData = Utils.BytesToString(data); | ||
323 | |||
324 | if (CoalescedSceneObjectsSerializer.TryFromXml(xmlData, out coa)) | ||
325 | { | ||
326 | // m_log.DebugFormat("[SERIALIZER]: Loaded coalescence {0} has {1} objects", assetId, coa.Count); | ||
327 | |||
328 | if (coa.Objects.Count == 0) | ||
329 | { | ||
330 | m_log.WarnFormat("[SERIALIZER]: Aborting load of coalesced object from asset {0} as it has zero loaded components", assetId); | ||
331 | return null; | ||
332 | } | ||
333 | |||
334 | sceneObjects.AddRange(coa.Objects); | ||
335 | } | ||
336 | else | ||
337 | { | ||
338 | SceneObjectGroup deserializedObject = FromOriginalXmlFormat(xmlData); | ||
339 | |||
340 | if (deserializedObject != null) | ||
341 | { | ||
342 | sceneObjects.Add(deserializedObject); | ||
343 | } | ||
344 | else | ||
345 | { | ||
346 | m_log.WarnFormat("[SERIALIZER]: Aborting load of object from asset {0} as deserialization failed", assetId); | ||
347 | return null; | ||
348 | } | ||
349 | } | ||
350 | |||
351 | bool modified = false; | ||
352 | foreach (SceneObjectGroup sog in sceneObjects) | ||
353 | { | ||
354 | if (modifier(sog)) | ||
355 | modified = true; | ||
356 | } | ||
357 | |||
358 | if (modified) | ||
359 | { | ||
360 | if (coa != null) | ||
361 | data = Utils.StringToBytes(CoalescedSceneObjectsSerializer.ToXml(coa)); | ||
362 | else | ||
363 | data = Utils.StringToBytes(ToOriginalXmlFormat(sceneObjects[0])); | ||
364 | } | ||
365 | |||
366 | return data; | ||
367 | } | ||
368 | |||
302 | 369 | ||
303 | #region manual serialization | 370 | #region manual serialization |
304 | 371 | ||
@@ -1230,7 +1297,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1230 | if (m_UserManagement == null) | 1297 | if (m_UserManagement == null) |
1231 | m_UserManagement = sop.ParentGroup.Scene.RequestModuleInterface<IUserManagement>(); | 1298 | m_UserManagement = sop.ParentGroup.Scene.RequestModuleInterface<IUserManagement>(); |
1232 | string name = m_UserManagement.GetUserName(sop.CreatorID); | 1299 | string name = m_UserManagement.GetUserName(sop.CreatorID); |
1233 | writer.WriteElementString("CreatorData", (string)options["home"] + ";" + name); | 1300 | writer.WriteElementString("CreatorData", ExternalRepresentationUtils.CalcCreatorData((string)options["home"], name)); |
1234 | } | 1301 | } |
1235 | 1302 | ||
1236 | WriteUUID(writer, "FolderID", sop.FolderID, options); | 1303 | WriteUUID(writer, "FolderID", sop.FolderID, options); |
@@ -1403,7 +1470,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1403 | if (m_UserManagement == null) | 1470 | if (m_UserManagement == null) |
1404 | m_UserManagement = scene.RequestModuleInterface<IUserManagement>(); | 1471 | m_UserManagement = scene.RequestModuleInterface<IUserManagement>(); |
1405 | string name = m_UserManagement.GetUserName(item.CreatorID); | 1472 | string name = m_UserManagement.GetUserName(item.CreatorID); |
1406 | writer.WriteElementString("CreatorData", (string)options["home"] + ";" + name); | 1473 | writer.WriteElementString("CreatorData", ExternalRepresentationUtils.CalcCreatorData((string)options["home"], name)); |
1407 | } | 1474 | } |
1408 | 1475 | ||
1409 | writer.WriteElementString("Description", item.Description); | 1476 | writer.WriteElementString("Description", item.Description); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs index 9378e20..c928b1e 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectLinkingTests.cs | |||
@@ -91,7 +91,12 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
91 | grp2.RootPart.ClearUpdateSchedule(); | 91 | grp2.RootPart.ClearUpdateSchedule(); |
92 | 92 | ||
93 | // Link grp2 to grp1. part2 becomes child prim to grp1. grp2 is eliminated. | 93 | // Link grp2 to grp1. part2 becomes child prim to grp1. grp2 is eliminated. |
94 | Assert.IsFalse(grp1.GroupContainsForeignPrims); | ||
94 | grp1.LinkToGroup(grp2); | 95 | grp1.LinkToGroup(grp2); |
96 | Assert.IsTrue(grp1.GroupContainsForeignPrims); | ||
97 | |||
98 | scene.Backup(true); | ||
99 | Assert.IsFalse(grp1.GroupContainsForeignPrims); | ||
95 | 100 | ||
96 | // FIXME: Can't do this test yet since group 2 still has its root part! We can't yet null this since | 101 | // FIXME: Can't do this test yet since group 2 still has its root part! We can't yet null this since |
97 | // it might cause SOG.ProcessBackup() to fail due to the race condition. This really needs to be fixed. | 102 | // it might cause SOG.ProcessBackup() to fail due to the race condition. This really needs to be fixed. |
@@ -143,7 +148,6 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
143 | 148 | ||
144 | Assert.That(grp1.Parts.Length, Is.EqualTo(1), "Group 1 still contained part2 after delink."); | 149 | Assert.That(grp1.Parts.Length, Is.EqualTo(1), "Group 1 still contained part2 after delink."); |
145 | Assert.That(part2.AbsolutePosition == Vector3.Zero, "The absolute position should be zero"); | 150 | Assert.That(part2.AbsolutePosition == Vector3.Zero, "The absolute position should be zero"); |
146 | Assert.That(grp3.HasGroupChangedDueToDelink, Is.True); | ||
147 | } | 151 | } |
148 | 152 | ||
149 | [Test] | 153 | [Test] |
@@ -335,30 +339,34 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
335 | SceneObjectPart rootPart | 339 | SceneObjectPart rootPart |
336 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) | 340 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) |
337 | { Name = rootPartName, UUID = rootPartUuid }; | 341 | { Name = rootPartName, UUID = rootPartUuid }; |
342 | |||
338 | SceneObjectPart linkPart | 343 | SceneObjectPart linkPart |
339 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) | 344 | = new SceneObjectPart(UUID.Zero, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) |
340 | { Name = linkPartName, UUID = linkPartUuid }; | 345 | { Name = linkPartName, UUID = linkPartUuid }; |
346 | SceneObjectGroup linkGroup = new SceneObjectGroup(linkPart); | ||
347 | scene.AddNewSceneObject(linkGroup, true); | ||
341 | 348 | ||
342 | SceneObjectGroup sog = new SceneObjectGroup(rootPart); | 349 | SceneObjectGroup sog = new SceneObjectGroup(rootPart); |
343 | sog.AddPart(linkPart); | 350 | scene.AddNewSceneObject(sog, true); |
344 | scene.AddNewSceneObject(sog, true); | 351 | |
345 | 352 | Assert.IsFalse(sog.GroupContainsForeignPrims); | |
346 | // In a test, we have to crank the backup handle manually. Normally this would be done by the timer invoked | 353 | sog.LinkToGroup(linkGroup); |
347 | // scene backup thread. | 354 | Assert.IsTrue(sog.GroupContainsForeignPrims); |
355 | |||
348 | scene.Backup(true); | 356 | scene.Backup(true); |
349 | 357 | Assert.AreEqual(1, scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID).Count); | |
358 | |||
350 | // These changes should occur immediately without waiting for a backup pass | 359 | // These changes should occur immediately without waiting for a backup pass |
351 | SceneObjectGroup groupToDelete = sog.DelinkFromGroup(linkPart, false); | 360 | SceneObjectGroup groupToDelete = sog.DelinkFromGroup(linkPart, false); |
352 | 361 | Assert.IsFalse(groupToDelete.GroupContainsForeignPrims); | |
353 | Assert.That(groupToDelete.HasGroupChangedDueToDelink, Is.True); | 362 | |
354 | scene.DeleteSceneObject(groupToDelete, false); | 363 | scene.DeleteSceneObject(groupToDelete, false); |
355 | Assert.That(groupToDelete.HasGroupChangedDueToDelink, Is.False); | ||
356 | 364 | ||
357 | List<SceneObjectGroup> storedObjects = scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID); | 365 | List<SceneObjectGroup> storedObjects = scene.SimulationDataService.LoadObjects(scene.RegionInfo.RegionID); |
358 | 366 | ||
359 | Assert.That(storedObjects.Count, Is.EqualTo(1)); | 367 | Assert.AreEqual(1, storedObjects.Count); |
360 | Assert.That(storedObjects[0].Parts.Length, Is.EqualTo(1)); | 368 | Assert.AreEqual(1, storedObjects[0].Parts.Length); |
361 | Assert.That(storedObjects[0].ContainsPart(rootPartUuid)); | 369 | Assert.IsTrue(storedObjects[0].ContainsPart(rootPartUuid)); |
362 | } | 370 | } |
363 | } | 371 | } |
364 | } | 372 | } |
diff --git a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs index ec18db0..44d4e93 100644 --- a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs | |||
@@ -669,7 +669,7 @@ namespace OpenSim.Region.OptionalModules.UDP.Linden | |||
669 | aCircuit = new AgentCircuitData(); | 669 | aCircuit = new AgentCircuitData(); |
670 | 670 | ||
671 | if (!llClient.SceneAgent.IsChildAgent) | 671 | if (!llClient.SceneAgent.IsChildAgent) |
672 | m_log.InfoFormat("[INFO]: {0} # {1} # {2}", llClient.Name, aCircuit.Viewer, aCircuit.Id0); | 672 | m_log.InfoFormat("[INFO]: {0} # {1} # {2}", llClient.Name, Util.GetViewerName(aCircuit), aCircuit.Id0); |
673 | 673 | ||
674 | int avg_reqs = cinfo.AsyncRequests.Values.Sum() + cinfo.GenericRequests.Values.Sum() + cinfo.SyncRequests.Values.Sum(); | 674 | int avg_reqs = cinfo.AsyncRequests.Values.Sum() + cinfo.GenericRequests.Values.Sum() + cinfo.SyncRequests.Values.Sum(); |
675 | avg_reqs = avg_reqs / ((DateTime.Now - cinfo.StartedTime).Minutes + 1); | 675 | avg_reqs = avg_reqs / ((DateTime.Now - cinfo.StartedTime).Minutes + 1); |
@@ -706,4 +706,4 @@ namespace OpenSim.Region.OptionalModules.UDP.Linden | |||
706 | m_log.InfoFormat("[INFO]: {0,25} {1,-6}", "Total", sum); | 706 | m_log.InfoFormat("[INFO]: {0,25} {1,-6}", "Total", sum); |
707 | } | 707 | } |
708 | } | 708 | } |
709 | } \ No newline at end of file | 709 | } |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs index 8b0fdeb..7e61007 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorLockAxis.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 | * |
@@ -121,8 +121,10 @@ public class BSActorLockAxis : BSActor | |||
121 | // The constraint is tied to the world and oriented to the prim. | 121 | // The constraint is tied to the world and oriented to the prim. |
122 | 122 | ||
123 | // Free to move linearly in the region | 123 | // Free to move linearly in the region |
124 | OMV.Vector3 linearLow = OMV.Vector3.Zero; | 124 | // OMV.Vector3 linearLow = OMV.Vector3.Zero; |
125 | OMV.Vector3 linearHigh = m_physicsScene.TerrainManager.DefaultRegionSize; | 125 | // OMV.Vector3 linearHigh = m_physicsScene.TerrainManager.DefaultRegionSize; |
126 | OMV.Vector3 linearLow = new OMV.Vector3(-10000f, -10000f, -10000f); | ||
127 | OMV.Vector3 linearHigh = new OMV.Vector3(10000f, 10000f, 10000f); | ||
126 | if (m_controllingPrim.LockedLinearAxis.X != BSPhysObject.FreeAxis) | 128 | if (m_controllingPrim.LockedLinearAxis.X != BSPhysObject.FreeAxis) |
127 | { | 129 | { |
128 | linearLow.X = m_controllingPrim.RawPosition.X; | 130 | linearLow.X = m_controllingPrim.RawPosition.X; |
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs index fc18960..c9b134c 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs | |||
@@ -426,7 +426,7 @@ public sealed class BSCharacter : BSPhysObject | |||
426 | m_targetVelocity = value; | 426 | m_targetVelocity = value; |
427 | OMV.Vector3 targetVel = value; | 427 | OMV.Vector3 targetVel = value; |
428 | if (_setAlwaysRun && !_flying) | 428 | if (_setAlwaysRun && !_flying) |
429 | targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 0f); | 429 | targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 1f); |
430 | 430 | ||
431 | if (m_moveActor != null) | 431 | if (m_moveActor != null) |
432 | m_moveActor.SetVelocityAndTarget(RawVelocity, targetVel, false /* inTaintTime */); | 432 | m_moveActor.SetVelocityAndTarget(RawVelocity, targetVel, false /* inTaintTime */); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 6264f5d..978e567 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -897,15 +897,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
897 | Part.Name, Part.UUID, false); | 897 | Part.Name, Part.UUID, false); |
898 | 898 | ||
899 | 899 | ||
900 | m_log.DebugFormat( | 900 | m_log.Debug(string.Format( |
901 | "[SCRIPT INSTANCE]: Runtime error in script {0}, part {1} {2} at {3} in {4}, displayed error {5}, actual exception {6}", | 901 | "[SCRIPT INSTANCE]: Runtime error in script {0}, part {1} {2} at {3} in {4} ", |
902 | ScriptName, | 902 | ScriptName, |
903 | PrimName, | 903 | PrimName, |
904 | Part.UUID, | 904 | Part.UUID, |
905 | Part.AbsolutePosition, | 905 | Part.AbsolutePosition, |
906 | Part.ParentGroup.Scene.Name, | 906 | Part.ParentGroup.Scene.Name), |
907 | text.Replace("\n", "\\n"), | 907 | e); |
908 | e.InnerException); | ||
909 | } | 908 | } |
910 | catch (Exception) | 909 | catch (Exception) |
911 | { | 910 | { |
@@ -1220,4 +1219,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
1220 | return null; | 1219 | return null; |
1221 | } | 1220 | } |
1222 | } | 1221 | } |
1223 | } \ No newline at end of file | 1222 | } |
diff --git a/OpenSim/Server/Base/ServerUtils.cs b/OpenSim/Server/Base/ServerUtils.cs index 08ba50d..c92e23c 100644 --- a/OpenSim/Server/Base/ServerUtils.cs +++ b/OpenSim/Server/Base/ServerUtils.cs | |||
@@ -280,11 +280,11 @@ namespace OpenSim.Server.Base | |||
280 | { | 280 | { |
281 | if (!(e is System.MissingMethodException)) | 281 | if (!(e is System.MissingMethodException)) |
282 | { | 282 | { |
283 | m_log.ErrorFormat("[SERVER UTILS]: Error loading plugin {0} from {1}. Exception: {2}, {3}", | 283 | m_log.Error(string.Format("[SERVER UTILS]: Error loading plugin {0} from {1}. Exception: {2}", |
284 | interfaceName, | 284 | interfaceName, |
285 | dllName, | 285 | dllName, |
286 | e.InnerException == null ? e.Message : e.InnerException.Message, | 286 | e.InnerException == null ? e.Message : e.InnerException.Message), |
287 | e.StackTrace); | 287 | e); |
288 | } | 288 | } |
289 | m_log.ErrorFormat("[SERVER UTILS]: Error loading plugin {0}: {1} args.Length {2}", dllName, e.Message, args.Length); | 289 | m_log.ErrorFormat("[SERVER UTILS]: Error loading plugin {0}: {1} args.Length {2}", dllName, e.Message, args.Length); |
290 | return null; | 290 | return null; |
diff --git a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs index 0d7c136..5df3dda 100644 --- a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs | |||
@@ -155,7 +155,7 @@ namespace OpenSim.Server.Handlers.Asset | |||
155 | } | 155 | } |
156 | catch (Exception e) | 156 | catch (Exception e) |
157 | { | 157 | { |
158 | m_log.ErrorFormat("[XINVENTORY HANDLER]: Exception {0}", e.StackTrace); | 158 | m_log.Error(string.Format("[XINVENTORY HANDLER]: Exception {0} ", e.Message), e); |
159 | } | 159 | } |
160 | 160 | ||
161 | return FailureResult(); | 161 | return FailureResult(); |
diff --git a/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs b/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs index d30cc22..d55142e 100644 --- a/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs +++ b/OpenSim/Server/Handlers/Profiles/UserProfilesHandlers.cs | |||
@@ -273,10 +273,10 @@ namespace OpenSim.Server.Handlers | |||
273 | response.Result = OSD.SerializeMembers(note); | 273 | response.Result = OSD.SerializeMembers(note); |
274 | return true; | 274 | return true; |
275 | } | 275 | } |
276 | 276 | ||
277 | object Notes = (object) note; | 277 | response.Error.Code = ErrorCode.InternalError; |
278 | OSD.DeserializeMembers(ref Notes, (OSDMap)json["params"]); | 278 | response.Error.Message = "Error reading notes"; |
279 | return true; | 279 | return false; |
280 | } | 280 | } |
281 | 281 | ||
282 | public bool NotesUpdate(OSDMap json, ref JsonRpcResponse response) | 282 | public bool NotesUpdate(OSDMap json, ref JsonRpcResponse response) |
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs index f869060..54191f6 100644 --- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs | |||
@@ -50,6 +50,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
50 | LogManager.GetLogger( | 50 | LogManager.GetLogger( |
51 | MethodBase.GetCurrentMethod().DeclaringType); | 51 | MethodBase.GetCurrentMethod().DeclaringType); |
52 | 52 | ||
53 | private string m_ServerURLHost; | ||
53 | private string m_ServerURL; | 54 | private string m_ServerURL; |
54 | private GridRegion m_Gatekeeper; | 55 | private GridRegion m_Gatekeeper; |
55 | 56 | ||
@@ -59,7 +60,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
59 | 60 | ||
60 | public UserAgentServiceConnector(string url, bool dnsLookup) | 61 | public UserAgentServiceConnector(string url, bool dnsLookup) |
61 | { | 62 | { |
62 | m_ServerURL = url; | 63 | m_ServerURL = m_ServerURLHost = url; |
63 | 64 | ||
64 | if (dnsLookup) | 65 | if (dnsLookup) |
65 | { | 66 | { |
@@ -75,7 +76,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
75 | } | 76 | } |
76 | catch (Exception e) | 77 | catch (Exception e) |
77 | { | 78 | { |
78 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Malformed Uri {0}: {1}", m_ServerURL, e.Message); | 79 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Malformed Uri {0}: {1}", url, e.Message); |
79 | } | 80 | } |
80 | } | 81 | } |
81 | 82 | ||
@@ -99,11 +100,12 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
99 | m_log.Error("[USER AGENT CONNECTOR]: No Server URI named in section UserAgentService"); | 100 | m_log.Error("[USER AGENT CONNECTOR]: No Server URI named in section UserAgentService"); |
100 | throw new Exception("UserAgent connector init error"); | 101 | throw new Exception("UserAgent connector init error"); |
101 | } | 102 | } |
102 | m_ServerURL = serviceURI; | 103 | |
104 | m_ServerURL = m_ServerURLHost = serviceURI; | ||
103 | if (!m_ServerURL.EndsWith("/")) | 105 | if (!m_ServerURL.EndsWith("/")) |
104 | m_ServerURL += "/"; | 106 | m_ServerURL += "/"; |
105 | 107 | ||
106 | m_log.DebugFormat("[USER AGENT CONNECTOR]: UserAgentServiceConnector started for {0}", m_ServerURL); | 108 | //m_log.DebugFormat("[USER AGENT CONNECTOR]: new connector to {0}", m_ServerURL); |
107 | } | 109 | } |
108 | 110 | ||
109 | protected override string AgentPath() | 111 | protected override string AgentPath() |
@@ -206,20 +208,20 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
206 | } | 208 | } |
207 | catch (Exception e) | 209 | catch (Exception e) |
208 | { | 210 | { |
209 | m_log.DebugFormat("[USER AGENT CONNECTOR]: {0} call to {1} failed: {2}", methodName, m_ServerURL, e.Message); | 211 | m_log.DebugFormat("[USER AGENT CONNECTOR]: {0} call to {1} failed: {2}", methodName, m_ServerURLHost, e.Message); |
210 | throw; | 212 | throw; |
211 | } | 213 | } |
212 | 214 | ||
213 | if (response.IsFault) | 215 | if (response.IsFault) |
214 | { | 216 | { |
215 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: {0} call to {1} returned an error: {2}", methodName, m_ServerURL, response.FaultString)); | 217 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: {0} call to {1} returned an error: {2}", methodName, m_ServerURLHost, response.FaultString)); |
216 | } | 218 | } |
217 | 219 | ||
218 | hash = (Hashtable)response.Value; | 220 | hash = (Hashtable)response.Value; |
219 | 221 | ||
220 | if (hash == null) | 222 | if (hash == null) |
221 | { | 223 | { |
222 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: {0} call to {1} returned null", methodName, m_ServerURL)); | 224 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: {0} call to {1} returned null", methodName, m_ServerURLHost)); |
223 | } | 225 | } |
224 | 226 | ||
225 | return hash; | 227 | return hash; |
@@ -370,14 +372,14 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
370 | } | 372 | } |
371 | catch | 373 | catch |
372 | { | 374 | { |
373 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for StatusNotification", m_ServerURL); | 375 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for StatusNotification", m_ServerURLHost); |
374 | // reason = "Exception: " + e.Message; | 376 | // reason = "Exception: " + e.Message; |
375 | return friendsOnline; | 377 | return friendsOnline; |
376 | } | 378 | } |
377 | 379 | ||
378 | if (response.IsFault) | 380 | if (response.IsFault) |
379 | { | 381 | { |
380 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} for StatusNotification returned an error: {1}", m_ServerURL, response.FaultString); | 382 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} for StatusNotification returned an error: {1}", m_ServerURLHost, response.FaultString); |
381 | // reason = "XMLRPC Fault"; | 383 | // reason = "XMLRPC Fault"; |
382 | return friendsOnline; | 384 | return friendsOnline; |
383 | } | 385 | } |
@@ -389,7 +391,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
389 | { | 391 | { |
390 | if (hash == null) | 392 | if (hash == null) |
391 | { | 393 | { |
392 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetOnlineFriends Got null response from {0}! THIS IS BAAAAD", m_ServerURL); | 394 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetOnlineFriends Got null response from {0}! THIS IS BAAAAD", m_ServerURLHost); |
393 | // reason = "Internal error 1"; | 395 | // reason = "Internal error 1"; |
394 | return friendsOnline; | 396 | return friendsOnline; |
395 | } | 397 | } |
@@ -442,14 +444,14 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
442 | } | 444 | } |
443 | catch | 445 | catch |
444 | { | 446 | { |
445 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for GetOnlineFriends", m_ServerURL); | 447 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for GetOnlineFriends", m_ServerURLHost); |
446 | // reason = "Exception: " + e.Message; | 448 | // reason = "Exception: " + e.Message; |
447 | return online; | 449 | return online; |
448 | } | 450 | } |
449 | 451 | ||
450 | if (response.IsFault) | 452 | if (response.IsFault) |
451 | { | 453 | { |
452 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} for GetOnlineFriends returned an error: {1}", m_ServerURL, response.FaultString); | 454 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} for GetOnlineFriends returned an error: {1}", m_ServerURLHost, response.FaultString); |
453 | // reason = "XMLRPC Fault"; | 455 | // reason = "XMLRPC Fault"; |
454 | return online; | 456 | return online; |
455 | } | 457 | } |
@@ -461,7 +463,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
461 | { | 463 | { |
462 | if (hash == null) | 464 | if (hash == null) |
463 | { | 465 | { |
464 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetOnlineFriends Got null response from {0}! THIS IS BAAAAD", m_ServerURL); | 466 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: GetOnlineFriends Got null response from {0}! THIS IS BAAAAD", m_ServerURLHost); |
465 | // reason = "Internal error 1"; | 467 | // reason = "Internal error 1"; |
466 | return online; | 468 | return online; |
467 | } | 469 | } |
@@ -570,13 +572,13 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
570 | 572 | ||
571 | if (!hash.ContainsKey("UUID")) | 573 | if (!hash.ContainsKey("UUID")) |
572 | { | 574 | { |
573 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: get_uuid call to {0} didn't return a UUID", m_ServerURL)); | 575 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: get_uuid call to {0} didn't return a UUID", m_ServerURLHost)); |
574 | } | 576 | } |
575 | 577 | ||
576 | UUID uuid; | 578 | UUID uuid; |
577 | if (!UUID.TryParse(hash["UUID"].ToString(), out uuid)) | 579 | if (!UUID.TryParse(hash["UUID"].ToString(), out uuid)) |
578 | { | 580 | { |
579 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: get_uuid call to {0} returned an invalid UUID: {1}", m_ServerURL, hash["UUID"].ToString())); | 581 | throw new Exception(string.Format("[USER AGENT CONNECTOR]: get_uuid call to {0} returned an invalid UUID: {1}", m_ServerURLHost, hash["UUID"].ToString())); |
580 | } | 582 | } |
581 | 583 | ||
582 | return uuid; | 584 | return uuid; |
@@ -584,7 +586,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
584 | 586 | ||
585 | private bool GetBoolResponse(XmlRpcRequest request, out string reason) | 587 | private bool GetBoolResponse(XmlRpcRequest request, out string reason) |
586 | { | 588 | { |
587 | //m_log.Debug("[USER AGENT CONNECTOR]: GetBoolResponse from/to " + m_ServerURL); | 589 | //m_log.Debug("[USER AGENT CONNECTOR]: GetBoolResponse from/to " + m_ServerURLHost); |
588 | XmlRpcResponse response = null; | 590 | XmlRpcResponse response = null; |
589 | try | 591 | try |
590 | { | 592 | { |
@@ -592,14 +594,14 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
592 | } | 594 | } |
593 | catch (Exception e) | 595 | catch (Exception e) |
594 | { | 596 | { |
595 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for GetBoolResponse", m_ServerURL); | 597 | m_log.DebugFormat("[USER AGENT CONNECTOR]: Unable to contact remote server {0} for GetBoolResponse", m_ServerURLHost); |
596 | reason = "Exception: " + e.Message; | 598 | reason = "Exception: " + e.Message; |
597 | return false; | 599 | return false; |
598 | } | 600 | } |
599 | 601 | ||
600 | if (response.IsFault) | 602 | if (response.IsFault) |
601 | { | 603 | { |
602 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} for GetBoolResponse returned an error: {1}", m_ServerURL, response.FaultString); | 604 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: remote call to {0} for GetBoolResponse returned an error: {1}", m_ServerURLHost, response.FaultString); |
603 | reason = "XMLRPC Fault"; | 605 | reason = "XMLRPC Fault"; |
604 | return false; | 606 | return false; |
605 | } | 607 | } |
@@ -611,7 +613,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
611 | { | 613 | { |
612 | if (hash == null) | 614 | if (hash == null) |
613 | { | 615 | { |
614 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got null response from {0}! THIS IS BAAAAD", m_ServerURL); | 616 | m_log.ErrorFormat("[USER AGENT CONNECTOR]: Got null response from {0}! THIS IS BAAAAD", m_ServerURLHost); |
615 | reason = "Internal error 1"; | 617 | reason = "Internal error 1"; |
616 | return false; | 618 | return false; |
617 | } | 619 | } |
@@ -622,7 +624,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
622 | else | 624 | else |
623 | { | 625 | { |
624 | reason = "Internal error 2"; | 626 | reason = "Internal error 2"; |
625 | m_log.WarnFormat("[USER AGENT CONNECTOR]: response from {0} does not have expected key 'result'", m_ServerURL); | 627 | m_log.WarnFormat("[USER AGENT CONNECTOR]: response from {0} does not have expected key 'result'", m_ServerURLHost); |
626 | } | 628 | } |
627 | 629 | ||
628 | return success; | 630 | return success; |
diff --git a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs index 0f8033d..eecf096 100644 --- a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs +++ b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs | |||
@@ -97,9 +97,9 @@ namespace OpenSim.Services.Connectors | |||
97 | } | 97 | } |
98 | catch (Exception e) | 98 | catch (Exception e) |
99 | { | 99 | { |
100 | m_log.WarnFormat( | 100 | m_log.Warn(string.Format( |
101 | "[NEIGHBOUR SERVICES CONNECTOR]: Unable to parse uri {0} to send HelloNeighbour from {1} to {2}. Exception {3}{4}", | 101 | "[NEIGHBOUR SERVICES CONNECTOR]: Unable to parse uri {0} to send HelloNeighbour from {1} to {2}. Exception {3} ", |
102 | uri, thisRegion.RegionName, region.RegionName, e.Message, e.StackTrace); | 102 | uri, thisRegion.RegionName, region.RegionName, e.Message), e); |
103 | 103 | ||
104 | return false; | 104 | return false; |
105 | } | 105 | } |
@@ -116,9 +116,9 @@ namespace OpenSim.Services.Connectors | |||
116 | } | 116 | } |
117 | catch (Exception e) | 117 | catch (Exception e) |
118 | { | 118 | { |
119 | m_log.WarnFormat( | 119 | m_log.Warn(string.Format( |
120 | "[NEIGHBOUR SERVICES CONNECTOR]: PackRegionInfoData failed for HelloNeighbour from {0} to {1}. Exception {2}{3}", | 120 | "[NEIGHBOUR SERVICES CONNECTOR]: PackRegionInfoData failed for HelloNeighbour from {0} to {1}. Exception {2} ", |
121 | thisRegion.RegionName, region.RegionName, e.Message, e.StackTrace); | 121 | thisRegion.RegionName, region.RegionName, e.Message), e); |
122 | 122 | ||
123 | return false; | 123 | return false; |
124 | } | 124 | } |
@@ -136,9 +136,9 @@ namespace OpenSim.Services.Connectors | |||
136 | } | 136 | } |
137 | catch (Exception e) | 137 | catch (Exception e) |
138 | { | 138 | { |
139 | m_log.WarnFormat( | 139 | m_log.Warn(string.Format( |
140 | "[NEIGHBOUR SERVICES CONNECTOR]: Exception thrown on serialization of HelloNeighbour from {0} to {1}. Exception {2}{3}", | 140 | "[NEIGHBOUR SERVICES CONNECTOR]: Exception thrown on serialization of HelloNeighbour from {0} to {1}. Exception {2} ", |
141 | thisRegion.RegionName, region.RegionName, e.Message, e.StackTrace); | 141 | thisRegion.RegionName, region.RegionName, e.Message), e); |
142 | 142 | ||
143 | return false; | 143 | return false; |
144 | } | 144 | } |
@@ -153,9 +153,9 @@ namespace OpenSim.Services.Connectors | |||
153 | } | 153 | } |
154 | catch (Exception e) | 154 | catch (Exception e) |
155 | { | 155 | { |
156 | m_log.WarnFormat( | 156 | m_log.Warn(string.Format( |
157 | "[NEIGHBOUR SERVICES CONNECTOR]: Unable to send HelloNeighbour from {0} to {1}. Exception {2}{3}", | 157 | "[NEIGHBOUR SERVICES CONNECTOR]: Unable to send HelloNeighbour from {0} to {1} (uri {2}). Exception {3} ", |
158 | thisRegion.RegionName, region.RegionName, e.Message, e.StackTrace); | 158 | thisRegion.RegionName, region.RegionName, uri, e.Message), e); |
159 | 159 | ||
160 | return false; | 160 | return false; |
161 | } | 161 | } |
@@ -192,9 +192,9 @@ namespace OpenSim.Services.Connectors | |||
192 | } | 192 | } |
193 | catch (Exception e) | 193 | catch (Exception e) |
194 | { | 194 | { |
195 | m_log.WarnFormat( | 195 | m_log.Warn(string.Format( |
196 | "[NEIGHBOUR SERVICES CONNECTOR]: Exception on reply of DoHelloNeighbourCall from {0} back to {1}. Exception {2}{3}", | 196 | "[NEIGHBOUR SERVICES CONNECTOR]: Exception on reply of DoHelloNeighbourCall from {0} back to {1}. Exception {2} ", |
197 | region.RegionName, thisRegion.RegionName, e.Message, e.StackTrace); | 197 | region.RegionName, thisRegion.RegionName, e.Message), e); |
198 | 198 | ||
199 | return false; | 199 | return false; |
200 | } | 200 | } |
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs index aca414b..171beaa 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | |||
@@ -421,11 +421,18 @@ namespace OpenSim.Services.Connectors.Simulation | |||
421 | args["destination_name"] = OSD.FromString(destination.RegionName); | 421 | args["destination_name"] = OSD.FromString(destination.RegionName); |
422 | args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); | 422 | args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); |
423 | 423 | ||
424 | WebUtil.PostToService(uri, args, 40000); | 424 | OSDMap result = WebUtil.PostToService(uri, args, 40000); |
425 | |||
426 | if (result == null) | ||
427 | return false; | ||
428 | bool success = result["success"].AsBoolean(); | ||
429 | if (!success) | ||
430 | return false; | ||
425 | } | 431 | } |
426 | catch (Exception e) | 432 | catch (Exception e) |
427 | { | 433 | { |
428 | m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR] CreateObject failed with exception; {0}",e.ToString()); | 434 | m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR] CreateObject failed with exception; {0}",e.ToString()); |
435 | return false; | ||
429 | } | 436 | } |
430 | 437 | ||
431 | return true; | 438 | return true; |
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs index f6136b5..7a0228b 100644 --- a/OpenSim/Services/HypergridService/GatekeeperService.cs +++ b/OpenSim/Services/HypergridService/GatekeeperService.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 | * |
@@ -228,17 +228,19 @@ namespace OpenSim.Services.HypergridService | |||
228 | aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName, | 228 | aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName, |
229 | aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0, aCircuit.teleportFlags.ToString()); | 229 | aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0, aCircuit.teleportFlags.ToString()); |
230 | 230 | ||
231 | string curViewer = Util.GetViewerName(aCircuit); | ||
232 | |||
231 | // | 233 | // |
232 | // Check client | 234 | // Check client |
233 | // | 235 | // |
234 | if (m_AllowedClients != string.Empty) | 236 | if (m_AllowedClients != string.Empty) |
235 | { | 237 | { |
236 | Regex arx = new Regex(m_AllowedClients); | 238 | Regex arx = new Regex(m_AllowedClients); |
237 | Match am = arx.Match(aCircuit.Viewer); | 239 | Match am = arx.Match(curViewer); |
238 | 240 | ||
239 | if (!am.Success) | 241 | if (!am.Success) |
240 | { | 242 | { |
241 | m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is not allowed", aCircuit.Viewer); | 243 | m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is not allowed", curViewer); |
242 | return false; | 244 | return false; |
243 | } | 245 | } |
244 | } | 246 | } |
@@ -246,11 +248,11 @@ namespace OpenSim.Services.HypergridService | |||
246 | if (m_DeniedClients != string.Empty) | 248 | if (m_DeniedClients != string.Empty) |
247 | { | 249 | { |
248 | Regex drx = new Regex(m_DeniedClients); | 250 | Regex drx = new Regex(m_DeniedClients); |
249 | Match dm = drx.Match(aCircuit.Viewer); | 251 | Match dm = drx.Match(curViewer); |
250 | 252 | ||
251 | if (dm.Success) | 253 | if (dm.Success) |
252 | { | 254 | { |
253 | m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is denied", aCircuit.Viewer); | 255 | m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is denied", curViewer); |
254 | return false; | 256 | return false; |
255 | } | 257 | } |
256 | } | 258 | } |
diff --git a/OpenSim/Services/HypergridService/HGAssetService.cs b/OpenSim/Services/HypergridService/HGAssetService.cs index 84dec8d..5c804d4 100644 --- a/OpenSim/Services/HypergridService/HGAssetService.cs +++ b/OpenSim/Services/HypergridService/HGAssetService.cs | |||
@@ -76,10 +76,10 @@ namespace OpenSim.Services.HypergridService | |||
76 | if (m_UserAccountService == null) | 76 | if (m_UserAccountService == null) |
77 | throw new Exception(String.Format("Unable to create UserAccountService from {0}", userAccountsDll)); | 77 | throw new Exception(String.Format("Unable to create UserAccountService from {0}", userAccountsDll)); |
78 | 78 | ||
79 | // legacy configuration [obsolete] | 79 | m_HomeURL = Util.GetConfigVarFromSections<string>(config, "HomeURI", |
80 | m_HomeURL = assetConfig.GetString("ProfileServerURI", string.Empty); | 80 | new string[] { "Startup", "Hypergrid", configName }, string.Empty); |
81 | // Preferred | 81 | if (m_HomeURL == string.Empty) |
82 | m_HomeURL = assetConfig.GetString("HomeURI", m_HomeURL); | 82 | throw new Exception("[HGAssetService] No HomeURI specified"); |
83 | 83 | ||
84 | m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); | 84 | m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); |
85 | 85 | ||
diff --git a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs index 90ce44a..1608039 100644 --- a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs +++ b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs | |||
@@ -215,25 +215,17 @@ namespace OpenSim.Services.HypergridService | |||
215 | if (suitcase == null) | 215 | if (suitcase == null) |
216 | { | 216 | { |
217 | m_log.ErrorFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to create suitcase folder"); | 217 | m_log.ErrorFormat("[HG SUITCASE INVENTORY SERVICE]: Unable to create suitcase folder"); |
218 | return null; | ||
218 | } | 219 | } |
219 | else | 220 | |
220 | { | 221 | m_Database.StoreFolder(suitcase); |
221 | m_Database.StoreFolder(suitcase); | ||
222 | |||
223 | // Create System folders | ||
224 | CreateSystemFolders(principalID, suitcase.folderID); | ||
225 | 222 | ||
226 | SetAsNormalFolder(suitcase); | 223 | CreateSystemFolders(principalID, suitcase.folderID); |
227 | |||
228 | return ConvertToOpenSim(suitcase); | ||
229 | } | ||
230 | } | ||
231 | else | ||
232 | { | ||
233 | return ConvertToOpenSim(suitcase); | ||
234 | } | 224 | } |
235 | 225 | ||
236 | return null; | 226 | SetAsNormalFolder(suitcase); |
227 | |||
228 | return ConvertToOpenSim(suitcase); | ||
237 | } | 229 | } |
238 | 230 | ||
239 | protected void CreateSystemFolders(UUID principalID, UUID rootID) | 231 | protected void CreateSystemFolders(UUID principalID, UUID rootID) |
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 46a5c18..b61b5e8 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -58,6 +58,7 @@ namespace OpenSim.Services.LLLoginService | |||
58 | protected IGridUserService m_GridUserService; | 58 | protected IGridUserService m_GridUserService; |
59 | protected IAuthenticationService m_AuthenticationService; | 59 | protected IAuthenticationService m_AuthenticationService; |
60 | protected IInventoryService m_InventoryService; | 60 | protected IInventoryService m_InventoryService; |
61 | protected IInventoryService m_HGInventoryService; | ||
61 | protected IGridService m_GridService; | 62 | protected IGridService m_GridService; |
62 | protected IPresenceService m_PresenceService; | 63 | protected IPresenceService m_PresenceService; |
63 | protected ISimulationService m_LocalSimulationService; | 64 | protected ISimulationService m_LocalSimulationService; |
@@ -165,6 +166,15 @@ namespace OpenSim.Services.LLLoginService | |||
165 | if (agentService != string.Empty) | 166 | if (agentService != string.Empty) |
166 | m_UserAgentService = ServerUtils.LoadPlugin<IUserAgentService>(agentService, args); | 167 | m_UserAgentService = ServerUtils.LoadPlugin<IUserAgentService>(agentService, args); |
167 | 168 | ||
169 | // Get the Hypergrid inventory service (exists only if Hypergrid is enabled) | ||
170 | string hgInvServicePlugin = m_LoginServerConfig.GetString("HGInventoryServicePlugin", String.Empty); | ||
171 | if (hgInvServicePlugin != string.Empty) | ||
172 | { | ||
173 | string hgInvServiceArg = m_LoginServerConfig.GetString("HGInventoryServiceConstructorArg", String.Empty); | ||
174 | Object[] args2 = new Object[] { config, hgInvServiceArg }; | ||
175 | m_HGInventoryService = ServerUtils.LoadPlugin<IInventoryService>(hgInvServicePlugin, args2); | ||
176 | } | ||
177 | |||
168 | // | 178 | // |
169 | // deal with the services given as argument | 179 | // deal with the services given as argument |
170 | // | 180 | // |
@@ -350,6 +360,13 @@ namespace OpenSim.Services.LLLoginService | |||
350 | return LLFailedLoginResponse.InventoryProblem; | 360 | return LLFailedLoginResponse.InventoryProblem; |
351 | } | 361 | } |
352 | 362 | ||
363 | if (m_HGInventoryService != null) | ||
364 | { | ||
365 | // Give the Suitcase service a chance to create the suitcase folder. | ||
366 | // (If we're not using the Suitcase inventory service then this won't do anything.) | ||
367 | m_HGInventoryService.GetRootFolder(account.PrincipalID); | ||
368 | } | ||
369 | |||
353 | List<InventoryFolderBase> inventorySkel = m_InventoryService.GetInventorySkeleton(account.PrincipalID); | 370 | List<InventoryFolderBase> inventorySkel = m_InventoryService.GetInventorySkeleton(account.PrincipalID); |
354 | if (m_RequireInventory && ((inventorySkel == null) || (inventorySkel != null && inventorySkel.Count == 0))) | 371 | if (m_RequireInventory && ((inventorySkel == null) || (inventorySkel != null && inventorySkel.Count == 0))) |
355 | { | 372 | { |