private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) { uint sun = 0; if (!m_scene.RegionInfo.EstateSettings.UseGlobalTime) sun=(uint)(m_scene.RegionInfo.EstateSettings.SunPosition*1024.0) + 0x1800; UUID estateOwner; if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) estateOwner = m_scene.RegionInfo.EstateSettings.EstateOwner; else estateOwner = m_scene.RegionInfo.MasterAvatarAssignedUUID; if (m_scene.Permissions.IsGod(remote_client.AgentId)) estateOwner = remote_client.AgentId; remote_client.SendDetailedEstateData(invoice, m_scene.RegionInfo.EstateSettings.EstateName, m_scene.RegionInfo.EstateSettings.EstateID, m_scene.RegionInfo.EstateSettings.ParentEstateID, GetEstateFlags(), sun, m_scene.RegionInfo.RegionSettings.Covenant, m_scene.RegionInfo.EstateSettings.AbuseEmail, estateOwner); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateGroups, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); }
private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) { uint sun = 0; if (!m_scene.RegionInfo.EstateSettings.FixedSun) sun=(uint)(m_scene.RegionInfo.EstateSettings.SunPosition*1024.0) + 0x1800; UUID estateOwner = m_scene.RegionInfo.EstateSettings.EstateOwner; //if (m_scene.Permissions.IsGod(remote_client.AgentId)) // estateOwner = remote_client.AgentId; remote_client.SendDetailedEstateData(invoice, m_scene.RegionInfo.EstateSettings.EstateName, m_scene.RegionInfo.EstateSettings.EstateID, m_scene.RegionInfo.EstateSettings.ParentEstateID, GetEstateFlags(), sun, m_scene.RegionInfo.RegionSettings.Covenant, m_scene.RegionInfo.RegionSettings.CovenantLastUpdated, m_scene.RegionInfo.EstateSettings.AbuseEmail, estateOwner); remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.AllowedUsers, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateGroups, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); }
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) return; // never process EO if ((estateAccessType & 4) != 0) // User add { 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.AddEstateUser(user); estateSettings.Save(); } } } Scene.RegionInfo.EstateSettings.AddEstateUser(user); Scene.RegionInfo.EstateSettings.Save(); 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); estateSettings.Save(); } } } Scene.RegionInfo.EstateSettings.RemoveEstateUser(user); Scene.RegionInfo.EstateSettings.Save(); 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 & 16) != 0) // Group add { 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.AddEstateGroup(user); estateSettings.Save(); } } } Scene.RegionInfo.EstateSettings.AddEstateGroup(user); Scene.RegionInfo.EstateSettings.Save(); 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); estateSettings.Save(); } } } Scene.RegionInfo.EstateSettings.RemoveEstateGroup(user); Scene.RegionInfo.EstateSettings.Save(); 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); estateSettings.Save(); } } } 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.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); 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); 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 & 128) != 0) // Ban remove { if (Scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false)) { EstateBan[] banlistcheck = Scene.RegionInfo.EstateSettings.EstateBans; bool alreadyInList = false; EstateBan listitem = null; for (int i = 0; i < banlistcheck.Length; i++) { if (user == banlistcheck[i].BannedUserID) { alreadyInList = true; listitem = banlistcheck[i]; break; } } if (alreadyInList && listitem != null) { 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.RemoveBan(user); estateSettings.Save(); } } } Scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); Scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } 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 ((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.AddEstateManager(user); estateSettings.Save(); } } } Scene.RegionInfo.EstateSettings.AddEstateManager(user); Scene.RegionInfo.EstateSettings.Save(); 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 & 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.RemoveEstateManager(user); estateSettings.Save(); } } } Scene.RegionInfo.EstateSettings.RemoveEstateManager(user); Scene.RegionInfo.EstateSettings.Save(); 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"); } } }
private void sendEstateLists(IClientAPI remote_client, UUID invoice) { remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID); remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); }
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 == m_scene.RegionInfo.EstateSettings.EstateOwner) return; // never process EO IEstateConnector connector = Framework.Utilities.DataManager.RequestPlugin<IEstateConnector>(); List<EstateSettings> estates = new List<EstateSettings>(); if ((estateAccessType & (int)AccessDeltaRequest.ApplyToAllEstates) != 0 && connector != null) estates = connector.GetEstates(m_scene.RegionInfo.EstateSettings.EstateOwner); else estates = new List<EstateSettings>() { m_scene.RegionInfo.EstateSettings }; bool moreToCome = (estateAccessType & (int)AccessDeltaRequest.MoreToCome) != 0; List<Action<UUID>> actions = new List<Action<UUID>>(); bool isOwner = m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions(); bool isManager = m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false); foreach (EstateSettings es in estates) { if (isOwner) { if ((estateAccessType & (int)AccessDeltaRequest.AddEstateManager) != 0) actions.Add(es.AddEstateManager); else if ((estateAccessType & (int)AccessDeltaRequest.RemoveEstateManager) != 0) actions.Add(es.RemoveEstateManager); } if (isManager) { if ((estateAccessType & (int)AccessDeltaRequest.AddAllowedUser) != 0) actions.Add(es.AddEstateUser); else if ((estateAccessType & (int)AccessDeltaRequest.RemoveAllowedUser) != 0) actions.Add(es.RemoveEstateUser); else if ((estateAccessType & (int)AccessDeltaRequest.AddAllowedGroup) != 0) actions.Add(es.AddEstateGroup); else if ((estateAccessType & (int)AccessDeltaRequest.RemoveAllowedGroup) != 0) actions.Add(es.RemoveEstateGroup); else if ((estateAccessType & (int)AccessDeltaRequest.AddBannedUser) != 0) actions.Add((userID) => { IScenePresence SP = m_scene.GetScenePresence(user); EstateBan item = new EstateBan { BannedUserID = userID, EstateID = es.EstateID, BannedHostAddress = "0.0.0.0", BannedHostIPMask = (SP != null) ? ((System.Net.IPEndPoint)SP.ControllingClient.GetClientEP()) .Address.ToString() : "0.0.0.0" }; es.AddBan(item); IEntityTransferModule transferModule = m_scene.RequestModuleInterface<IEntityTransferModule>(); if (SP != null && transferModule != null) { if (!SP.IsChildAgent) transferModule.TeleportHome(user, SP.ControllingClient); else transferModule.IncomingCloseAgent(SP.Scene, SP.UUID); } }); else if ((estateAccessType & (int)AccessDeltaRequest.RemoveBannedUser) != 0) actions.Add(es.RemoveBan); } } foreach (Action<UUID> es in actions) { es(user); if (!moreToCome) connector.SaveEstateSettings(m_scene.RegionInfo.EstateSettings); } if(actions.Count > 0) TriggerEstateInfoChange(); if (!isManager && !isOwner) remote_client.SendAlertMessage("You don't have the correct permissions to accomplish this action."); if ((estateAccessType & (int) AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { remote_client.SendEstateList(invoice, (int) EstateTools.EstateAccessReplyDelta.AllowedUsers, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int) EstateTools.EstateAccessReplyDelta.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateGroups, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int) EstateTools.EstateAccessReplyDelta.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); } }
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 == m_scene.RegionInfo.EstateSettings.EstateOwner) return; // never process EO if ((estateAccessType & 4) != 0) // User add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.AddEstateUser(user); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 8) != 0) // User remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateUser(user); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 16) != 0) // Group add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.AddEstateGroup(user); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateGroups, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 32) != 0) // Group remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateGroup(user); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateGroups, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 64) != 0) // Ban add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) { EstateBan[] banlistcheck = m_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) { EstateBan item = new EstateBan(); item.BannedUserID = user; item.EstateID = m_scene.RegionInfo.EstateSettings.EstateID; item.BannedHostAddress = "0.0.0.0"; item.BannedHostIPMask = "0.0.0.0"; m_scene.RegionInfo.EstateSettings.AddBan(item); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); ScenePresence s = m_scene.GetScenePresence(user); if (s != null) { if (!s.IsChildAgent) { m_scene.TeleportClientHome(user, s.ControllingClient); } } } else { remote_client.SendAlertMessage("User is already on the region ban list"); } //m_scene.RegionInfo.regionBanlist.Add(Manager(user); remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 128) != 0) // Ban remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) { EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; bool alreadyInList = false; EstateBan listitem = null; for (int i = 0; i < banlistcheck.Length; i++) { if (user == banlistcheck[i].BannedUserID) { alreadyInList = true; listitem = banlistcheck[i]; break; } } if (alreadyInList && listitem != null) { m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } else { remote_client.SendAlertMessage("User is not on the region ban list"); } //m_scene.RegionInfo.regionBanlist.Add(Manager(user); remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 256) != 0) // Manager add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.AddEstateManager(user); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 512) != 0) // Manager remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user); m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } }
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 == m_scene.RegionInfo.EstateSettings.EstateOwner) return; // never process EO if ((estateAccessType & (int)AccessDeltaRequest.AddAllowedUser) != 0) // User add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true)) { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { estate.AddEstateUser (user); estate.Save (); } } } m_scene.RegionInfo.EstateSettings.AddEstateUser(user); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.RemoveAllowedUser) != 0) // User remove { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { estate.RemoveEstateUser (user); estate.Save (); } } } if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateUser(user); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.AddAllowedGroup) != 0) // Group add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { estate.AddEstateGroup (user); estate.Save (); } } } m_scene.RegionInfo.EstateSettings.AddEstateGroup(user); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.RemoveAllowedGroup) != 0) // Group remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { estate.RemoveEstateGroup (user); estate.Save (); } } } m_scene.RegionInfo.EstateSettings.RemoveEstateGroup(user); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.AddBannedUser) != 0) // Ban add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { EstateBan[] innerbanlistcheck = estate.EstateBans; #if (!ISWIN) bool inneralreadyInList = false; foreach (EstateBan t in innerbanlistcheck) { if (user == t.BannedUserID) { inneralreadyInList = true; break; } } #else bool inneralreadyInList = innerbanlistcheck.Any(t => user == t.BannedUserID); #endif if (!inneralreadyInList) { EstateBan item = new EstateBan {BannedUserID = user, EstateID = estate.EstateID}; IScenePresence SP = m_scene.GetScenePresence (user); item.BannedHostAddress = (SP != null) ? ((System.Net.IPEndPoint)SP.ControllingClient.GetClientEP ()).Address.ToString () : "0.0.0.0"; item.BannedHostIPMask = (SP != null) ? ((System.Net.IPEndPoint)SP.ControllingClient.GetClientEP ()).Address.ToString () : "0.0.0.0"; item.BannedHostNameMask = (SP != null) ? ((System.Net.IPEndPoint)SP.ControllingClient.GetClientEP ()).Address.ToString () : "0.0.0.0"; estate.AddBan (item); estate.Save (); } } } } EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; #if (!ISWIN) bool alreadyInList = false; foreach (EstateBan t in banlistcheck) { if (user == t.BannedUserID) { alreadyInList = true; break; } } #else bool alreadyInList = banlistcheck.Any(t => user == t.BannedUserID); #endif if (!alreadyInList) { EstateBan item = new EstateBan { BannedUserID = user, EstateID = m_scene.RegionInfo.EstateSettings.EstateID, BannedHostAddress = "0.0.0.0" }; IScenePresence SP = m_scene.GetScenePresence (user); item.BannedHostIPMask = (SP != null) ? ((System.Net.IPEndPoint)SP.ControllingClient.GetClientEP()).Address.ToString() : "0.0.0.0"; m_scene.RegionInfo.EstateSettings.AddBan(item); //Trigger the event m_scene.AuroraEventManager.FireGenericEventHandler("BanUser", user); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } if (SP != null) { if (!SP.IsChildAgent) { IEntityTransferModule transferModule = m_scene.RequestModuleInterface<IEntityTransferModule>(); if (transferModule != null) transferModule.TeleportHome(user, SP.ControllingClient); } else { //Close them in the sim IEntityTransferModule transferModule = SP.Scene.RequestModuleInterface<IEntityTransferModule> (); if (transferModule != null) transferModule.IncomingCloseAgent (SP.Scene, SP.UUID); } } } else { remote_client.SendAlertMessage("User is already on the region ban list"); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.RemoveBannedUser) != 0) // Ban remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { EstateBan[] innerbanlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; bool inneralreadyInList = false; EstateBan innerlistitem = null; foreach (EstateBan t in innerbanlistcheck) { if (user == t.BannedUserID) { inneralreadyInList = true; innerlistitem = t; break; } } if (inneralreadyInList) { m_scene.RegionInfo.EstateSettings.RemoveBan (innerlistitem.BannedUserID); } estate.Save (); } } } EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; bool alreadyInList = false; EstateBan listitem = null; foreach (EstateBan t in banlistcheck) { if (user == t.BannedUserID) { alreadyInList = true; listitem = t; break; } } //Trigger the event m_scene.AuroraEventManager.FireGenericEventHandler("UnBanUser", user); if (alreadyInList) { m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("User is not on the region ban list"); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.AddEstateManager) != 0) // Manager add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { estate.AddEstateManager (user); estate.Save (); } } } m_scene.RegionInfo.EstateSettings.AddEstateManager(user); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.RemoveEstateManager) != 0) // Manager remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { IEstateConnector connector = Aurora.DataManager.DataManager.RequestPlugin<IEstateConnector> (); if ((estateAccessType & 1) != 0 && connector != null) // All estates { List<EstateSettings> estateIDs = connector.GetEstates (remote_client.AgentId); foreach (EstateSettings estate in estateIDs) { if (estate.EstateID != m_scene.RegionInfo.EstateSettings.EstateID) { estate.RemoveEstateManager (user); estate.Save (); } } } m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user); if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & (int)AccessDeltaRequest.MoreToCome) == 0) //1024 means more than one is being sent { remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.AllowedUsers, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateGroups, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); } }
private void sendDetailedEstateData(IClientAPI remote_client, UUID invoice) { uint sun = 0; if (Scene.RegionInfo.EstateSettings.FixedSun) sun = (uint)(Scene.RegionInfo.EstateSettings.SunPosition * 1024.0) + 0x1800; UUID estateOwner; estateOwner = Scene.RegionInfo.EstateSettings.EstateOwner; if (Scene.Permissions.IsGod(remote_client.AgentId)) estateOwner = remote_client.AgentId; remote_client.SendDetailedEstateData(invoice, Scene.RegionInfo.EstateSettings.EstateName, Scene.RegionInfo.EstateSettings.EstateID, Scene.RegionInfo.EstateSettings.ParentEstateID, GetEstateFlags(), sun, Scene.RegionInfo.RegionSettings.Covenant, (uint) Scene.RegionInfo.RegionSettings.CovenantChangedDateTime, Scene.RegionInfo.EstateSettings.AbuseEmail, estateOwner); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, Scene.RegionInfo.EstateSettings.EstateManagers, Scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, Scene.RegionInfo.EstateSettings.EstateAccess, Scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, Scene.RegionInfo.EstateSettings.EstateGroups, Scene.RegionInfo.EstateSettings.EstateID); remote_client.SendBannedUserList(invoice, Scene.RegionInfo.EstateSettings.EstateBans, Scene.RegionInfo.EstateSettings.EstateID); }
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 == m_scene.RegionInfo.EstateSettings.EstateOwner) return; // never process EO if ((estateAccessType & 4) != 0) // User add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true)) { m_scene.RegionInfo.EstateSettings.AddEstateUser(user); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 8) != 0) // User remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateUser(user); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 16) != 0) // Group add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.AddEstateGroup(user); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 32) != 0) // Group remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateGroup(user); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 64) != 0) // Ban add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) { EstateBan[] banlistcheck = m_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) { EstateBan item = new EstateBan(); item.BannedUserID = user; item.EstateID = m_scene.RegionInfo.EstateSettings.EstateID; item.BannedHostAddress = "0.0.0.0"; ScenePresence SP = m_scene.GetScenePresence(user); item.BannedHostIPMask = (SP != null) ? ((System.Net.IPEndPoint)SP.ControllingClient.GetClientEP()).Address.ToString() : "0.0.0.0"; m_scene.RegionInfo.EstateSettings.AddBan(item); //Trigger the event m_scene.AuroraEventManager.FireGenericEventHandler("BanUser", user); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } if (SP != null) { if (!SP.IsChildAgent) { IEntityTransferModule transferModule = m_scene.RequestModuleInterface<IEntityTransferModule>(); if (transferModule != null) transferModule.TeleportHome(user, SP.ControllingClient); } else { //Close them in the sim SP.Scene.IncomingCloseAgent(SP.UUID); } } } else { remote_client.SendAlertMessage("User is already on the region ban list"); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 128) != 0) // Ban remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) { EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; bool alreadyInList = false; EstateBan listitem = null; for (int i = 0; i < banlistcheck.Length; i++) { if (user == banlistcheck[i].BannedUserID) { alreadyInList = true; listitem = banlistcheck[i]; break; } } //Trigger the event m_scene.AuroraEventManager.FireGenericEventHandler("UnBanUser", user); if (alreadyInList && listitem != null) { m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("User is not on the region ban list"); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 256) != 0) // Manager add { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.AddEstateManager(user); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 512) != 0) // Manager remove { if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user); if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { m_scene.RegionInfo.EstateSettings.Save(); TriggerEstateInfoChange(); } } else { remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); } } if ((estateAccessType & 1024) == 0) //1024 means more than one is being sent { remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.AllowedUsers, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateGroups, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); remote_client.SendEstateList(invoice, (int)EstateTools.EstateAccessReplyDelta.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); } }