aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
diff options
context:
space:
mode:
authorDavid Walter Seikel2016-11-03 21:44:39 +1000
committerDavid Walter Seikel2016-11-03 21:44:39 +1000
commit134f86e8d5c414409631b25b8c6f0ee45fbd8631 (patch)
tree216b89d3fb89acfb81be1e440c25c41ab09fa96d /OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
parentMore changing to production grid. Double oops. (diff)
downloadopensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.zip
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.gz
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.bz2
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.xz
Initial update to OpenSim 0.8.2.1 source code.
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs519
1 files changed, 365 insertions, 154 deletions
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index 311707b..80fa08a 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -32,6 +32,7 @@ using System.IO;
32using System.Linq; 32using System.Linq;
33using System.Reflection; 33using System.Reflection;
34using System.Security; 34using System.Security;
35using System.Timers;
35using log4net; 36using log4net;
36using Mono.Addins; 37using Mono.Addins;
37using Nini.Config; 38using Nini.Config;
@@ -39,6 +40,7 @@ using OpenMetaverse;
39using OpenSim.Framework; 40using OpenSim.Framework;
40using OpenSim.Region.Framework.Interfaces; 41using OpenSim.Region.Framework.Interfaces;
41using OpenSim.Region.Framework.Scenes; 42using OpenSim.Region.Framework.Scenes;
43using OpenSim.Services.Interfaces;
42using RegionFlags = OpenMetaverse.RegionFlags; 44using RegionFlags = OpenMetaverse.RegionFlags;
43 45
44namespace OpenSim.Region.CoreModules.World.Estate 46namespace OpenSim.Region.CoreModules.World.Estate
@@ -48,6 +50,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
48 { 50 {
49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50 52
53 private Timer m_regionChangeTimer = new Timer();
51 public Scene Scene { get; private set; } 54 public Scene Scene { get; private set; }
52 public IUserManagement UserManager { get; private set; } 55 public IUserManagement UserManager { get; private set; }
53 56
@@ -112,13 +115,287 @@ namespace OpenSim.Region.CoreModules.World.Estate
112 115
113 #endregion 116 #endregion
114 117
118 #region IEstateModule Functions
119 public uint GetRegionFlags()
120 {
121 RegionFlags flags = RegionFlags.None;
122
123 // Fully implemented
124 //
125 if (Scene.RegionInfo.RegionSettings.AllowDamage)
126 flags |= RegionFlags.AllowDamage;
127 if (Scene.RegionInfo.RegionSettings.BlockTerraform)
128 flags |= RegionFlags.BlockTerraform;
129 if (!Scene.RegionInfo.RegionSettings.AllowLandResell)
130 flags |= RegionFlags.BlockLandResell;
131 if (Scene.RegionInfo.RegionSettings.DisableCollisions)
132 flags |= RegionFlags.SkipCollisions;
133 if (Scene.RegionInfo.RegionSettings.DisableScripts)
134 flags |= RegionFlags.SkipScripts;
135 if (Scene.RegionInfo.RegionSettings.DisablePhysics)
136 flags |= RegionFlags.SkipPhysics;
137 if (Scene.RegionInfo.RegionSettings.BlockFly)
138 flags |= RegionFlags.NoFly;
139 if (Scene.RegionInfo.RegionSettings.RestrictPushing)
140 flags |= RegionFlags.RestrictPushObject;
141 if (Scene.RegionInfo.RegionSettings.AllowLandJoinDivide)
142 flags |= RegionFlags.AllowParcelChanges;
143 if (Scene.RegionInfo.RegionSettings.BlockShowInSearch)
144 flags |= RegionFlags.BlockParcelSearch;
145
146 if (Scene.RegionInfo.RegionSettings.FixedSun)
147 flags |= RegionFlags.SunFixed;
148 if (Scene.RegionInfo.RegionSettings.Sandbox)
149 flags |= RegionFlags.Sandbox;
150 if (Scene.RegionInfo.EstateSettings.AllowVoice)
151 flags |= RegionFlags.AllowVoice;
152 if (Scene.RegionInfo.EstateSettings.AllowLandmark)
153 flags |= RegionFlags.AllowLandmark;
154 if (Scene.RegionInfo.EstateSettings.AllowSetHome)
155 flags |= RegionFlags.AllowSetHome;
156 if (Scene.RegionInfo.EstateSettings.BlockDwell)
157 flags |= RegionFlags.BlockDwell;
158 if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport)
159 flags |= RegionFlags.ResetHomeOnTeleport;
160
161
162 // TODO: SkipUpdateInterestList
163
164 // Omitted
165 //
166 // Omitted: NullLayer (what is that?)
167 // Omitted: SkipAgentAction (what does it do?)
168
169 return (uint)flags;
170 }
171
172 public bool IsManager(UUID avatarID)
173 {
174 if (avatarID == Scene.RegionInfo.EstateSettings.EstateOwner)
175 return true;
176
177 List<UUID> ems = new List<UUID>(Scene.RegionInfo.EstateSettings.EstateManagers);
178 if (ems.Contains(avatarID))
179 return true;
180
181 return false;
182 }
183
184 public void sendRegionHandshakeToAll()
185 {
186 Scene.ForEachClient(sendRegionHandshake);
187 }
188
189 public void TriggerEstateInfoChange()
190 {
191 ChangeDelegate change = OnEstateInfoChange;
192
193 if (change != null)
194 change(Scene.RegionInfo.RegionID);
195 }
196
197 public void TriggerRegionInfoChange()
198 {
199 m_regionChangeTimer.Stop();
200 m_regionChangeTimer.Start();
201
202 ChangeDelegate change = OnRegionInfoChange;
203
204 if (change != null)
205 change(Scene.RegionInfo.RegionID);
206 }
207
208 public void setEstateTerrainBaseTexture(int level, UUID texture)
209 {
210 setEstateTerrainBaseTexture(null, level, texture);
211 sendRegionHandshakeToAll();
212 }
213
214 public void setEstateTerrainTextureHeights(int corner, float lowValue, float highValue)
215 {
216 setEstateTerrainTextureHeights(null, corner, lowValue, highValue);
217 }
218
219 public bool IsTerrainXfer(ulong xferID)
220 {
221 lock (this)
222 {
223 if (TerrainUploader == null)
224 return false;
225 else
226 return TerrainUploader.XferID == xferID;
227 }
228 }
229
230 public string SetEstateOwner(int estateID, UserAccount account)
231 {
232 string response;
233
234 // get the current settings from DB
235 EstateSettings dbSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
236 if (dbSettings.EstateID == 0)
237 {
238 response = String.Format("No estate found with ID {0}", estateID);
239 }
240 else if (account.PrincipalID == dbSettings.EstateOwner)
241 {
242 response = String.Format("Estate already belongs to {0} ({1} {2})", account.PrincipalID, account.FirstName, account.LastName);
243 }
244 else
245 {
246 dbSettings.EstateOwner = account.PrincipalID;
247 Scene.EstateDataService.StoreEstateSettings(dbSettings);
248 response = String.Empty;
249
250 // make sure there's a log entry to document the change
251 m_log.InfoFormat("[ESTATE]: Estate Owner for {0} changed to {1} ({2} {3})", dbSettings.EstateName,
252 account.PrincipalID, account.FirstName, account.LastName);
253
254 // propagate the change
255 List<UUID> regions = Scene.GetEstateRegions(estateID);
256 UUID regionId = (regions.Count() > 0) ? regions.ElementAt(0) : UUID.Zero;
257 if (regionId != UUID.Zero)
258 {
259 ChangeDelegate change = OnEstateInfoChange;
260
261 if (change != null)
262 change(regionId);
263 }
264
265 }
266 return response;
267 }
268
269 public string SetEstateName(int estateID, string newName)
270 {
271 string response;
272
273 // get the current settings from DB
274 EstateSettings dbSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
275
276 if (dbSettings.EstateID == 0)
277 {
278 response = String.Format("No estate found with ID {0}", estateID);
279 }
280 else if (newName == dbSettings.EstateName)
281 {
282 response = String.Format("Estate {0} is already named \"{1}\"", estateID, newName);
283 }
284 else
285 {
286 List<int> estates = Scene.EstateDataService.GetEstates(newName);
287 if (estates.Count() > 0)
288 {
289 response = String.Format("An estate named \"{0}\" already exists.", newName);
290 }
291 else
292 {
293 string oldName = dbSettings.EstateName;
294 dbSettings.EstateName = newName;
295 Scene.EstateDataService.StoreEstateSettings(dbSettings);
296 response = String.Empty;
297
298 // make sure there's a log entry to document the change
299 m_log.InfoFormat("[ESTATE]: Estate {0} renamed from \"{1}\" to \"{2}\"", estateID, oldName, newName);
300
301 // propagate the change
302 List<UUID> regions = Scene.GetEstateRegions(estateID);
303 UUID regionId = (regions.Count() > 0) ? regions.ElementAt(0) : UUID.Zero;
304 if (regionId != UUID.Zero)
305 {
306 ChangeDelegate change = OnEstateInfoChange;
307
308 if (change != null)
309 change(regionId);
310 }
311 }
312 }
313 return response;
314 }
315
316 public string SetRegionEstate(RegionInfo regionInfo, int estateID)
317 {
318 string response;
319
320 if (regionInfo.EstateSettings.EstateID == estateID)
321 {
322 response = String.Format("\"{0}\" is already part of estate {1}", regionInfo.RegionName, estateID);
323 }
324 else
325 {
326 // get the current settings from DB
327 EstateSettings dbSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
328 if (dbSettings.EstateID == 0)
329 {
330 response = String.Format("No estate found with ID {0}", estateID);
331 }
332 else if (Scene.EstateDataService.LinkRegion(regionInfo.RegionID, estateID))
333 {
334 // make sure there's a log entry to document the change
335 m_log.InfoFormat("[ESTATE]: Region {0} ({1}) moved to Estate {2} ({3}).", regionInfo.RegionID, regionInfo.RegionName, estateID, dbSettings.EstateName);
336
337 // propagate the change
338 ChangeDelegate change = OnEstateInfoChange;
339
340 if (change != null)
341 change(regionInfo.RegionID);
342
343 response = String.Empty;
344 }
345 else
346 {
347 response = String.Format("Could not move \"{0}\" to estate {1}", regionInfo.RegionName, estateID);
348 }
349 }
350 return response;
351 }
352
353 public string CreateEstate(string estateName, UUID ownerID)
354 {
355 string response;
356 if (string.IsNullOrEmpty(estateName))
357 {
358 response = "No estate name specified.";
359 }
360 else
361 {
362 List<int> estates = Scene.EstateDataService.GetEstates(estateName);
363 if (estates.Count() > 0)
364 {
365 response = String.Format("An estate named \"{0}\" already exists.", estateName);
366 }
367 else
368 {
369 EstateSettings settings = Scene.EstateDataService.CreateNewEstate();
370 if (settings == null)
371 response = String.Format("Unable to create estate \"{0}\" at this simulator", estateName);
372 else
373 {
374 settings.EstateOwner = ownerID;
375 settings.EstateName = estateName;
376 Scene.EstateDataService.StoreEstateSettings(settings);
377 response = String.Empty;
378 }
379 }
380 }
381 return response;
382 }
383
384 #endregion
385
115 #region Packet Data Responders 386 #region Packet Data Responders
116 387
388 private void clientSendDetailedEstateData(IClientAPI remote_client, UUID invoice)
389 {
390 sendDetailedEstateData(remote_client, invoice);
391 sendEstateLists(remote_client, invoice);
392 }
393
117 private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) 394 private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice)
118 { 395 {
119 uint sun = 0; 396 uint sun = 0;
120 397
121 if (!Scene.RegionInfo.EstateSettings.UseGlobalTime) 398 if (Scene.RegionInfo.EstateSettings.FixedSun)
122 sun = (uint)(Scene.RegionInfo.EstateSettings.SunPosition * 1024.0) + 0x1800; 399 sun = (uint)(Scene.RegionInfo.EstateSettings.SunPosition * 1024.0) + 0x1800;
123 UUID estateOwner; 400 UUID estateOwner;
124 estateOwner = Scene.RegionInfo.EstateSettings.EstateOwner; 401 estateOwner = Scene.RegionInfo.EstateSettings.EstateOwner;
@@ -136,7 +413,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
136 (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, 413 (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime,
137 Scene.RegionInfo.EstateSettings.AbuseEmail, 414 Scene.RegionInfo.EstateSettings.AbuseEmail,
138 estateOwner); 415 estateOwner);
416 }
139 417
418 private void sendEstateLists(IClientAPI remote_client, UUID invoice)
419 {
140 remote_client.SendEstateList(invoice, 420 remote_client.SendEstateList(invoice,
141 (int)Constants.EstateAccessCodex.EstateManagers, 421 (int)Constants.EstateAccessCodex.EstateManagers,
142 Scene.RegionInfo.EstateSettings.EstateManagers, 422 Scene.RegionInfo.EstateSettings.EstateManagers,
@@ -210,12 +490,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
210 sendRegionInfoPacketToAll(); 490 sendRegionInfoPacketToAll();
211 } 491 }
212 492
213 public void setEstateTerrainBaseTexture(int level, UUID texture)
214 {
215 setEstateTerrainBaseTexture(null, level, texture);
216 sendRegionHandshakeToAll();
217 }
218
219 public void setEstateTerrainBaseTexture(IClientAPI remoteClient, int level, UUID texture) 493 public void setEstateTerrainBaseTexture(IClientAPI remoteClient, int level, UUID texture)
220 { 494 {
221 if (texture == UUID.Zero) 495 if (texture == UUID.Zero)
@@ -242,11 +516,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
242 sendRegionInfoPacketToAll(); 516 sendRegionInfoPacketToAll();
243 } 517 }
244 518
245 public void setEstateTerrainTextureHeights(int corner, float lowValue, float highValue)
246 {
247 setEstateTerrainTextureHeights(null, corner, lowValue, highValue);
248 }
249
250 public void setEstateTerrainTextureHeights(IClientAPI client, int corner, float lowValue, float highValue) 519 public void setEstateTerrainTextureHeights(IClientAPI client, int corner, float lowValue, float highValue)
251 { 520 {
252 switch (corner) 521 switch (corner)
@@ -330,7 +599,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
330 timeInSeconds -= 15; 599 timeInSeconds -= 15;
331 } 600 }
332 601
333 restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), true); 602 restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), false);
334 603
335 m_log.InfoFormat( 604 m_log.InfoFormat(
336 "User {0} requested restart of region {1} in {2} seconds", 605 "User {0} requested restart of region {1} in {2} seconds",
@@ -372,13 +641,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
372 { 641 {
373 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 642 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
374 estateSettings.AddEstateUser(user); 643 estateSettings.AddEstateUser(user);
375 estateSettings.Save(); 644 Scene.EstateDataService.StoreEstateSettings(estateSettings);
376 } 645 }
377 } 646 }
378 } 647 }
379 648
380 Scene.RegionInfo.EstateSettings.AddEstateUser(user); 649 Scene.RegionInfo.EstateSettings.AddEstateUser(user);
381 Scene.RegionInfo.EstateSettings.Save(); 650 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
382 651
383 TriggerEstateInfoChange(); 652 TriggerEstateInfoChange();
384 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID); 653 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID);
@@ -405,13 +674,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
405 { 674 {
406 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 675 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
407 estateSettings.RemoveEstateUser(user); 676 estateSettings.RemoveEstateUser(user);
408 estateSettings.Save(); 677 Scene.EstateDataService.StoreEstateSettings(estateSettings);
409 } 678 }
410 } 679 }
411 } 680 }
412 681
413 Scene.RegionInfo.EstateSettings.RemoveEstateUser(user); 682 Scene.RegionInfo.EstateSettings.RemoveEstateUser(user);
414 Scene.RegionInfo.EstateSettings.Save(); 683 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
415 684
416 TriggerEstateInfoChange(); 685 TriggerEstateInfoChange();
417 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID); 686 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID);
@@ -437,13 +706,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
437 { 706 {
438 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 707 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
439 estateSettings.AddEstateGroup(user); 708 estateSettings.AddEstateGroup(user);
440 estateSettings.Save(); 709 Scene.EstateDataService.StoreEstateSettings(estateSettings);
441 } 710 }
442 } 711 }
443 } 712 }
444 713
445 Scene.RegionInfo.EstateSettings.AddEstateGroup(user); 714 Scene.RegionInfo.EstateSettings.AddEstateGroup(user);
446 Scene.RegionInfo.EstateSettings.Save(); 715 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
447 716
448 TriggerEstateInfoChange(); 717 TriggerEstateInfoChange();
449 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID); 718 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID);
@@ -469,13 +738,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
469 { 738 {
470 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 739 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
471 estateSettings.RemoveEstateGroup(user); 740 estateSettings.RemoveEstateGroup(user);
472 estateSettings.Save(); 741 Scene.EstateDataService.StoreEstateSettings(estateSettings);
473 } 742 }
474 } 743 }
475 } 744 }
476 745
477 Scene.RegionInfo.EstateSettings.RemoveEstateGroup(user); 746 Scene.RegionInfo.EstateSettings.RemoveEstateGroup(user);
478 Scene.RegionInfo.EstateSettings.Save(); 747 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
479 748
480 TriggerEstateInfoChange(); 749 TriggerEstateInfoChange();
481 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID); 750 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID);
@@ -524,7 +793,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
524 793
525 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 794 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
526 estateSettings.AddBan(bitem); 795 estateSettings.AddBan(bitem);
527 estateSettings.Save(); 796 Scene.EstateDataService.StoreEstateSettings(estateSettings);
528 } 797 }
529 } 798 }
530 } 799 }
@@ -537,7 +806,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
537 item.BannedHostIPMask = "0.0.0.0"; 806 item.BannedHostIPMask = "0.0.0.0";
538 807
539 Scene.RegionInfo.EstateSettings.AddBan(item); 808 Scene.RegionInfo.EstateSettings.AddBan(item);
540 Scene.RegionInfo.EstateSettings.Save(); 809 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
541 810
542 TriggerEstateInfoChange(); 811 TriggerEstateInfoChange();
543 812
@@ -546,7 +815,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
546 { 815 {
547 if (!s.IsChildAgent) 816 if (!s.IsChildAgent)
548 { 817 {
549 Scene.TeleportClientHome(user, s.ControllingClient); 818 if (!Scene.TeleportClientHome(user, s.ControllingClient))
819 {
820 s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out.");
821 Scene.CloseAgent(s.UUID, false);
822 }
550 } 823 }
551 } 824 }
552 825
@@ -555,7 +828,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
555 { 828 {
556 remote_client.SendAlertMessage("User is already on the region ban list"); 829 remote_client.SendAlertMessage("User is already on the region ban list");
557 } 830 }
558 //m_scene.RegionInfo.regionBanlist.Add(Manager(user); 831 //Scene.RegionInfo.regionBanlist.Add(Manager(user);
559 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); 832 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID);
560 } 833 }
561 else 834 else
@@ -596,13 +869,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
596 { 869 {
597 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 870 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
598 estateSettings.RemoveBan(user); 871 estateSettings.RemoveBan(user);
599 estateSettings.Save(); 872 Scene.EstateDataService.StoreEstateSettings(estateSettings);
600 } 873 }
601 } 874 }
602 } 875 }
603 876
604 Scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); 877 Scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID);
605 Scene.RegionInfo.EstateSettings.Save(); 878 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
606 879
607 TriggerEstateInfoChange(); 880 TriggerEstateInfoChange();
608 } 881 }
@@ -611,7 +884,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
611 remote_client.SendAlertMessage("User is not on the region ban list"); 884 remote_client.SendAlertMessage("User is not on the region ban list");
612 } 885 }
613 886
614 //m_scene.RegionInfo.regionBanlist.Add(Manager(user); 887 //Scene.RegionInfo.regionBanlist.Add(Manager(user);
615 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); 888 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID);
616 } 889 }
617 else 890 else
@@ -635,13 +908,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
635 { 908 {
636 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 909 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
637 estateSettings.AddEstateManager(user); 910 estateSettings.AddEstateManager(user);
638 estateSettings.Save(); 911 Scene.EstateDataService.StoreEstateSettings(estateSettings);
639 } 912 }
640 } 913 }
641 } 914 }
642 915
643 Scene.RegionInfo.EstateSettings.AddEstateManager(user); 916 Scene.RegionInfo.EstateSettings.AddEstateManager(user);
644 Scene.RegionInfo.EstateSettings.Save(); 917 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
645 918
646 TriggerEstateInfoChange(); 919 TriggerEstateInfoChange();
647 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID); 920 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID);
@@ -667,13 +940,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
667 { 940 {
668 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 941 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
669 estateSettings.RemoveEstateManager(user); 942 estateSettings.RemoveEstateManager(user);
670 estateSettings.Save(); 943 Scene.EstateDataService.StoreEstateSettings(estateSettings);
671 } 944 }
672 } 945 }
673 } 946 }
674 947
675 Scene.RegionInfo.EstateSettings.RemoveEstateManager(user); 948 Scene.RegionInfo.EstateSettings.RemoveEstateManager(user);
676 Scene.RegionInfo.EstateSettings.Save(); 949 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
677 950
678 TriggerEstateInfoChange(); 951 TriggerEstateInfoChange();
679 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID); 952 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID);
@@ -685,7 +958,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
685 } 958 }
686 } 959 }
687 960
688 public void handleOnEstateManageTelehub(IClientAPI client, UUID invoice, UUID senderID, string cmd, uint param1) 961 public void HandleOnEstateManageTelehub(IClientAPI client, UUID invoice, UUID senderID, string cmd, uint param1)
689 { 962 {
690 SceneObjectPart part; 963 SceneObjectPart part;
691 964
@@ -725,7 +998,9 @@ namespace OpenSim.Region.CoreModules.World.Estate
725 default: 998 default:
726 break; 999 break;
727 } 1000 }
728 SendTelehubInfo(client); 1001
1002 if (client != null)
1003 SendTelehubInfo(client);
729 } 1004 }
730 1005
731 private void SendSimulatorBlueBoxMessage( 1006 private void SendSimulatorBlueBoxMessage(
@@ -777,7 +1052,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
777 ScenePresence s = Scene.GetScenePresence(prey); 1052 ScenePresence s = Scene.GetScenePresence(prey);
778 if (s != null) 1053 if (s != null)
779 { 1054 {
780 Scene.TeleportClientHome(prey, s.ControllingClient); 1055 if (!Scene.TeleportClientHome(prey, s.ControllingClient))
1056 {
1057 s.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out.");
1058 Scene.CloseAgent(s.UUID, false);
1059 }
781 } 1060 }
782 } 1061 }
783 } 1062 }
@@ -795,33 +1074,36 @@ namespace OpenSim.Region.CoreModules.World.Estate
795 // Also make sure they are actually in the region 1074 // Also make sure they are actually in the region
796 ScenePresence p; 1075 ScenePresence p;
797 if(Scene.TryGetScenePresence(client.AgentId, out p)) 1076 if(Scene.TryGetScenePresence(client.AgentId, out p))
798 Scene.TeleportClientHome(p.UUID, p.ControllingClient); 1077 {
1078 if (!Scene.TeleportClientHome(p.UUID, p.ControllingClient))
1079 {
1080 p.ControllingClient.Kick("You were teleported home by the region owner, but the TP failed - you have been logged out.");
1081 Scene.CloseAgent(p.UUID, false);
1082 }
1083 }
799 } 1084 }
800 }); 1085 });
801 } 1086 }
802 1087
803 private void AbortTerrainXferHandler(IClientAPI remoteClient, ulong XferID) 1088 private void AbortTerrainXferHandler(IClientAPI remoteClient, ulong XferID)
804 { 1089 {
805 if (TerrainUploader != null) 1090 lock (this)
806 { 1091 {
807 lock (TerrainUploader) 1092 if ((TerrainUploader != null) && (XferID == TerrainUploader.XferID))
808 { 1093 {
809 if (XferID == TerrainUploader.XferID) 1094 remoteClient.OnXferReceive -= TerrainUploader.XferReceive;
810 { 1095 remoteClient.OnAbortXfer -= AbortTerrainXferHandler;
811 remoteClient.OnXferReceive -= TerrainUploader.XferReceive; 1096 TerrainUploader.TerrainUploadDone -= HandleTerrainApplication;
812 remoteClient.OnAbortXfer -= AbortTerrainXferHandler;
813 TerrainUploader.TerrainUploadDone -= HandleTerrainApplication;
814 1097
815 TerrainUploader = null; 1098 TerrainUploader = null;
816 remoteClient.SendAlertMessage("Terrain Upload aborted by the client"); 1099 remoteClient.SendAlertMessage("Terrain Upload aborted by the client");
817 }
818 } 1100 }
819 } 1101 }
820
821 } 1102 }
1103
822 private void HandleTerrainApplication(string filename, byte[] terrainData, IClientAPI remoteClient) 1104 private void HandleTerrainApplication(string filename, byte[] terrainData, IClientAPI remoteClient)
823 { 1105 {
824 lock (TerrainUploader) 1106 lock (this)
825 { 1107 {
826 remoteClient.OnXferReceive -= TerrainUploader.XferReceive; 1108 remoteClient.OnXferReceive -= TerrainUploader.XferReceive;
827 remoteClient.OnAbortXfer -= AbortTerrainXferHandler; 1109 remoteClient.OnAbortXfer -= AbortTerrainXferHandler;
@@ -829,18 +1111,18 @@ namespace OpenSim.Region.CoreModules.World.Estate
829 1111
830 TerrainUploader = null; 1112 TerrainUploader = null;
831 } 1113 }
1114
1115 m_log.DebugFormat("[CLIENT]: Terrain upload from {0} to {1} complete.", remoteClient.Name, Scene.Name);
832 remoteClient.SendAlertMessage("Terrain Upload Complete. Loading...."); 1116 remoteClient.SendAlertMessage("Terrain Upload Complete. Loading....");
1117
833 ITerrainModule terr = Scene.RequestModuleInterface<ITerrainModule>(); 1118 ITerrainModule terr = Scene.RequestModuleInterface<ITerrainModule>();
834 1119
835 if (terr != null) 1120 if (terr != null)
836 { 1121 {
837 m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + Scene.RegionInfo.RegionName);
838
839 try 1122 try
840 { 1123 {
841 MemoryStream terrainStream = new MemoryStream(terrainData); 1124 using (MemoryStream terrainStream = new MemoryStream(terrainData))
842 terr.LoadFromStream(filename, terrainStream); 1125 terr.LoadFromStream(filename, terrainStream);
843 terrainStream.Close();
844 1126
845 FileInfo x = new FileInfo(filename); 1127 FileInfo x = new FileInfo(filename);
846 remoteClient.SendAlertMessage("Your terrain was loaded as a " + x.Extension + " file. It may take a few moments to appear."); 1128 remoteClient.SendAlertMessage("Your terrain was loaded as a " + x.Extension + " file. It may take a few moments to appear.");
@@ -880,25 +1162,27 @@ namespace OpenSim.Region.CoreModules.World.Estate
880 1162
881 private void handleUploadTerrain(IClientAPI remote_client, string clientFileName) 1163 private void handleUploadTerrain(IClientAPI remote_client, string clientFileName)
882 { 1164 {
883 if (TerrainUploader == null) 1165 lock (this)
884 { 1166 {
885 1167 if (TerrainUploader == null)
886 TerrainUploader = new EstateTerrainXferHandler(remote_client, clientFileName);
887 lock (TerrainUploader)
888 { 1168 {
1169 m_log.DebugFormat(
1170 "[TERRAIN]: Started receiving terrain upload for region {0} from {1}",
1171 Scene.Name, remote_client.Name);
1172
1173 TerrainUploader = new EstateTerrainXferHandler(remote_client, clientFileName);
889 remote_client.OnXferReceive += TerrainUploader.XferReceive; 1174 remote_client.OnXferReceive += TerrainUploader.XferReceive;
890 remote_client.OnAbortXfer += AbortTerrainXferHandler; 1175 remote_client.OnAbortXfer += AbortTerrainXferHandler;
891 TerrainUploader.TerrainUploadDone += HandleTerrainApplication; 1176 TerrainUploader.TerrainUploadDone += HandleTerrainApplication;
1177 TerrainUploader.RequestStartXfer(remote_client);
1178 }
1179 else
1180 {
1181 remote_client.SendAlertMessage("Another Terrain Upload is in progress. Please wait your turn!");
892 } 1182 }
893 TerrainUploader.RequestStartXfer(remote_client);
894
895 }
896 else
897 {
898 remote_client.SendAlertMessage("Another Terrain Upload is in progress. Please wait your turn!");
899 } 1183 }
900 } 1184 }
901 1185
902 private void handleTerrainRequest(IClientAPI remote_client, string clientFileName) 1186 private void handleTerrainRequest(IClientAPI remote_client, string clientFileName)
903 { 1187 {
904 // Save terrain here 1188 // Save terrain here
@@ -906,7 +1190,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
906 1190
907 if (terr != null) 1191 if (terr != null)
908 { 1192 {
909 m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + Scene.RegionInfo.RegionName); 1193// m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + Scene.RegionInfo.RegionName);
910 if (File.Exists(Util.dataDir() + "/terrain.raw")) 1194 if (File.Exists(Util.dataDir() + "/terrain.raw"))
911 { 1195 {
912 File.Delete(Util.dataDir() + "/terrain.raw"); 1196 File.Delete(Util.dataDir() + "/terrain.raw");
@@ -918,8 +1202,9 @@ namespace OpenSim.Region.CoreModules.World.Estate
918 input.Read(bdata, 0, (int)input.Length); 1202 input.Read(bdata, 0, (int)input.Length);
919 remote_client.SendAlertMessage("Terrain file written, starting download..."); 1203 remote_client.SendAlertMessage("Terrain file written, starting download...");
920 Scene.XferManager.AddNewFile("terrain.raw", bdata); 1204 Scene.XferManager.AddNewFile("terrain.raw", bdata);
921 // Tell client about it 1205
922 m_log.Warn("[CLIENT]: Sending Terrain to " + remote_client.Name); 1206 m_log.DebugFormat("[CLIENT]: Sending terrain for region {0} to {1}", Scene.Name, remote_client.Name);
1207
923 remote_client.SendInitiateDownload("terrain.raw", clientFileName); 1208 remote_client.SendInitiateDownload("terrain.raw", clientFileName);
924 } 1209 }
925 } 1210 }
@@ -1080,11 +1365,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
1080 remoteClient.SendRegionHandshake(Scene.RegionInfo,args); 1365 remoteClient.SendRegionHandshake(Scene.RegionInfo,args);
1081 } 1366 }
1082 1367
1083 public void sendRegionHandshakeToAll()
1084 {
1085 Scene.ForEachClient(sendRegionHandshake);
1086 }
1087
1088 public void handleEstateChangeInfo(IClientAPI remoteClient, UUID invoice, UUID senderID, UInt32 parms1, UInt32 parms2) 1368 public void handleEstateChangeInfo(IClientAPI remoteClient, UUID invoice, UUID senderID, UInt32 parms1, UInt32 parms2)
1089 { 1369 {
1090 if (parms2 == 0) 1370 if (parms2 == 0)
@@ -1096,6 +1376,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1096 { 1376 {
1097 Scene.RegionInfo.EstateSettings.UseGlobalTime = false; 1377 Scene.RegionInfo.EstateSettings.UseGlobalTime = false;
1098 Scene.RegionInfo.EstateSettings.SunPosition = (parms2 - 0x1800)/1024.0; 1378 Scene.RegionInfo.EstateSettings.SunPosition = (parms2 - 0x1800)/1024.0;
1379 // Warning: FixedSun should be set to True, otherwise this sun position won't be used.
1099 } 1380 }
1100 1381
1101 if ((parms1 & 0x00000010) != 0) 1382 if ((parms1 & 0x00000010) != 0)
@@ -1138,7 +1419,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1138 else 1419 else
1139 Scene.RegionInfo.EstateSettings.DenyMinors = false; 1420 Scene.RegionInfo.EstateSettings.DenyMinors = false;
1140 1421
1141 Scene.RegionInfo.EstateSettings.Save(); 1422 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
1142 TriggerEstateInfoChange(); 1423 TriggerEstateInfoChange();
1143 1424
1144 Scene.TriggerEstateSunUpdate(); 1425 Scene.TriggerEstateSunUpdate();
@@ -1165,11 +1446,12 @@ namespace OpenSim.Region.CoreModules.World.Estate
1165 sendRegionInfoPacketToAll(); 1446 sendRegionInfoPacketToAll();
1166 } 1447 }
1167 1448
1168 #endregion 1449
1450 #endregion
1169 1451
1170 private void EventManager_OnNewClient(IClientAPI client) 1452 private void EventManager_OnNewClient(IClientAPI client)
1171 { 1453 {
1172 client.OnDetailedEstateDataRequest += sendDetailedEstateData; 1454 client.OnDetailedEstateDataRequest += clientSendDetailedEstateData;
1173 client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler; 1455 client.OnSetEstateFlagsRequest += estateSetRegionInfoHandler;
1174// client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture; 1456// client.OnSetEstateTerrainBaseTexture += setEstateTerrainBaseTexture;
1175 client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture; 1457 client.OnSetEstateTerrainDetailTexture += setEstateTerrainBaseTexture;
@@ -1179,7 +1461,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1179 client.OnEstateRestartSimRequest += handleEstateRestartSimRequest; 1461 client.OnEstateRestartSimRequest += handleEstateRestartSimRequest;
1180 client.OnEstateChangeCovenantRequest += handleChangeEstateCovenantRequest; 1462 client.OnEstateChangeCovenantRequest += handleChangeEstateCovenantRequest;
1181 client.OnEstateChangeInfo += handleEstateChangeInfo; 1463 client.OnEstateChangeInfo += handleEstateChangeInfo;
1182 client.OnEstateManageTelehub += handleOnEstateManageTelehub; 1464 client.OnEstateManageTelehub += HandleOnEstateManageTelehub;
1183 client.OnUpdateEstateAccessDeltaRequest += handleEstateAccessDeltaRequest; 1465 client.OnUpdateEstateAccessDeltaRequest += handleEstateAccessDeltaRequest;
1184 client.OnSimulatorBlueBoxMessageRequest += SendSimulatorBlueBoxMessage; 1466 client.OnSimulatorBlueBoxMessageRequest += SendSimulatorBlueBoxMessage;
1185 client.OnEstateBlueBoxMessageRequest += SendEstateBlueBoxMessage; 1467 client.OnEstateBlueBoxMessageRequest += SendEstateBlueBoxMessage;
@@ -1195,56 +1477,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1195 sendRegionHandshake(client); 1477 sendRegionHandshake(client);
1196 } 1478 }
1197 1479
1198 public uint GetRegionFlags() 1480 private uint GetEstateFlags()
1199 {
1200 RegionFlags flags = RegionFlags.None;
1201
1202 // Fully implemented
1203 //
1204 if (Scene.RegionInfo.RegionSettings.AllowDamage)
1205 flags |= RegionFlags.AllowDamage;
1206 if (Scene.RegionInfo.RegionSettings.BlockTerraform)
1207 flags |= RegionFlags.BlockTerraform;
1208 if (!Scene.RegionInfo.RegionSettings.AllowLandResell)
1209 flags |= RegionFlags.BlockLandResell;
1210 if (Scene.RegionInfo.RegionSettings.DisableCollisions)
1211 flags |= RegionFlags.SkipCollisions;
1212 if (Scene.RegionInfo.RegionSettings.DisableScripts)
1213 flags |= RegionFlags.SkipScripts;
1214 if (Scene.RegionInfo.RegionSettings.DisablePhysics)
1215 flags |= RegionFlags.SkipPhysics;
1216 if (Scene.RegionInfo.RegionSettings.BlockFly)
1217 flags |= RegionFlags.NoFly;
1218 if (Scene.RegionInfo.RegionSettings.RestrictPushing)
1219 flags |= RegionFlags.RestrictPushObject;
1220 if (Scene.RegionInfo.RegionSettings.AllowLandJoinDivide)
1221 flags |= RegionFlags.AllowParcelChanges;
1222 if (Scene.RegionInfo.RegionSettings.BlockShowInSearch)
1223 flags |= RegionFlags.BlockParcelSearch;
1224
1225 if (Scene.RegionInfo.RegionSettings.FixedSun)
1226 flags |= RegionFlags.SunFixed;
1227 if (Scene.RegionInfo.RegionSettings.Sandbox)
1228 flags |= RegionFlags.Sandbox;
1229 if (Scene.RegionInfo.EstateSettings.AllowVoice)
1230 flags |= RegionFlags.AllowVoice;
1231
1232 // Fudge these to always on, so the menu options activate
1233 //
1234 flags |= RegionFlags.AllowLandmark;
1235 flags |= RegionFlags.AllowSetHome;
1236
1237 // TODO: SkipUpdateInterestList
1238
1239 // Omitted
1240 //
1241 // Omitted: NullLayer (what is that?)
1242 // Omitted: SkipAgentAction (what does it do?)
1243
1244 return (uint)flags;
1245 }
1246
1247 public uint GetEstateFlags()
1248 { 1481 {
1249 RegionFlags flags = RegionFlags.None; 1482 RegionFlags flags = RegionFlags.None;
1250 1483
@@ -1273,40 +1506,18 @@ namespace OpenSim.Region.CoreModules.World.Estate
1273 flags |= RegionFlags.ResetHomeOnTeleport; 1506 flags |= RegionFlags.ResetHomeOnTeleport;
1274 if (Scene.RegionInfo.EstateSettings.TaxFree) 1507 if (Scene.RegionInfo.EstateSettings.TaxFree)
1275 flags |= RegionFlags.TaxFree; 1508 flags |= RegionFlags.TaxFree;
1509 if (Scene.RegionInfo.EstateSettings.AllowLandmark)
1510 flags |= RegionFlags.AllowLandmark;
1511 if (Scene.RegionInfo.EstateSettings.AllowParcelChanges)
1512 flags |= RegionFlags.AllowParcelChanges;
1513 if (Scene.RegionInfo.EstateSettings.AllowSetHome)
1514 flags |= RegionFlags.AllowSetHome;
1276 if (Scene.RegionInfo.EstateSettings.DenyMinors) 1515 if (Scene.RegionInfo.EstateSettings.DenyMinors)
1277 flags |= (RegionFlags)(1 << 30); 1516 flags |= (RegionFlags)(1 << 30);
1278 1517
1279 return (uint)flags; 1518 return (uint)flags;
1280 } 1519 }
1281 1520
1282 public bool IsManager(UUID avatarID)
1283 {
1284 if (avatarID == Scene.RegionInfo.EstateSettings.EstateOwner)
1285 return true;
1286
1287 List<UUID> ems = new List<UUID>(Scene.RegionInfo.EstateSettings.EstateManagers);
1288 if (ems.Contains(avatarID))
1289 return true;
1290
1291 return false;
1292 }
1293
1294 public void TriggerRegionInfoChange()
1295 {
1296 ChangeDelegate change = OnRegionInfoChange;
1297
1298 if (change != null)
1299 change(Scene.RegionInfo.RegionID);
1300 }
1301
1302 public void TriggerEstateInfoChange()
1303 {
1304 ChangeDelegate change = OnEstateInfoChange;
1305
1306 if (change != null)
1307 change(Scene.RegionInfo.RegionID);
1308 }
1309
1310 public void TriggerEstateMessage(UUID fromID, string fromName, string message) 1521 public void TriggerEstateMessage(UUID fromID, string fromName, string message)
1311 { 1522 {
1312 MessageDelegate onmessage = OnEstateMessage; 1523 MessageDelegate onmessage = OnEstateMessage;