mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 18:55:58 +08:00
Merge branch 'master' into httptests
This commit is contained in:
@@ -33,15 +33,19 @@ using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Security;
|
||||
using System.Timers;
|
||||
using System.Threading;
|
||||
using log4net;
|
||||
using Mono.Addins;
|
||||
using Nini.Config;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Monitoring;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using RegionFlags = OpenMetaverse.RegionFlags;
|
||||
using Timer = System.Timers.Timer;
|
||||
|
||||
|
||||
namespace OpenSim.Region.CoreModules.World.Estate
|
||||
{
|
||||
@@ -441,7 +445,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||
Scene.RegionInfo.EstateSettings.EstateID);
|
||||
|
||||
remote_client.SendEstateList(invoice,
|
||||
(int)Constants.EstateAccessCodex.AccessOptions,
|
||||
(int)Constants.EstateAccessCodex.AllowedAccess,
|
||||
Scene.RegionInfo.EstateSettings.EstateAccess,
|
||||
Scene.RegionInfo.EstateSettings.EstateID);
|
||||
|
||||
@@ -651,227 +655,354 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||
TriggerRegionInfoChange();
|
||||
}
|
||||
|
||||
private void handleEstateAccessDeltaRequest(IClientAPI remote_client, UUID invoice, int estateAccessType, UUID user)
|
||||
private object deltareqLock = new object();
|
||||
private bool runnigDeltaExec = false;
|
||||
|
||||
private class EstateAccessDeltaRequest
|
||||
{
|
||||
public IClientAPI remote_client;
|
||||
public UUID invoice;
|
||||
public int estateAccessType;
|
||||
public UUID user;
|
||||
}
|
||||
|
||||
private OpenSim.Framework.BlockingQueue<EstateAccessDeltaRequest> deltaRequests = new OpenSim.Framework.BlockingQueue<EstateAccessDeltaRequest>();
|
||||
|
||||
private void handleEstateAccessDeltaRequest(IClientAPI _remote_client, UUID _invoice, int _estateAccessType, UUID _user)
|
||||
{
|
||||
// EstateAccessDelta handles Estate Managers, Sim Access, Sim Banlist, allowed Groups.. etc.
|
||||
|
||||
if (user == Scene.RegionInfo.EstateSettings.EstateOwner)
|
||||
if (_user == Scene.RegionInfo.EstateSettings.EstateOwner)
|
||||
return; // never process EO
|
||||
|
||||
if ((estateAccessType & 4) != 0) // User add
|
||||
EstateAccessDeltaRequest newreq = new EstateAccessDeltaRequest();
|
||||
newreq.remote_client = _remote_client;
|
||||
newreq.invoice = _invoice;
|
||||
newreq.estateAccessType = _estateAccessType;
|
||||
newreq.user = _user;
|
||||
|
||||
deltaRequests.Enqueue(newreq);
|
||||
|
||||
lock(deltareqLock)
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
|
||||
if(!runnigDeltaExec)
|
||||
{
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
{
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
estateSettings.AddEstateUser(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Scene.RegionInfo.EstateSettings.AddEstateUser(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ((estateAccessType & 8) != 0) // User remove
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
|
||||
{
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
{
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
estateSettings.RemoveEstateUser(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Scene.RegionInfo.EstateSettings.RemoveEstateUser(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
runnigDeltaExec = true;
|
||||
WorkManager.RunInThreadPool(execDeltaRequests,null,"execDeltaRequests");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void execDeltaRequests(object o)
|
||||
{
|
||||
IClientAPI remote_client;
|
||||
UUID invoice;
|
||||
int estateAccessType;
|
||||
UUID user;
|
||||
Dictionary<int,EstateSettings> changed = new Dictionary<int,EstateSettings>();
|
||||
Dictionary<IClientAPI,UUID> sendAllowedOrBanList = new Dictionary<IClientAPI,UUID>();
|
||||
Dictionary<IClientAPI,UUID> sendManagers = new Dictionary<IClientAPI,UUID>();
|
||||
Dictionary<IClientAPI,UUID> sendGroups = new Dictionary<IClientAPI,UUID>();
|
||||
|
||||
if ((estateAccessType & 16) != 0) // Group add
|
||||
List<EstateSettings> otherEstates = new List<EstateSettings>();
|
||||
|
||||
bool sentAllowedFull = false;
|
||||
bool sentBansFull = false;
|
||||
bool sentGroupsFull = false;
|
||||
bool sentManagersFull = false;
|
||||
|
||||
while(Scene.IsRunning)
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
|
||||
EstateAccessDeltaRequest req = deltaRequests.Dequeue(500);
|
||||
|
||||
if(!Scene.IsRunning)
|
||||
break;
|
||||
|
||||
if(req == null)
|
||||
{
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
if(changed.Count > 0)
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
{
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
estateSettings.AddEstateGroup(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Scene.RegionInfo.EstateSettings.AddEstateGroup(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 32) != 0) // Group remove
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
|
||||
{
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
{
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
estateSettings.RemoveEstateGroup(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Scene.RegionInfo.EstateSettings.RemoveEstateGroup(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 64) != 0) // Ban add
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false))
|
||||
{
|
||||
EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans;
|
||||
|
||||
bool alreadyInList = false;
|
||||
|
||||
for (int i = 0; i < banlistcheck.Length; i++)
|
||||
{
|
||||
if (user == banlistcheck[i].BannedUserID)
|
||||
{
|
||||
alreadyInList = true;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (!alreadyInList)
|
||||
{
|
||||
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
{
|
||||
EstateBan bitem = new EstateBan();
|
||||
|
||||
bitem.BannedUserID = user;
|
||||
bitem.EstateID = (uint)estateID;
|
||||
bitem.BannedHostAddress = "0.0.0.0";
|
||||
bitem.BannedHostIPMask = "0.0.0.0";
|
||||
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
estateSettings.AddBan(bitem);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EstateBan item = new EstateBan();
|
||||
|
||||
item.BannedUserID = user;
|
||||
item.EstateID = Scene.RegionInfo.EstateSettings.EstateID;
|
||||
item.BannedHostAddress = "0.0.0.0";
|
||||
item.BannedHostIPMask = "0.0.0.0";
|
||||
|
||||
Scene.RegionInfo.EstateSettings.AddBan(item);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
|
||||
foreach(EstateSettings est in changed.Values)
|
||||
Scene.EstateDataService.StoreEstateSettings(est);
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
}
|
||||
|
||||
EstateSettings es = Scene.RegionInfo.EstateSettings;
|
||||
foreach(KeyValuePair<IClientAPI,UUID> kvp in sendAllowedOrBanList)
|
||||
{
|
||||
IClientAPI cli = kvp.Key;
|
||||
UUID invoive = kvp.Value;
|
||||
cli.SendEstateList(invoive, (int)Constants.EstateAccessCodex.AllowedAccess, es.EstateAccess, es.EstateID);
|
||||
cli.SendBannedUserList(invoive, es.EstateBans, es.EstateID);
|
||||
}
|
||||
sendAllowedOrBanList.Clear();
|
||||
|
||||
ScenePresence s = Scene.GetScenePresence(user);
|
||||
if (s != null)
|
||||
foreach(KeyValuePair<IClientAPI,UUID> kvp in sendManagers)
|
||||
{
|
||||
IClientAPI cli = kvp.Key;
|
||||
cli.SendEstateList(kvp.Value, (int)Constants.EstateAccessCodex.EstateManagers, es.EstateManagers, es.EstateID);
|
||||
}
|
||||
foreach(KeyValuePair<IClientAPI,UUID> kvp in sendGroups)
|
||||
{
|
||||
IClientAPI cli = kvp.Key;
|
||||
cli.SendEstateList(kvp.Value, (int)Constants.EstateAccessCodex.AllowedGroups, es.EstateGroups, es.EstateID);
|
||||
}
|
||||
otherEstates.Clear();
|
||||
sendAllowedOrBanList.Clear();
|
||||
sendManagers.Clear();
|
||||
sendGroups.Clear();
|
||||
changed.Clear();
|
||||
lock(deltareqLock)
|
||||
{
|
||||
if(deltaRequests.Count() != 0)
|
||||
continue;
|
||||
runnigDeltaExec = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
remote_client = req.remote_client;
|
||||
if(!remote_client.IsActive)
|
||||
continue;
|
||||
|
||||
invoice = req.invoice;
|
||||
user = req.user;
|
||||
|
||||
estateAccessType = req.estateAccessType;
|
||||
|
||||
bool needReply = ((estateAccessType & 1024) == 0);
|
||||
bool doOtherEstates = ((estateAccessType & 3) != 0);
|
||||
|
||||
EstateSettings thisSettings = Scene.RegionInfo.EstateSettings;
|
||||
int thisEstateID =(int)thisSettings.EstateID;
|
||||
|
||||
UUID agentID = remote_client.AgentId;
|
||||
|
||||
bool isadmin = Scene.Permissions.IsAdministrator(agentID);
|
||||
// just i case recheck rights
|
||||
if (!isadmin && !Scene.Permissions.IsEstateManager(agentID))
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccess Failed, you don't have permissions");
|
||||
continue;
|
||||
}
|
||||
|
||||
otherEstates.Clear();
|
||||
if(doOtherEstates)
|
||||
{
|
||||
UUID thisOwner = Scene.RegionInfo.EstateSettings.EstateOwner;
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(thisOwner);
|
||||
foreach (int estateID in estateIDs)
|
||||
{
|
||||
if (estateID == thisEstateID)
|
||||
continue;
|
||||
|
||||
EstateSettings estateSettings;
|
||||
if(changed.ContainsKey(estateID))
|
||||
estateSettings = changed[estateID];
|
||||
else
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
|
||||
if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
|
||||
continue;
|
||||
otherEstates.Add(estateSettings);
|
||||
}
|
||||
estateIDs.Clear();
|
||||
}
|
||||
|
||||
// the commands
|
||||
// first the ones allowed for estate managers on this region
|
||||
if ((estateAccessType & 4) != 0) // User add
|
||||
{
|
||||
if(thisSettings.EstateUsersCount() >= (int)Constants.EstateAccessLimits.AllowedAccess)
|
||||
{
|
||||
if(!sentAllowedFull)
|
||||
{
|
||||
if (!s.IsChildAgent)
|
||||
{
|
||||
if (!Scene.TeleportClientHome(user, s.ControllingClient))
|
||||
{
|
||||
s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out.");
|
||||
Scene.CloseAgent(s.UUID, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sentAllowedFull = true;
|
||||
remote_client.SendAlertMessage("Estate Allowed users list is full");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("User is already on the region ban list");
|
||||
}
|
||||
//Scene.RegionInfo.regionBanlist.Add(Manager(user);
|
||||
remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
if (doOtherEstates)
|
||||
{
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
|
||||
continue;
|
||||
if(estateSettings.EstateUsersCount() >= (int)Constants.EstateAccessLimits.AllowedAccess)
|
||||
continue;
|
||||
estateSettings.AddEstateUser(user);
|
||||
estateSettings.RemoveBan(user);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 128) != 0) // Ban remove
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false))
|
||||
thisSettings.AddEstateUser(user);
|
||||
thisSettings.RemoveBan(user);
|
||||
changed[thisEstateID] = thisSettings;;
|
||||
|
||||
if(needReply)
|
||||
sendAllowedOrBanList[remote_client] = invoice;
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 8) != 0) // User remove
|
||||
{
|
||||
if (doOtherEstates) // All estates
|
||||
{
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
|
||||
continue;
|
||||
estateSettings.RemoveEstateUser(user);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
thisSettings.RemoveEstateUser(user);
|
||||
changed[thisEstateID] = thisSettings;;
|
||||
|
||||
if(needReply)
|
||||
sendAllowedOrBanList[remote_client] = invoice;
|
||||
}
|
||||
|
||||
if ((estateAccessType & 16) != 0) // Group add
|
||||
{
|
||||
if(thisSettings.EstateGroupsCount() >= (int)Constants.EstateAccessLimits.AllowedGroups)
|
||||
{
|
||||
if(!sentGroupsFull)
|
||||
{
|
||||
sentGroupsFull = true;
|
||||
remote_client.SendAlertMessage("Estate Allowed groups list is full");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (doOtherEstates) // All estates
|
||||
{
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
|
||||
continue;
|
||||
if(estateSettings.EstateGroupsCount() >= (int)Constants.EstateAccessLimits.AllowedGroups)
|
||||
continue;
|
||||
estateSettings.AddEstateGroup(user);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
thisSettings.AddEstateGroup(user);
|
||||
changed[thisEstateID] = thisSettings;
|
||||
|
||||
sendGroups[remote_client] = invoice;
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 32) != 0) // Group remove
|
||||
{
|
||||
if (doOtherEstates) // All estates
|
||||
{
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
|
||||
continue;
|
||||
estateSettings.RemoveEstateGroup(user);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
thisSettings.RemoveEstateGroup(user);
|
||||
changed[thisEstateID] = thisSettings;
|
||||
|
||||
sendGroups[remote_client] = invoice;
|
||||
}
|
||||
|
||||
if ((estateAccessType & 64) != 0) // Ban add
|
||||
{
|
||||
|
||||
if(thisSettings.EstateBansCount() >= (int)Constants.EstateAccessLimits.EstateBans)
|
||||
{
|
||||
if(!sentBansFull)
|
||||
{
|
||||
sentBansFull = true;
|
||||
remote_client.SendAlertMessage("Estate Ban list is full");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans;
|
||||
|
||||
bool alreadyInList = false;
|
||||
|
||||
for (int i = 0; i < banlistcheck.Length; i++)
|
||||
{
|
||||
if (user == banlistcheck[i].BannedUserID)
|
||||
{
|
||||
alreadyInList = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!alreadyInList)
|
||||
{
|
||||
if (doOtherEstates) // All estates
|
||||
{
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
|
||||
continue;
|
||||
|
||||
if(estateSettings.EstateBansCount() >= (int)Constants.EstateAccessLimits.EstateBans)
|
||||
continue;
|
||||
|
||||
EstateBan bitem = new EstateBan();
|
||||
|
||||
bitem.BannedUserID = user;
|
||||
bitem.EstateID = estateSettings.EstateID;
|
||||
bitem.BannedHostAddress = "0.0.0.0";
|
||||
bitem.BannedHostIPMask = "0.0.0.0";
|
||||
|
||||
estateSettings.AddBan(bitem);
|
||||
estateSettings.RemoveEstateUser(user);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
EstateBan item = new EstateBan();
|
||||
|
||||
item.BannedUserID = user;
|
||||
item.EstateID = Scene.RegionInfo.EstateSettings.EstateID;
|
||||
item.BannedHostAddress = "0.0.0.0";
|
||||
item.BannedHostIPMask = "0.0.0.0";
|
||||
|
||||
thisSettings.AddBan(item);
|
||||
thisSettings.RemoveEstateUser(user);
|
||||
changed[thisEstateID] = thisSettings;
|
||||
|
||||
ScenePresence s = Scene.GetScenePresence(user);
|
||||
if (s != null)
|
||||
{
|
||||
if (!s.IsChildAgent)
|
||||
{
|
||||
if (!Scene.TeleportClientHome(user, s.ControllingClient))
|
||||
{
|
||||
s.ControllingClient.Kick("Your access to the region was revoked and TP home failed - you have been logged out.");
|
||||
Scene.CloseAgent(s.UUID, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("User is already on the region ban list");
|
||||
}
|
||||
//Scene.RegionInfo.regionBanlist.Add(Manager(user);
|
||||
if(needReply)
|
||||
sendAllowedOrBanList[remote_client] = invoice;
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 128) != 0) // Ban remove
|
||||
{
|
||||
EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans;
|
||||
|
||||
@@ -890,104 +1021,90 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||
|
||||
if (alreadyInList && listitem != null)
|
||||
{
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
if (doOtherEstates) // All estates
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
{
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
estateSettings.RemoveBan(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
}
|
||||
if(!isadmin && !estateSettings.IsEstateManagerOrOwner(agentID))
|
||||
continue;
|
||||
estateSettings.RemoveBan(user);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
Scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
thisSettings.RemoveBan(listitem.BannedUserID);
|
||||
changed[thisEstateID] = thisSettings;
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("User is not on the region ban list");
|
||||
}
|
||||
|
||||
//Scene.RegionInfo.regionBanlist.Add(Manager(user);
|
||||
remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 256) != 0) // Manager add
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
|
||||
if(needReply)
|
||||
sendAllowedOrBanList[remote_client] = invoice;
|
||||
}
|
||||
|
||||
// last the ones only for owners of this region
|
||||
if (!Scene.Permissions.CanIssueEstateCommand(agentID, true))
|
||||
{
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
remote_client.SendAlertMessage("Method EstateAccess Failed, you don't have permissions");
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((estateAccessType & 256) != 0) // Manager add
|
||||
{
|
||||
if(thisSettings.EstateManagersCount() >= (int)Constants.EstateAccessLimits.EstateManagers)
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
if(!sentManagersFull)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
sentManagersFull = true;
|
||||
remote_client.SendAlertMessage("Estate Managers list is full");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (doOtherEstates) // All estates
|
||||
{
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
if(!isadmin && !estateSettings.IsEstateOwner(agentID)) // redundante check?
|
||||
continue;
|
||||
if(estateSettings.EstateManagersCount() >= (int)Constants.EstateAccessLimits.EstateManagers)
|
||||
continue;
|
||||
estateSettings.AddEstateManager(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
thisSettings.AddEstateManager(user);
|
||||
changed[thisEstateID] = thisSettings;
|
||||
|
||||
sendManagers[remote_client] = invoice;
|
||||
}
|
||||
|
||||
Scene.RegionInfo.EstateSettings.AddEstateManager(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
}
|
||||
}
|
||||
|
||||
if ((estateAccessType & 512) != 0) // Manager remove
|
||||
{
|
||||
if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true))
|
||||
if ((estateAccessType & 512) != 0) // Manager remove
|
||||
{
|
||||
if ((estateAccessType & 1) != 0) // All estates
|
||||
if (doOtherEstates) // All estates
|
||||
{
|
||||
List<int> estateIDs = Scene.EstateDataService.GetEstatesByOwner(Scene.RegionInfo.EstateSettings.EstateOwner);
|
||||
EstateSettings estateSettings;
|
||||
|
||||
foreach (int estateID in estateIDs)
|
||||
foreach (EstateSettings estateSettings in otherEstates)
|
||||
{
|
||||
if (estateID != Scene.RegionInfo.EstateSettings.EstateID)
|
||||
{
|
||||
estateSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
|
||||
estateSettings.RemoveEstateManager(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(estateSettings);
|
||||
}
|
||||
if(!isadmin && !estateSettings.IsEstateOwner(agentID))
|
||||
continue;
|
||||
|
||||
estateSettings.RemoveEstateManager(user);
|
||||
changed[(int)estateSettings.EstateID] = estateSettings;
|
||||
}
|
||||
}
|
||||
|
||||
Scene.RegionInfo.EstateSettings.RemoveEstateManager(user);
|
||||
Scene.EstateDataService.StoreEstateSettings(Scene.RegionInfo.EstateSettings);
|
||||
thisSettings.RemoveEstateManager(user);
|
||||
changed[thisEstateID] = thisSettings;
|
||||
|
||||
TriggerEstateInfoChange();
|
||||
remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID);
|
||||
}
|
||||
else
|
||||
{
|
||||
remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions");
|
||||
sendManagers[remote_client] = invoice;
|
||||
}
|
||||
}
|
||||
lock(deltareqLock)
|
||||
runnigDeltaExec = false;
|
||||
}
|
||||
|
||||
public void HandleOnEstateManageTelehub(IClientAPI client, UUID invoice, UUID senderID, string cmd, uint param1)
|
||||
|
||||
Reference in New Issue
Block a user