aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
diff options
context:
space:
mode:
authoronefang2019-05-19 21:24:15 +1000
committeronefang2019-05-19 21:24:15 +1000
commit5e4d6cab00cb29cd088ab7b62ab13aff103b64cb (patch)
treea9fbc62df9eb2d1d9ba2698d8552eae71eca20d8 /OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
parentAdd a build script. (diff)
downloadopensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.zip
opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.gz
opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.bz2
opensim-SC_OLD-5e4d6cab00cb29cd088ab7b62ab13aff103b64cb.tar.xz
Dump OpenSim 0.9.0.1 into it's own branch.
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs648
1 files changed, 412 insertions, 236 deletions
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index 80fa08a..3c45b68 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -33,15 +33,19 @@ using System.Linq;
33using System.Reflection; 33using System.Reflection;
34using System.Security; 34using System.Security;
35using System.Timers; 35using System.Timers;
36using System.Threading;
36using log4net; 37using log4net;
37using Mono.Addins; 38using Mono.Addins;
38using Nini.Config; 39using Nini.Config;
39using OpenMetaverse; 40using OpenMetaverse;
40using OpenSim.Framework; 41using OpenSim.Framework;
42using OpenSim.Framework.Monitoring;
41using OpenSim.Region.Framework.Interfaces; 43using OpenSim.Region.Framework.Interfaces;
42using OpenSim.Region.Framework.Scenes; 44using OpenSim.Region.Framework.Scenes;
43using OpenSim.Services.Interfaces; 45using OpenSim.Services.Interfaces;
44using RegionFlags = OpenMetaverse.RegionFlags; 46using RegionFlags = OpenMetaverse.RegionFlags;
47using Timer = System.Timers.Timer;
48
45 49
46namespace OpenSim.Region.CoreModules.World.Estate 50namespace OpenSim.Region.CoreModules.World.Estate
47{ 51{
@@ -53,8 +57,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
53 private Timer m_regionChangeTimer = new Timer(); 57 private Timer m_regionChangeTimer = new Timer();
54 public Scene Scene { get; private set; } 58 public Scene Scene { get; private set; }
55 public IUserManagement UserManager { get; private set; } 59 public IUserManagement UserManager { get; private set; }
56 60
57 protected EstateManagementCommands m_commands; 61 protected EstateManagementCommands m_commands;
58 62
59 /// <summary> 63 /// <summary>
60 /// If false, region restart requests from the client are blocked even if they are otherwise legitimate. 64 /// If false, region restart requests from the client are blocked even if they are otherwise legitimate.
@@ -67,14 +71,18 @@ namespace OpenSim.Region.CoreModules.World.Estate
67 public event ChangeDelegate OnRegionInfoChange; 71 public event ChangeDelegate OnRegionInfoChange;
68 public event ChangeDelegate OnEstateInfoChange; 72 public event ChangeDelegate OnEstateInfoChange;
69 public event MessageDelegate OnEstateMessage; 73 public event MessageDelegate OnEstateMessage;
74 public event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest;
75 public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest;
76
77 private int m_delayCount = 0;
70 78
71 #region Region Module interface 79 #region Region Module interface
72 80
73 public string Name { get { return "EstateManagementModule"; } } 81 public string Name { get { return "EstateManagementModule"; } }
74
75 public Type ReplaceableInterface { get { return null; } }
76 82
77 public void Initialise(IConfigSource source) 83 public Type ReplaceableInterface { get { return null; } }
84
85 public void Initialise(IConfigSource source)
78 { 86 {
79 AllowRegionRestartFromClient = true; 87 AllowRegionRestartFromClient = true;
80 88
@@ -83,7 +91,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
83 if (config != null) 91 if (config != null)
84 AllowRegionRestartFromClient = config.GetBoolean("AllowRegionRestartFromClient", true); 92 AllowRegionRestartFromClient = config.GetBoolean("AllowRegionRestartFromClient", true);
85 } 93 }
86 94
87 public void AddRegion(Scene scene) 95 public void AddRegion(Scene scene)
88 { 96 {
89 Scene = scene; 97 Scene = scene;
@@ -95,20 +103,24 @@ namespace OpenSim.Region.CoreModules.World.Estate
95 103
96 m_commands = new EstateManagementCommands(this); 104 m_commands = new EstateManagementCommands(this);
97 m_commands.Initialise(); 105 m_commands.Initialise();
106
107 m_regionChangeTimer.Interval = 10000;
108 m_regionChangeTimer.Elapsed += RaiseRegionInfoChange;
109 m_regionChangeTimer.AutoReset = false;
98 } 110 }
99 111
100 public void RemoveRegion(Scene scene) {} 112 public void RemoveRegion(Scene scene) {}
101 113
102 public void RegionLoaded(Scene scene) 114 public void RegionLoaded(Scene scene)
103 { 115 {
104 // Sets up the sun module based no the saved Estate and Region Settings 116 // Sets up the sun module based no the saved Estate and Region Settings
105 // DO NOT REMOVE or the sun will stop working 117 // DO NOT REMOVE or the sun will stop working
106 scene.TriggerEstateSunUpdate(); 118 scene.TriggerEstateSunUpdate();
107 119
108 UserManager = scene.RequestModuleInterface<IUserManagement>(); 120 UserManager = scene.RequestModuleInterface<IUserManagement>();
109 } 121 }
110 122
111 public void Close() 123 public void Close()
112 { 124 {
113 m_commands.Close(); 125 m_commands.Close();
114 } 126 }
@@ -142,6 +154,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
142 flags |= RegionFlags.AllowParcelChanges; 154 flags |= RegionFlags.AllowParcelChanges;
143 if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) 155 if (Scene.RegionInfo.RegionSettings.BlockShowInSearch)
144 flags |= RegionFlags.BlockParcelSearch; 156 flags |= RegionFlags.BlockParcelSearch;
157 if (Scene.RegionInfo.RegionSettings.GodBlockSearch)
158 flags |= (RegionFlags)(1 << 11);
159 if (Scene.RegionInfo.RegionSettings.Casino)
160 flags |= (RegionFlags)(1 << 10);
145 161
146 if (Scene.RegionInfo.RegionSettings.FixedSun) 162 if (Scene.RegionInfo.RegionSettings.FixedSun)
147 flags |= RegionFlags.SunFixed; 163 flags |= RegionFlags.SunFixed;
@@ -194,6 +210,14 @@ namespace OpenSim.Region.CoreModules.World.Estate
194 change(Scene.RegionInfo.RegionID); 210 change(Scene.RegionInfo.RegionID);
195 } 211 }
196 212
213 protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e)
214 {
215 ChangeDelegate change = OnRegionInfoChange;
216
217 if (change != null)
218 change(Scene.RegionInfo.RegionID);
219 }
220
197 public void TriggerRegionInfoChange() 221 public void TriggerRegionInfoChange()
198 { 222 {
199 m_regionChangeTimer.Stop(); 223 m_regionChangeTimer.Stop();
@@ -423,7 +447,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
423 Scene.RegionInfo.EstateSettings.EstateID); 447 Scene.RegionInfo.EstateSettings.EstateID);
424 448
425 remote_client.SendEstateList(invoice, 449 remote_client.SendEstateList(invoice,
426 (int)Constants.EstateAccessCodex.AccessOptions, 450 (int)Constants.EstateAccessCodex.AllowedAccess,
427 Scene.RegionInfo.EstateSettings.EstateAccess, 451 Scene.RegionInfo.EstateSettings.EstateAccess,
428 Scene.RegionInfo.EstateSettings.EstateID); 452 Scene.RegionInfo.EstateSettings.EstateID);
429 453
@@ -462,7 +486,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
462 486
463 if((byte)maxAgents <= Scene.RegionInfo.AgentCapacity) 487 if((byte)maxAgents <= Scene.RegionInfo.AgentCapacity)
464 Scene.RegionInfo.RegionSettings.AgentLimit = (byte) maxAgents; 488 Scene.RegionInfo.RegionSettings.AgentLimit = (byte) maxAgents;
465 else 489 else
466 Scene.RegionInfo.RegionSettings.AgentLimit = Scene.RegionInfo.AgentCapacity; 490 Scene.RegionInfo.RegionSettings.AgentLimit = Scene.RegionInfo.AgentCapacity;
467 491
468 Scene.RegionInfo.RegionSettings.ObjectBonus = objectBonusFactor; 492 Scene.RegionInfo.RegionSettings.ObjectBonus = objectBonusFactor;
@@ -554,6 +578,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
554 bool UseEstateSun, bool UseFixedSun, float SunHour, 578 bool UseEstateSun, bool UseFixedSun, float SunHour,
555 bool UseGlobal, bool EstateFixedSun, float EstateSunHour) 579 bool UseGlobal, bool EstateFixedSun, float EstateSunHour)
556 { 580 {
581 double lastwaterlevel = Scene.RegionInfo.RegionSettings.WaterHeight;
557 // Water Height 582 // Water Height
558 Scene.RegionInfo.RegionSettings.WaterHeight = WaterHeight; 583 Scene.RegionInfo.RegionSettings.WaterHeight = WaterHeight;
559 584
@@ -566,6 +591,9 @@ namespace OpenSim.Region.CoreModules.World.Estate
566 Scene.RegionInfo.RegionSettings.FixedSun = UseFixedSun; 591 Scene.RegionInfo.RegionSettings.FixedSun = UseFixedSun;
567 Scene.RegionInfo.RegionSettings.SunPosition = SunHour; 592 Scene.RegionInfo.RegionSettings.SunPosition = SunHour;
568 593
594 if(Scene.PhysicsEnabled && Scene.PhysicsScene != null && lastwaterlevel != WaterHeight)
595 Scene.PhysicsScene.SetWaterLevel(WaterHeight);
596
569 Scene.TriggerEstateSunUpdate(); 597 Scene.TriggerEstateSunUpdate();
570 598
571 //m_log.Debug("[ESTATE]: UFS: " + UseFixedSun.ToString()); 599 //m_log.Debug("[ESTATE]: UFS: " + UseFixedSun.ToString());
@@ -587,6 +615,16 @@ namespace OpenSim.Region.CoreModules.World.Estate
587 IRestartModule restartModule = Scene.RequestModuleInterface<IRestartModule>(); 615 IRestartModule restartModule = Scene.RequestModuleInterface<IRestartModule>();
588 if (restartModule != null) 616 if (restartModule != null)
589 { 617 {
618 if (timeInSeconds == -1)
619 {
620 m_delayCount++;
621 if (m_delayCount > 3)
622 return;
623
624 restartModule.DelayRestart(3600, "Restart delayed by region manager");
625 return;
626 }
627
590 List<int> times = new List<int>(); 628 List<int> times = new List<int>();
591 while (timeInSeconds > 0) 629 while (timeInSeconds > 0)
592 { 630 {
@@ -602,7 +640,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
602 restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), false); 640 restartModule.ScheduleRestart(UUID.Zero, "Region will restart in {0}", times.ToArray(), false);
603 641
604 m_log.InfoFormat( 642 m_log.InfoFormat(
605 "User {0} requested restart of region {1} in {2} seconds", 643 "User {0} requested restart of region {1} in {2} seconds",
606 remoteClient.Name, Scene.Name, times.Count != 0 ? times[0] : 0); 644 remoteClient.Name, Scene.Name, times.Count != 0 ? times[0] : 0);
607 } 645 }
608 } 646 }
@@ -610,236 +648,363 @@ namespace OpenSim.Region.CoreModules.World.Estate
610 private void handleChangeEstateCovenantRequest(IClientAPI remoteClient, UUID estateCovenantID) 648 private void handleChangeEstateCovenantRequest(IClientAPI remoteClient, UUID estateCovenantID)
611 { 649 {
612// m_log.DebugFormat( 650// m_log.DebugFormat(
613// "[ESTATE MANAGEMENT MODULE]: Handling request from {0} to change estate covenant to {1}", 651// "[ESTATE MANAGEMENT MODULE]: Handling request from {0} to change estate covenant to {1}",
614// remoteClient.Name, estateCovenantID); 652// remoteClient.Name, estateCovenantID);
615 653
616 Scene.RegionInfo.RegionSettings.Covenant = estateCovenantID; 654 Scene.RegionInfo.RegionSettings.Covenant = estateCovenantID;
617 Scene.RegionInfo.RegionSettings.CovenantChangedDateTime = Util.UnixTimeSinceEpoch(); 655 Scene.RegionInfo.RegionSettings.CovenantChangedDateTime = Util.UnixTimeSinceEpoch();
618 Scene.RegionInfo.RegionSettings.Save(); 656 Scene.RegionInfo.RegionSettings.Save();
619 TriggerRegionInfoChange(); 657 TriggerRegionInfoChange();
620 } 658 }
621 659
622 private void handleEstateAccessDeltaRequest(IClientAPI remote_client, UUID invoice, int estateAccessType, UUID user) 660 private object deltareqLock = new object();
661 private bool runnigDeltaExec = false;
662
663 private class EstateAccessDeltaRequest
664 {
665 public IClientAPI remote_client;
666 public UUID invoice;
667 public int estateAccessType;
668 public UUID user;
669 }
670
671 private OpenSim.Framework.BlockingQueue<EstateAccessDeltaRequest> deltaRequests = new OpenSim.Framework.BlockingQueue<EstateAccessDeltaRequest>();
672
673 private void handleEstateAccessDeltaRequest(IClientAPI _remote_client, UUID _invoice, int _estateAccessType, UUID _user)
623 { 674 {
624 // EstateAccessDelta handles Estate Managers, Sim Access, Sim Banlist, allowed Groups.. etc. 675 // EstateAccessDelta handles Estate Managers, Sim Access, Sim Banlist, allowed Groups.. etc.
625 676
626 if (user == Scene.RegionInfo.EstateSettings.EstateOwner) 677 if (_user == Scene.RegionInfo.EstateSettings.EstateOwner)
627 return; // never process EO 678 return; // never process EO
628 679
629 if ((estateAccessType & 4) != 0) // User add 680 EstateAccessDeltaRequest newreq = new EstateAccessDeltaRequest();
681 newreq.remote_client = _remote_client;
682 newreq.invoice = _invoice;
683 newreq.estateAccessType = _estateAccessType;
684 newreq.user = _user;
685
686 deltaRequests.Enqueue(newreq);
687
688 lock(deltareqLock)
630 { 689 {
631 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true)) 690 if(!runnigDeltaExec)
632 { 691 {
633 if ((estateAccessType & 1) != 0) // All estates 692 runnigDeltaExec = true;
693 WorkManager.RunInThreadPool(execDeltaRequests,null,"execDeltaRequests");
694 }
695 }
696 }
697
698 private void execDeltaRequests(object o)
699 {
700 IClientAPI remote_client;
701 UUID invoice;
702 int estateAccessType;
703 UUID user;
704 Dictionary<int,EstateSettings> changed = new Dictionary<int,EstateSettings>();
705 Dictionary<IClientAPI,UUID> sendAllowedOrBanList = new Dictionary<IClientAPI,UUID>();
706 Dictionary<IClientAPI,UUID> sendManagers = new Dictionary<IClientAPI,UUID>();
707 Dictionary<IClientAPI,UUID> sendGroups = new Dictionary<IClientAPI,UUID>();
708
709 List<EstateSettings> otherEstates = new List<EstateSettings>();
710
711 bool sentAllowedFull = false;
712 bool sentBansFull = false;
713 bool sentGroupsFull = false;
714 bool sentManagersFull = false;
715
716 while(Scene.IsRunning)
717 {
718 EstateAccessDeltaRequest req = deltaRequests.Dequeue(500);
719
720 if(!Scene.IsRunning)
721 break;
722
723 if(req == null)
724 {
725 if(changed.Count > 0)
634 { 726 {
635 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner); 727 foreach(EstateSettings est in changed.Values)
636 EstateSettings estateSettings; 728 Scene.EstateDataService.StoreEstateSettings(est);
637 729
638 foreach (int estateID in estateIDs) 730 TriggerEstateInfoChange();
639 {
640 if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
641 {
642 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
643 estateSettings.AddEstateUser(user);
644 Scene.EstateDataService.StoreEstateSettings(estateSettings);
645 }
646 }
647 } 731 }
648 732
649 Scene.RegionInfo.EstateSettings.AddEstateUser(user); 733 EstateSettings es = Scene.RegionInfo.EstateSettings;
650 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 734 foreach(KeyValuePair<IClientAPI,UUID> kvp in sendAllowedOrBanList)
735 {
736 IClientAPI cli = kvp.Key;
737 UUID invoive = kvp.Value;
738 cli.SendEstateList(invoive, (int)Constants.EstateAccessCodex.AllowedAccess, es.EstateAccess, es.EstateID);
739 cli.SendBannedUserList(invoive, es.EstateBans, es.EstateID);
740 }
741 sendAllowedOrBanList.Clear();
651 742
652 TriggerEstateInfoChange(); 743 foreach(KeyValuePair<IClientAPI,UUID> kvp in sendManagers)
653 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID); 744 {
745 IClientAPI cli = kvp.Key;
746 cli.SendEstateList(kvp.Value, (int)Constants.EstateAccessCodex.EstateManagers, es.EstateManagers, es.EstateID);
747 }
748 foreach(KeyValuePair<IClientAPI,UUID> kvp in sendGroups)
749 {
750 IClientAPI cli = kvp.Key;
751 cli.SendEstateList(kvp.Value, (int)Constants.EstateAccessCodex.AllowedGroups, es.EstateGroups, es.EstateID);
752 }
753 otherEstates.Clear();
754 sendAllowedOrBanList.Clear();
755 sendManagers.Clear();
756 sendGroups.Clear();
757 changed.Clear();
758 lock(deltareqLock)
759 {
760 if(deltaRequests.Count() != 0)
761 continue;
762 runnigDeltaExec = false;
763 return;
764 }
654 } 765 }
655 else 766
767 remote_client = req.remote_client;
768 if(!remote_client.IsActive)
769 continue;
770
771 invoice = req.invoice;
772 user = req.user;
773
774 estateAccessType = req.estateAccessType;
775
776 bool needReply = ((estateAccessType & 1024) == 0);
777 bool doOtherEstates = ((estateAccessType & 3) != 0);
778
779 EstateSettings thisSettings = Scene.RegionInfo.EstateSettings;
780 int thisEstateID =(int)thisSettings.EstateID;
781
782 UUID agentID = remote_client.AgentId;
783
784 bool isadmin = Scene.Permissions.IsAdministrator(agentID);
785 // just i case recheck rights
786 if (!isadmin && !Scene.Permissions.IsEstateManager(agentID))
656 { 787 {
657 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); 788 remote_client.SendAlertMessage("Method EstateAccess Failed, you don't have permissions");
789 continue;
658 } 790 }
659 791
660 } 792 otherEstates.Clear();
661 793 if(doOtherEstates)
662 if ((estateAccessType & 8) != 0) // User remove
663 {
664 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
665 { 794 {
666 if ((estateAccessType & 1) != 0) // All estates 795 UUID thisOwner = Scene.RegionInfo.EstateSettings.EstateOwner;
796 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(thisOwner);
797 foreach (int estateID in estateIDs)
667 { 798 {
668 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner); 799 if (estateID == thisEstateID)
800 continue;
801
669 EstateSettings estateSettings; 802 EstateSettings estateSettings;
803 if(changed.ContainsKey(estateID))
804 estateSettings = changed[estateID];
805 else
806 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
807
808 if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
809 continue;
810 otherEstates.Add(estateSettings);
811 }
812 estateIDs.Clear();
813 }
670 814
671 foreach (int estateID in estateIDs) 815 // the commands
816 // first the ones allowed for estate managers on this region
817 if ((estateAccessType & 4) != 0) // User add
818 {
819 if(thisSettings.EstateUsersCount() >= (int)Constants.EstateAccessLimits.AllowedAccess)
820 {
821 if(!sentAllowedFull)
672 { 822 {
673 if (estateID != Scene.RegionInfo.EstateSettings.EstateID) 823 sentAllowedFull = true;
824 remote_client.SendAlertMessage("Estate Allowed users list is full");
825 }
826 }
827 else
828 {
829 if (doOtherEstates)
830 {
831 foreach (EstateSettings estateSettings in otherEstates)
674 { 832 {
675 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 833 if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
676 estateSettings.RemoveEstateUser(user); 834 continue;
677 Scene.EstateDataService.StoreEstateSettings(estateSettings); 835 if(estateSettings.EstateUsersCount() >= (int)Constants.EstateAccessLimits.AllowedAccess)
836 continue;
837 estateSettings.AddEstateUser(user);
838 estateSettings.RemoveBan(user);
839 changed[(int)estateSettings.EstateID] = estateSettings;
678 } 840 }
679 } 841 }
680 }
681 842
682 Scene.RegionInfo.EstateSettings.RemoveEstateUser(user); 843 thisSettings.AddEstateUser(user);
683 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 844 thisSettings.RemoveBan(user);
845 changed[thisEstateID] = thisSettings;;
684 846
685 TriggerEstateInfoChange(); 847 if(needReply)
686 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID); 848 sendAllowedOrBanList[remote_client] = invoice;
849 }
687 } 850 }
688 else 851
852 if ((estateAccessType & 8) != 0) // User remove
689 { 853 {
690 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); 854 if (doOtherEstates) // All estates
855 {
856 foreach (EstateSettings estateSettings in otherEstates)
857 {
858 if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
859 continue;
860 estateSettings.RemoveEstateUser(user);
861 changed[(int)estateSettings.EstateID] = estateSettings;
862 }
863 }
864
865 thisSettings.RemoveEstateUser(user);
866 changed[thisEstateID] = thisSettings;;
867
868 if(needReply)
869 sendAllowedOrBanList[remote_client] = invoice;
691 } 870 }
692 }
693 871
694 if ((estateAccessType & 16) != 0) // Group add 872 if ((estateAccessType & 16) != 0) // Group add
695 {
696 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
697 { 873 {
698 if ((estateAccessType & 1) != 0) // All estates 874 if(thisSettings.EstateGroupsCount() >= (int)Constants.EstateAccessLimits.AllowedGroups)
699 { 875 {
700 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner); 876 if(!sentGroupsFull)
701 EstateSettings estateSettings; 877 {
702 878 sentGroupsFull = true;
703 foreach (int estateID in estateIDs) 879 remote_client.SendAlertMessage("Estate Allowed groups list is full");
880 }
881 }
882 else
883 {
884 if (doOtherEstates) // All estates
704 { 885 {
705 if (estateID != Scene.RegionInfo.EstateSettings.EstateID) 886 foreach (EstateSettings estateSettings in otherEstates)
706 { 887 {
707 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 888 if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
889 continue;
890 if(estateSettings.EstateGroupsCount() >= (int)Constants.EstateAccessLimits.AllowedGroups)
891 continue;
708 estateSettings.AddEstateGroup(user); 892 estateSettings.AddEstateGroup(user);
709 Scene.EstateDataService.StoreEstateSettings(estateSettings); 893 changed[(int)estateSettings.EstateID] = estateSettings;
710 } 894 }
711 } 895 }
712 }
713 896
714 Scene.RegionInfo.EstateSettings.AddEstateGroup(user); 897 thisSettings.AddEstateGroup(user);
715 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 898 changed[thisEstateID] = thisSettings;
716 899
717 TriggerEstateInfoChange(); 900 sendGroups[remote_client] = invoice;
718 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID); 901 }
719 }
720 else
721 {
722 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
723 } 902 }
724 }
725 903
726 if ((estateAccessType & 32) != 0) // Group remove 904 if ((estateAccessType & 32) != 0) // Group remove
727 {
728 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
729 { 905 {
730 if ((estateAccessType & 1) != 0) // All estates 906 if (doOtherEstates) // All estates
731 { 907 {
732 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner); 908 foreach (EstateSettings estateSettings in otherEstates)
733 EstateSettings estateSettings;
734
735 foreach (int estateID in estateIDs)
736 { 909 {
737 if (estateID != Scene.RegionInfo.EstateSettings.EstateID) 910 if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
738 { 911 continue;
739 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 912 estateSettings.RemoveEstateGroup(user);
740 estateSettings.RemoveEstateGroup(user); 913 changed[(int)estateSettings.EstateID] = estateSettings;
741 Scene.EstateDataService.StoreEstateSettings(estateSettings);
742 }
743 } 914 }
744 } 915 }
745 916
746 Scene.RegionInfo.EstateSettings.RemoveEstateGroup(user); 917 thisSettings.RemoveEstateGroup(user);
747 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 918 changed[thisEstateID] = thisSettings;
748 919
749 TriggerEstateInfoChange(); 920 sendGroups[remote_client] = invoice;
750 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID);
751 } 921 }
752 else
753 {
754 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
755 }
756 }
757 922
758 if ((estateAccessType & 64) != 0) // Ban add 923 if ((estateAccessType & 64) != 0) // Ban add
759 {
760 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false))
761 { 924 {
762 EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans;
763 925
764 bool alreadyInList = false; 926 if(thisSettings.EstateBansCount() >= (int)Constants.EstateAccessLimits.EstateBans)
765
766 for (int i = 0; i < banlistcheck.Length; i++)
767 { 927 {
768 if (user == banlistcheck[i].BannedUserID) 928 if(!sentBansFull)
769 { 929 {
770 alreadyInList = true; 930 sentBansFull = true;
771 break; 931 remote_client.SendAlertMessage("Estate Ban list is full");
772 } 932 }
773
774 } 933 }
775 if (!alreadyInList) 934 else
776 { 935 {
936 EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans;
777 937
778 if ((estateAccessType & 1) != 0) // All estates 938 bool alreadyInList = false;
779 {
780 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
781 EstateSettings estateSettings;
782 939
783 foreach (int estateID in estateIDs) 940 for (int i = 0; i < banlistcheck.Length; i++)
941 {
942 if (user == banlistcheck[i].BannedUserID)
943 {
944 alreadyInList = true;
945 break;
946 }
947 }
948 if (!alreadyInList)
949 {
950 if (doOtherEstates) // All estates
784 { 951 {
785 if (estateID != Scene.RegionInfo.EstateSettings.EstateID) 952 foreach (EstateSettings estateSettings in otherEstates)
786 { 953 {
954 if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
955 continue;
956
957 if(estateSettings.EstateBansCount() >= (int)Constants.EstateAccessLimits.EstateBans)
958 continue;
959
787 EstateBan bitem = new EstateBan(); 960 EstateBan bitem = new EstateBan();
788 961
789 bitem.BannedUserID = user; 962 bitem.BannedUserID = user;
790 bitem.EstateID = (uint)estateID; 963 bitem.EstateID = estateSettings.EstateID;
791 bitem.BannedHostAddress = "0.0.0.0"; 964 bitem.BannedHostAddress = "0.0.0.0";
792 bitem.BannedHostIPMask = "0.0.0.0"; 965 bitem.BannedHostIPMask = "0.0.0.0";
793 966
794 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
795 estateSettings.AddBan(bitem); 967 estateSettings.AddBan(bitem);
796 Scene.EstateDataService.StoreEstateSettings(estateSettings); 968 estateSettings.RemoveEstateUser(user);
969 changed[(int)estateSettings.EstateID] = estateSettings;
797 } 970 }
798 } 971 }
799 }
800 972
801 EstateBan item = new EstateBan(); 973 EstateBan item = new EstateBan();
802 974
803 item.BannedUserID = user; 975 item.BannedUserID = user;
804 item.EstateID = Scene.RegionInfo.EstateSettings.EstateID; 976 item.EstateID = Scene.RegionInfo.EstateSettings.EstateID;
805 item.BannedHostAddress = "0.0.0.0"; 977 item.BannedHostAddress = "0.0.0.0";
806 item.BannedHostIPMask = "0.0.0.0"; 978 item.BannedHostIPMask = "0.0.0.0";
807 979
808 Scene.RegionInfo.EstateSettings.AddBan(item); 980 thisSettings.AddBan(item);
809 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 981 thisSettings.RemoveEstateUser(user);
982 changed[thisEstateID] = thisSettings;
810 983
811 TriggerEstateInfoChange(); 984 ScenePresence s = Scene.GetScenePresence(user);
812 985 if (s != null)
813 ScenePresence s = Scene.GetScenePresence(user);
814 if (s != null)
815 {
816 if (!s.IsChildAgent)
817 { 986 {
818 if (!Scene.TeleportClientHome(user, s.ControllingClient)) 987 if (!s.IsChildAgent)
819 { 988 {
820 s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out."); 989 if (!Scene.TeleportClientHome(user, s.ControllingClient))
821 Scene.CloseAgent(s.UUID, false); 990 {
991 s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out.");
992 Scene.CloseAgent(s.UUID, false);
993 }
822 } 994 }
823 } 995 }
824 } 996 }
825 997 else
826 } 998 {
827 else 999 remote_client.SendAlertMessage("User is already on the region ban list");
828 { 1000 }
829 remote_client.SendAlertMessage("User is already on the region ban list"); 1001 //Scene.RegionInfo.regionBanlist.Add(Manager(user);
1002 if(needReply)
1003 sendAllowedOrBanList[remote_client] = invoice;
830 } 1004 }
831 //Scene.RegionInfo.regionBanlist.Add(Manager(user);
832 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID);
833 }
834 else
835 {
836 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
837 } 1005 }
838 }
839 1006
840 if ((estateAccessType & 128) != 0) // Ban remove 1007 if ((estateAccessType & 128) != 0) // Ban remove
841 {
842 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false))
843 { 1008 {
844 EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans; 1009 EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans;
845 1010
@@ -855,107 +1020,93 @@ namespace OpenSim.Region.CoreModules.World.Estate
855 break; 1020 break;
856 } 1021 }
857 } 1022 }
858 1023
859 if (alreadyInList && listitem != null) 1024 if (alreadyInList && listitem != null)
860 { 1025 {
861 if ((estateAccessType & 1) != 0) // All estates 1026 if (doOtherEstates) // All estates
862 { 1027 {
863 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner); 1028 foreach (EstateSettings estateSettings in otherEstates)
864 EstateSettings estateSettings;
865
866 foreach (int estateID in estateIDs)
867 { 1029 {
868 if (estateID != Scene.RegionInfo.EstateSettings.EstateID) 1030 if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
869 { 1031 continue;
870 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 1032 estateSettings.RemoveBan(user);
871 estateSettings.RemoveBan(user); 1033 changed[(int)estateSettings.EstateID] = estateSettings;
872 Scene.EstateDataService.StoreEstateSettings(estateSettings);
873 }
874 } 1034 }
875 } 1035 }
876 1036
877 Scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); 1037 thisSettings.RemoveBan(listitem.BannedUserID);
878 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 1038 changed[thisEstateID] = thisSettings;
879
880 TriggerEstateInfoChange();
881 } 1039 }
882 else 1040 else
883 { 1041 {
884 remote_client.SendAlertMessage("User is not on the region ban list"); 1042 remote_client.SendAlertMessage("User is not on the region ban list");
885 } 1043 }
886 1044
887 //Scene.RegionInfo.regionBanlist.Add(Manager(user); 1045 if(needReply)
888 remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); 1046 sendAllowedOrBanList[remote_client] = invoice;
889 } 1047 }
890 else 1048
1049 // last the ones only for owners of this region
1050 if (!Scene.Permissions.CanIssueEstateCommand(agentID, true))
891 { 1051 {
892 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); 1052 remote_client.SendAlertMessage("Method EstateAccess Failed, you don't have permissions");
1053 continue;
893 } 1054 }
894 }
895 1055
896 if ((estateAccessType & 256) != 0) // Manager add 1056 if ((estateAccessType & 256) != 0) // Manager add
897 {
898 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
899 { 1057 {
900 if ((estateAccessType & 1) != 0) // All estates 1058 if(thisSettings.EstateManagersCount() >= (int)Constants.EstateAccessLimits.EstateManagers)
901 { 1059 {
902 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner); 1060 if(!sentManagersFull)
903 EstateSettings estateSettings; 1061 {
904 1062 sentManagersFull = true;
905 foreach (int estateID in estateIDs) 1063 remote_client.SendAlertMessage("Estate Managers list is full");
1064 }
1065 }
1066 else
1067 {
1068 if (doOtherEstates) // All estates
906 { 1069 {
907 if (estateID != Scene.RegionInfo.EstateSettings.EstateID) 1070 foreach (EstateSettings estateSettings in otherEstates)
908 { 1071 {
909 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 1072 if(!isadmin && !estateSettings.IsEstateOwner(agentID)) // redundante check?
1073 continue;
1074 if(estateSettings.EstateManagersCount() >= (int)Constants.EstateAccessLimits.EstateManagers)
1075 continue;
910 estateSettings.AddEstateManager(user); 1076 estateSettings.AddEstateManager(user);
911 Scene.EstateDataService.StoreEstateSettings(estateSettings); 1077 changed[(int)estateSettings.EstateID] = estateSettings;
912 } 1078 }
913 } 1079 }
914 }
915 1080
916 Scene.RegionInfo.EstateSettings.AddEstateManager(user); 1081 thisSettings.AddEstateManager(user);
917 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 1082 changed[thisEstateID] = thisSettings;
918 1083
919 TriggerEstateInfoChange(); 1084 sendManagers[remote_client] = invoice;
920 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID); 1085 }
921 }
922 else
923 {
924 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
925 } 1086 }
926 }
927 1087
928 if ((estateAccessType & 512) != 0) // Manager remove 1088 if ((estateAccessType & 512) != 0) // Manager remove
929 {
930 if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
931 { 1089 {
932 if ((estateAccessType & 1) != 0) // All estates 1090 if (doOtherEstates) // All estates
933 { 1091 {
934 List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner); 1092 foreach (EstateSettings estateSettings in otherEstates)
935 EstateSettings estateSettings;
936
937 foreach (int estateID in estateIDs)
938 { 1093 {
939 if (estateID != Scene.RegionInfo.EstateSettings.EstateID) 1094 if(!isadmin && !estateSettings.IsEstateOwner(agentID))
940 { 1095 continue;
941 estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID); 1096
942 estateSettings.RemoveEstateManager(user); 1097 estateSettings.RemoveEstateManager(user);
943 Scene.EstateDataService.StoreEstateSettings(estateSettings); 1098 changed[(int)estateSettings.EstateID] = estateSettings;
944 }
945 } 1099 }
946 } 1100 }
947 1101
948 Scene.RegionInfo.EstateSettings.RemoveEstateManager(user); 1102 thisSettings.RemoveEstateManager(user);
949 Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings); 1103 changed[thisEstateID] = thisSettings;
950 1104
951 TriggerEstateInfoChange(); 1105 sendManagers[remote_client] = invoice;
952 remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID);
953 }
954 else
955 {
956 remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
957 } 1106 }
958 } 1107 }
1108 lock(deltareqLock)
1109 runnigDeltaExec = false;
959 } 1110 }
960 1111
961 public void HandleOnEstateManageTelehub(IClientAPI client, UUID invoice, UUID senderID, string cmd, uint param1) 1112 public void HandleOnEstateManageTelehub(IClientAPI client, UUID invoice, UUID senderID, string cmd, uint param1)
@@ -1007,7 +1158,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1007 IClientAPI remote_client, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message) 1158 IClientAPI remote_client, UUID invoice, UUID senderID, UUID sessionID, string senderName, string message)
1008 { 1159 {
1009 IDialogModule dm = Scene.RequestModuleInterface<IDialogModule>(); 1160 IDialogModule dm = Scene.RequestModuleInterface<IDialogModule>();
1010 1161
1011 if (dm != null) 1162 if (dm != null)
1012 dm.SendNotificationToUsersInRegion(senderID, senderName, message); 1163 dm.SendNotificationToUsersInRegion(senderID, senderName, message);
1013 } 1164 }
@@ -1044,13 +1195,20 @@ namespace OpenSim.Region.CoreModules.World.Estate
1044 1195
1045 private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID, UUID prey) 1196 private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID, UUID prey)
1046 { 1197 {
1198 EstateTeleportOneUserHomeRequest evOverride = OnEstateTeleportOneUserHomeRequest;
1199 if(evOverride != null)
1200 {
1201 evOverride(remover_client, invoice, senderID, prey);
1202 return;
1203 }
1204
1047 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) 1205 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false))
1048 return; 1206 return;
1049 1207
1050 if (prey != UUID.Zero) 1208 if (prey != UUID.Zero)
1051 { 1209 {
1052 ScenePresence s = Scene.GetScenePresence(prey); 1210 ScenePresence s = Scene.GetScenePresence(prey);
1053 if (s != null) 1211 if (s != null && !s.IsDeleted && !s.IsInTransit)
1054 { 1212 {
1055 if (!Scene.TeleportClientHome(prey, s.ControllingClient)) 1213 if (!Scene.TeleportClientHome(prey, s.ControllingClient))
1056 { 1214 {
@@ -1063,6 +1221,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
1063 1221
1064 private void handleEstateTeleportAllUsersHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID) 1222 private void handleEstateTeleportAllUsersHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID)
1065 { 1223 {
1224 EstateTeleportAllUsersHomeRequest evOverride = OnEstateTeleportAllUsersHomeRequest;
1225 if(evOverride != null)
1226 {
1227 evOverride(remover_client, invoice, senderID);
1228 return;
1229 }
1230
1066 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) 1231 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false))
1067 return; 1232 return;
1068 1233
@@ -1084,7 +1249,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1084 } 1249 }
1085 }); 1250 });
1086 } 1251 }
1087 1252
1088 private void AbortTerrainXferHandler(IClientAPI remoteClient, ulong XferID) 1253 private void AbortTerrainXferHandler(IClientAPI remoteClient, ulong XferID)
1089 { 1254 {
1090 lock (this) 1255 lock (this)
@@ -1167,7 +1332,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1167 if (TerrainUploader == null) 1332 if (TerrainUploader == null)
1168 { 1333 {
1169 m_log.DebugFormat( 1334 m_log.DebugFormat(
1170 "[TERRAIN]: Started receiving terrain upload for region {0} from {1}", 1335 "[TERRAIN]: Started receiving terrain upload for region {0} from {1}",
1171 Scene.Name, remote_client.Name); 1336 Scene.Name, remote_client.Name);
1172 1337
1173 TerrainUploader = new EstateTerrainXferHandler(remote_client, clientFileName); 1338 TerrainUploader = new EstateTerrainXferHandler(remote_client, clientFileName);
@@ -1187,7 +1352,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1187 { 1352 {
1188 // Save terrain here 1353 // Save terrain here
1189 ITerrainModule terr = Scene.RequestModuleInterface<ITerrainModule>(); 1354 ITerrainModule terr = Scene.RequestModuleInterface<ITerrainModule>();
1190 1355
1191 if (terr != null) 1356 if (terr != null)
1192 { 1357 {
1193// m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + Scene.RegionInfo.RegionName); 1358// m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + Scene.RegionInfo.RegionName);
@@ -1197,15 +1362,24 @@ namespace OpenSim.Region.CoreModules.World.Estate
1197 } 1362 }
1198 terr.SaveToFile(Util.dataDir() + "/terrain.raw"); 1363 terr.SaveToFile(Util.dataDir() + "/terrain.raw");
1199 1364
1200 FileStream input = new FileStream(Util.dataDir() + "/terrain.raw", FileMode.Open); 1365 byte[] bdata;
1201 byte[] bdata = new byte[input.Length]; 1366 using(FileStream input = new FileStream(Util.dataDir() + "/terrain.raw",FileMode.Open))
1202 input.Read(bdata, 0, (int)input.Length); 1367 {
1368 bdata = new byte[input.Length];
1369 input.Read(bdata, 0, (int)input.Length);
1370 }
1371 if(bdata == null || bdata.Length == 0)
1372 {
1373 remote_client.SendAlertMessage("Terrain error");
1374 return;
1375 }
1376
1203 remote_client.SendAlertMessage("Terrain file written, starting download..."); 1377 remote_client.SendAlertMessage("Terrain file written, starting download...");
1204 Scene.XferManager.AddNewFile("terrain.raw", bdata); 1378 string xfername = (UUID.Random()).ToString();
1379 Scene.XferManager.AddNewFile(xfername, bdata);
1205 1380
1206 m_log.DebugFormat("[CLIENT]: Sending terrain for region {0} to {1}", Scene.Name, remote_client.Name); 1381 m_log.DebugFormat("[CLIENT]: Sending terrain for region {0} to {1}", Scene.Name, remote_client.Name);
1207 1382 remote_client.SendInitiateDownload(xfername, clientFileName);
1208 remote_client.SendInitiateDownload("terrain.raw", clientFileName);
1209 } 1383 }
1210 } 1384 }
1211 1385
@@ -1319,7 +1493,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
1319 1493
1320 public void sendRegionInfoPacketToAll() 1494 public void sendRegionInfoPacketToAll()
1321 { 1495 {
1322 Scene.ForEachRootClient(delegate(IClientAPI client) 1496// Scene.ForEachRootClient(delegate(IClientAPI client)
1497 Scene.ForEachClient(delegate(IClientAPI client)
1323 { 1498 {
1324 HandleRegionInfoRequest(client); 1499 HandleRegionInfoRequest(client);
1325 }); 1500 });
@@ -1443,7 +1618,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
1443 Scene.RegionInfo.EstateSettings.FixedSun, 1618 Scene.RegionInfo.EstateSettings.FixedSun,
1444 (float)Scene.RegionInfo.EstateSettings.SunPosition); 1619 (float)Scene.RegionInfo.EstateSettings.SunPosition);
1445 1620
1446 sendRegionInfoPacketToAll(); 1621// sendRegionInfoPacketToAll(); already done by setRegionTerrainSettings
1447 } 1622 }
1448 1623
1449 1624
@@ -1477,7 +1652,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
1477 sendRegionHandshake(client); 1652 sendRegionHandshake(client);
1478 } 1653 }
1479 1654
1480 private uint GetEstateFlags() 1655
1656 public uint GetEstateFlags()
1481 { 1657 {
1482 RegionFlags flags = RegionFlags.None; 1658 RegionFlags flags = RegionFlags.None;
1483 1659