diff options
author | UbitUmarov | 2017-01-05 16:33:01 +0000 |
---|---|---|
committer | UbitUmarov | 2017-01-05 16:33:01 +0000 |
commit | 9d28fd41c67bd14dd684c6982ff49db8476ef887 (patch) | |
tree | be886a33e381da4e07796d9eb5b19f40ba665ac4 | |
parent | Merge branch 'master' into httptests (diff) | |
parent | a few changes to estates and estate teleportHome (used kick) (diff) | |
download | opensim-SC-9d28fd41c67bd14dd684c6982ff49db8476ef887.zip opensim-SC-9d28fd41c67bd14dd684c6982ff49db8476ef887.tar.gz opensim-SC-9d28fd41c67bd14dd684c6982ff49db8476ef887.tar.bz2 opensim-SC-9d28fd41c67bd14dd684c6982ff49db8476ef887.tar.xz |
Merge branch 'master' into httptests
10 files changed, 116 insertions, 72 deletions
diff --git a/OpenSim/Addons/Groups/Service/GroupsService.cs b/OpenSim/Addons/Groups/Service/GroupsService.cs index ae0518c..710b00a 100644 --- a/OpenSim/Addons/Groups/Service/GroupsService.cs +++ b/OpenSim/Addons/Groups/Service/GroupsService.cs | |||
@@ -496,7 +496,7 @@ namespace OpenSim.Groups | |||
496 | if (!unlimited && limited) | 496 | if (!unlimited && limited) |
497 | { | 497 | { |
498 | // check whether person's has this role | 498 | // check whether person's has this role |
499 | RoleMembershipData rolemembership = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); | 499 | RoleMembershipData rolemembership = m_Database.RetrieveRoleMember(GroupID, RoleID, RequestingAgentID); |
500 | if (rolemembership == null) | 500 | if (rolemembership == null) |
501 | { | 501 | { |
502 | m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of limited permission", RequestingAgentID, AgentID, RoleID); | 502 | m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of limited permission", RequestingAgentID, AgentID, RoleID); |
@@ -516,13 +516,26 @@ namespace OpenSim.Groups | |||
516 | return false; | 516 | return false; |
517 | 517 | ||
518 | // check permissions | 518 | // check permissions |
519 | bool limited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMemberLimited); | ||
519 | bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) || IsOwner(RequestingAgentID, GroupID); | 520 | bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) || IsOwner(RequestingAgentID, GroupID); |
520 | if (!unlimited) | 521 | if (!limited && !unlimited) |
521 | { | 522 | { |
522 | m_log.DebugFormat("[Groups]: ({0}) Attempt at removing {1} from role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); | 523 | m_log.DebugFormat("[Groups]: ({0}) Attempt at removing {1} from role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); |
523 | return false; | 524 | return false; |
524 | } | 525 | } |
525 | 526 | ||
527 | // AssignMemberLimited means that the person can assign another person to the same roles that she has in the group | ||
528 | if (!unlimited && limited) | ||
529 | { | ||
530 | // check whether person's has this role | ||
531 | RoleMembershipData rolemembership = m_Database.RetrieveRoleMember(GroupID, RoleID, RequestingAgentID); | ||
532 | if (rolemembership == null) | ||
533 | { | ||
534 | m_log.DebugFormat("[Groups]: ({0}) Attempt at removing {1} from role {2} denied because of limited permission", RequestingAgentID, AgentID, RoleID); | ||
535 | return false; | ||
536 | } | ||
537 | } | ||
538 | |||
526 | RoleMembershipData rolemember = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); | 539 | RoleMembershipData rolemember = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); |
527 | 540 | ||
528 | if (rolemember == null) | 541 | if (rolemember == null) |
@@ -812,7 +825,7 @@ namespace OpenSim.Groups | |||
812 | if (RoleID != UUID.Zero) | 825 | if (RoleID != UUID.Zero) |
813 | _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); | 826 | _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); |
814 | 827 | ||
815 | // Make thit this active group | 828 | // Make this the active group |
816 | PrincipalData pdata = new PrincipalData(); | 829 | PrincipalData pdata = new PrincipalData(); |
817 | pdata.PrincipalID = AgentID; | 830 | pdata.PrincipalID = AgentID; |
818 | pdata.ActiveGroupID = GroupID; | 831 | pdata.ActiveGroupID = GroupID; |
diff --git a/OpenSim/Data/MySQL/Resources/IM_Store.migrations b/OpenSim/Data/MySQL/Resources/IM_Store.migrations index e271fcc..4f14826 100644 --- a/OpenSim/Data/MySQL/Resources/IM_Store.migrations +++ b/OpenSim/Data/MySQL/Resources/IM_Store.migrations | |||
@@ -11,6 +11,6 @@ CREATE TABLE IF NOT EXISTS `im_offline` ( | |||
11 | PRIMARY KEY (`ID`), | 11 | PRIMARY KEY (`ID`), |
12 | KEY `PrincipalID` (`PrincipalID`), | 12 | KEY `PrincipalID` (`PrincipalID`), |
13 | KEY `FromID` (`FromID`) | 13 | KEY `FromID` (`FromID`) |
14 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; | 14 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
15 | 15 | ||
16 | COMMIT; | 16 | COMMIT; |
diff --git a/OpenSim/Data/MySQL/Resources/RegionStore.migrations b/OpenSim/Data/MySQL/Resources/RegionStore.migrations index 2108c76..c63cc95 100644 --- a/OpenSim/Data/MySQL/Resources/RegionStore.migrations +++ b/OpenSim/Data/MySQL/Resources/RegionStore.migrations | |||
@@ -97,7 +97,7 @@ CREATE TABLE IF NOT EXISTS `prims` ( | |||
97 | PRIMARY KEY (`UUID`), | 97 | PRIMARY KEY (`UUID`), |
98 | KEY `prims_regionuuid` (`RegionUUID`), | 98 | KEY `prims_regionuuid` (`RegionUUID`), |
99 | KEY `prims_scenegroupid` (`SceneGroupID`) | 99 | KEY `prims_scenegroupid` (`SceneGroupID`) |
100 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 100 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
101 | 101 | ||
102 | CREATE TABLE IF NOT EXISTS `primshapes` ( | 102 | CREATE TABLE IF NOT EXISTS `primshapes` ( |
103 | `Shape` int(11) DEFAULT NULL, | 103 | `Shape` int(11) DEFAULT NULL, |
@@ -130,7 +130,7 @@ CREATE TABLE IF NOT EXISTS `primshapes` ( | |||
130 | `Media` text, | 130 | `Media` text, |
131 | `LastAttachPoint` int(4) NOT NULL DEFAULT '0', | 131 | `LastAttachPoint` int(4) NOT NULL DEFAULT '0', |
132 | PRIMARY KEY (`UUID`) | 132 | PRIMARY KEY (`UUID`) |
133 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 133 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
134 | 134 | ||
135 | CREATE TABLE IF NOT EXISTS `primitems` ( | 135 | CREATE TABLE IF NOT EXISTS `primitems` ( |
136 | `invType` int(11) DEFAULT NULL, | 136 | `invType` int(11) DEFAULT NULL, |
@@ -154,13 +154,13 @@ CREATE TABLE IF NOT EXISTS `primitems` ( | |||
154 | `lastOwnerID` char(36) DEFAULT NULL, | 154 | `lastOwnerID` char(36) DEFAULT NULL, |
155 | PRIMARY KEY (`itemID`), | 155 | PRIMARY KEY (`itemID`), |
156 | KEY `primitems_primid` (`primID`) | 156 | KEY `primitems_primid` (`primID`) |
157 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 157 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
158 | 158 | ||
159 | CREATE TABLE IF NOT EXISTS `terrain` ( | 159 | CREATE TABLE IF NOT EXISTS `terrain` ( |
160 | `RegionUUID` varchar(255) DEFAULT NULL, | 160 | `RegionUUID` varchar(255) DEFAULT NULL, |
161 | `Revision` int(11) DEFAULT NULL, | 161 | `Revision` int(11) DEFAULT NULL, |
162 | `Heightfield` longblob | 162 | `Heightfield` longblob |
163 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 163 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
164 | 164 | ||
165 | CREATE TABLE IF NOT EXISTS `land` ( | 165 | CREATE TABLE IF NOT EXISTS `land` ( |
166 | `UUID` varchar(255) NOT NULL, | 166 | `UUID` varchar(255) NOT NULL, |
@@ -204,21 +204,21 @@ CREATE TABLE IF NOT EXISTS `land` ( | |||
204 | `ObscureMusic` tinyint(1) NOT NULL DEFAULT '0', | 204 | `ObscureMusic` tinyint(1) NOT NULL DEFAULT '0', |
205 | `ObscureMedia` tinyint(1) NOT NULL DEFAULT '0', | 205 | `ObscureMedia` tinyint(1) NOT NULL DEFAULT '0', |
206 | PRIMARY KEY (`UUID`) | 206 | PRIMARY KEY (`UUID`) |
207 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; | 207 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
208 | 208 | ||
209 | CREATE TABLE IF NOT EXISTS `landaccesslist` ( | 209 | CREATE TABLE IF NOT EXISTS `landaccesslist` ( |
210 | `LandUUID` varchar(255) DEFAULT NULL, | 210 | `LandUUID` varchar(255) DEFAULT NULL, |
211 | `AccessUUID` varchar(255) DEFAULT NULL, | 211 | `AccessUUID` varchar(255) DEFAULT NULL, |
212 | `Flags` int(11) DEFAULT NULL, | 212 | `Flags` int(11) DEFAULT NULL, |
213 | `Expires` int(11) NOT NULL DEFAULT '0' | 213 | `Expires` int(11) NOT NULL DEFAULT '0' |
214 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 214 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
215 | 215 | ||
216 | CREATE TABLE IF NOT EXISTS `regionban` ( | 216 | CREATE TABLE IF NOT EXISTS `regionban` ( |
217 | `regionUUID` varchar(36) NOT NULL, | 217 | `regionUUID` varchar(36) NOT NULL, |
218 | `bannedUUID` varchar(36) NOT NULL, | 218 | `bannedUUID` varchar(36) NOT NULL, |
219 | `bannedIp` varchar(16) NOT NULL, | 219 | `bannedIp` varchar(16) NOT NULL, |
220 | `bannedIpHostMask` varchar(16) NOT NULL | 220 | `bannedIpHostMask` varchar(16) NOT NULL |
221 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; | 221 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
222 | 222 | ||
223 | CREATE TABLE IF NOT EXISTS `regionsettings` ( | 223 | CREATE TABLE IF NOT EXISTS `regionsettings` ( |
224 | `regionUUID` char(36) NOT NULL, | 224 | `regionUUID` char(36) NOT NULL, |
@@ -265,7 +265,7 @@ CREATE TABLE IF NOT EXISTS `regionsettings` ( | |||
265 | `parcel_tile_ID` char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000', | 265 | `parcel_tile_ID` char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000', |
266 | `covenant_datetime` int(10) unsigned NOT NULL DEFAULT '0', | 266 | `covenant_datetime` int(10) unsigned NOT NULL DEFAULT '0', |
267 | PRIMARY KEY (`regionUUID`) | 267 | PRIMARY KEY (`regionUUID`) |
268 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8; | 268 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
269 | 269 | ||
270 | CREATE TABLE IF NOT EXISTS `regionwindlight` ( | 270 | CREATE TABLE IF NOT EXISTS `regionwindlight` ( |
271 | `region_id` varchar(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000', | 271 | `region_id` varchar(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000', |
diff --git a/OpenSim/Data/MySQL/Resources/UserProfiles.migrations b/OpenSim/Data/MySQL/Resources/UserProfiles.migrations index 008e455..cfcc18b 100644 --- a/OpenSim/Data/MySQL/Resources/UserProfiles.migrations +++ b/OpenSim/Data/MySQL/Resources/UserProfiles.migrations | |||
@@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS `usernotes` ( | |||
27 | `targetuuid` varchar(36) NOT NULL, | 27 | `targetuuid` varchar(36) NOT NULL, |
28 | `notes` text NOT NULL, | 28 | `notes` text NOT NULL, |
29 | UNIQUE KEY `useruuid` (`useruuid`,`targetuuid`) | 29 | UNIQUE KEY `useruuid` (`useruuid`,`targetuuid`) |
30 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 30 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
31 | 31 | ||
32 | 32 | ||
33 | CREATE TABLE IF NOT EXISTS `userpicks` ( | 33 | CREATE TABLE IF NOT EXISTS `userpicks` ( |
@@ -46,7 +46,7 @@ CREATE TABLE IF NOT EXISTS `userpicks` ( | |||
46 | `enabled` enum('true','false') NOT NULL, | 46 | `enabled` enum('true','false') NOT NULL, |
47 | `gatekeeper` varchar(255), | 47 | `gatekeeper` varchar(255), |
48 | PRIMARY KEY (`pickuuid`) | 48 | PRIMARY KEY (`pickuuid`) |
49 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 49 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
50 | 50 | ||
51 | 51 | ||
52 | CREATE TABLE IF NOT EXISTS `userprofile` ( | 52 | CREATE TABLE IF NOT EXISTS `userprofile` ( |
@@ -65,7 +65,7 @@ CREATE TABLE IF NOT EXISTS `userprofile` ( | |||
65 | `profileFirstImage` varchar(36) NOT NULL, | 65 | `profileFirstImage` varchar(36) NOT NULL, |
66 | `profileFirstText` text NOT NULL, | 66 | `profileFirstText` text NOT NULL, |
67 | PRIMARY KEY (`useruuid`) | 67 | PRIMARY KEY (`useruuid`) |
68 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 68 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
69 | 69 | ||
70 | CREATE TABLE IF NOT EXISTS `userdata` ( | 70 | CREATE TABLE IF NOT EXISTS `userdata` ( |
71 | `UserId` char(36) NOT NULL, | 71 | `UserId` char(36) NOT NULL, |
@@ -73,7 +73,7 @@ CREATE TABLE IF NOT EXISTS `userdata` ( | |||
73 | `DataKey` varchar(255), | 73 | `DataKey` varchar(255), |
74 | `DataVal` varchar(255), | 74 | `DataVal` varchar(255), |
75 | PRIMARY KEY (`UserId`,`TagId`) | 75 | PRIMARY KEY (`UserId`,`TagId`) |
76 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 76 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
77 | 77 | ||
78 | CREATE TABLE IF NOT EXISTS `usersettings` ( | 78 | CREATE TABLE IF NOT EXISTS `usersettings` ( |
79 | `useruuid` varchar(36) NOT NULL, | 79 | `useruuid` varchar(36) NOT NULL, |
@@ -81,6 +81,6 @@ CREATE TABLE IF NOT EXISTS `usersettings` ( | |||
81 | `visible` enum('true','false') NOT NULL, | 81 | `visible` enum('true','false') NOT NULL, |
82 | `email` varchar(254) NOT NULL, | 82 | `email` varchar(254) NOT NULL, |
83 | PRIMARY KEY (`useruuid`) | 83 | PRIMARY KEY (`useruuid`) |
84 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1; | 84 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
85 | 85 | ||
86 | commit; | 86 | commit; |
diff --git a/OpenSim/Data/MySQL/Resources/os_groups_Store.migrations b/OpenSim/Data/MySQL/Resources/os_groups_Store.migrations index 9e6f1c1..1a49900 100644 --- a/OpenSim/Data/MySQL/Resources/os_groups_Store.migrations +++ b/OpenSim/Data/MySQL/Resources/os_groups_Store.migrations | |||
@@ -18,7 +18,7 @@ CREATE TABLE `os_groups_groups` ( | |||
18 | PRIMARY KEY (`GroupID`), | 18 | PRIMARY KEY (`GroupID`), |
19 | UNIQUE KEY `Name` (`Name`), | 19 | UNIQUE KEY `Name` (`Name`), |
20 | FULLTEXT KEY `Name_2` (`Name`) | 20 | FULLTEXT KEY `Name_2` (`Name`) |
21 | ) ENGINE=MyISAM; | 21 | ) ENGINE=InnoDB; |
22 | 22 | ||
23 | 23 | ||
24 | CREATE TABLE `os_groups_membership` ( | 24 | CREATE TABLE `os_groups_membership` ( |
@@ -31,7 +31,7 @@ CREATE TABLE `os_groups_membership` ( | |||
31 | `AccessToken` char(36) NOT NULL default '', | 31 | `AccessToken` char(36) NOT NULL default '', |
32 | PRIMARY KEY (`GroupID`,`PrincipalID`), | 32 | PRIMARY KEY (`GroupID`,`PrincipalID`), |
33 | KEY `PrincipalID` (`PrincipalID`) | 33 | KEY `PrincipalID` (`PrincipalID`) |
34 | ) ENGINE=MyISAM; | 34 | ) ENGINE=InnoDB; |
35 | 35 | ||
36 | 36 | ||
37 | CREATE TABLE `os_groups_roles` ( | 37 | CREATE TABLE `os_groups_roles` ( |
@@ -43,7 +43,7 @@ CREATE TABLE `os_groups_roles` ( | |||
43 | `Powers` bigint(20) unsigned NOT NULL default '0', | 43 | `Powers` bigint(20) unsigned NOT NULL default '0', |
44 | PRIMARY KEY (`GroupID`,`RoleID`), | 44 | PRIMARY KEY (`GroupID`,`RoleID`), |
45 | KEY `GroupID` (`GroupID`) | 45 | KEY `GroupID` (`GroupID`) |
46 | ) ENGINE=MyISAM; | 46 | ) ENGINE=InnoDB; |
47 | 47 | ||
48 | 48 | ||
49 | CREATE TABLE `os_groups_rolemembership` ( | 49 | CREATE TABLE `os_groups_rolemembership` ( |
@@ -52,7 +52,7 @@ CREATE TABLE `os_groups_rolemembership` ( | |||
52 | `PrincipalID` VARCHAR(255) NOT NULL default '', | 52 | `PrincipalID` VARCHAR(255) NOT NULL default '', |
53 | PRIMARY KEY (`GroupID`,`RoleID`,`PrincipalID`), | 53 | PRIMARY KEY (`GroupID`,`RoleID`,`PrincipalID`), |
54 | KEY `PrincipalID` (`PrincipalID`) | 54 | KEY `PrincipalID` (`PrincipalID`) |
55 | ) ENGINE=MyISAM; | 55 | ) ENGINE=InnoDB; |
56 | 56 | ||
57 | 57 | ||
58 | CREATE TABLE `os_groups_invites` ( | 58 | CREATE TABLE `os_groups_invites` ( |
@@ -63,7 +63,7 @@ CREATE TABLE `os_groups_invites` ( | |||
63 | `TMStamp` timestamp NOT NULL, | 63 | `TMStamp` timestamp NOT NULL, |
64 | PRIMARY KEY (`InviteID`), | 64 | PRIMARY KEY (`InviteID`), |
65 | UNIQUE KEY `PrincipalGroup` (`GroupID`,`PrincipalID`) | 65 | UNIQUE KEY `PrincipalGroup` (`GroupID`,`PrincipalID`) |
66 | ) ENGINE=MyISAM; | 66 | ) ENGINE=InnoDB; |
67 | 67 | ||
68 | 68 | ||
69 | CREATE TABLE `os_groups_notices` ( | 69 | CREATE TABLE `os_groups_notices` ( |
@@ -81,13 +81,13 @@ CREATE TABLE `os_groups_notices` ( | |||
81 | PRIMARY KEY (`NoticeID`), | 81 | PRIMARY KEY (`NoticeID`), |
82 | KEY `GroupID` (`GroupID`), | 82 | KEY `GroupID` (`GroupID`), |
83 | KEY `TMStamp` (`TMStamp`) | 83 | KEY `TMStamp` (`TMStamp`) |
84 | ) ENGINE=MyISAM; | 84 | ) ENGINE=InnoDB; |
85 | 85 | ||
86 | CREATE TABLE `os_groups_principals` ( | 86 | CREATE TABLE `os_groups_principals` ( |
87 | `PrincipalID` VARCHAR(255) NOT NULL default '', | 87 | `PrincipalID` VARCHAR(255) NOT NULL default '', |
88 | `ActiveGroupID` char(36) NOT NULL default '', | 88 | `ActiveGroupID` char(36) NOT NULL default '', |
89 | PRIMARY KEY (`PrincipalID`) | 89 | PRIMARY KEY (`PrincipalID`) |
90 | ) ENGINE=MyISAM; | 90 | ) ENGINE=InnoDB; |
91 | 91 | ||
92 | COMMIT; | 92 | COMMIT; |
93 | 93 | ||
@@ -112,4 +112,4 @@ DROP TABLE `diva_groups_principals`; | |||
112 | 112 | ||
113 | DELETE FROM `migrations` WHERE name='diva_im_Store'; | 113 | DELETE FROM `migrations` WHERE name='diva_im_Store'; |
114 | 114 | ||
115 | COMMIT; \ No newline at end of file | 115 | COMMIT; |
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 8eb2b1e..efd4ca6 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -71,6 +71,8 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
71 | public event ChangeDelegate OnRegionInfoChange; | 71 | public event ChangeDelegate OnRegionInfoChange; |
72 | public event ChangeDelegate OnEstateInfoChange; | 72 | public event ChangeDelegate OnEstateInfoChange; |
73 | public event MessageDelegate OnEstateMessage; | 73 | public event MessageDelegate OnEstateMessage; |
74 | public event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest; | ||
75 | public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest; | ||
74 | 76 | ||
75 | private int m_delayCount = 0; | 77 | private int m_delayCount = 0; |
76 | 78 | ||
@@ -1193,13 +1195,20 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1193 | 1195 | ||
1194 | 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) |
1195 | { | 1197 | { |
1198 | EstateTeleportOneUserHomeRequest evOverride = OnEstateTeleportOneUserHomeRequest; | ||
1199 | if(evOverride != null) | ||
1200 | { | ||
1201 | evOverride(remover_client, invoice, senderID, prey); | ||
1202 | return; | ||
1203 | } | ||
1204 | |||
1196 | if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) | 1205 | if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) |
1197 | return; | 1206 | return; |
1198 | 1207 | ||
1199 | if (prey != UUID.Zero) | 1208 | if (prey != UUID.Zero) |
1200 | { | 1209 | { |
1201 | ScenePresence s = Scene.GetScenePresence(prey); | 1210 | ScenePresence s = Scene.GetScenePresence(prey); |
1202 | if (s != null) | 1211 | if (s != null && !s.IsDeleted && !s.IsInTransit) |
1203 | { | 1212 | { |
1204 | if (!Scene.TeleportClientHome(prey, s.ControllingClient)) | 1213 | if (!Scene.TeleportClientHome(prey, s.ControllingClient)) |
1205 | { | 1214 | { |
@@ -1212,6 +1221,13 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1212 | 1221 | ||
1213 | private void handleEstateTeleportAllUsersHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID) | 1222 | private void handleEstateTeleportAllUsersHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID) |
1214 | { | 1223 | { |
1224 | EstateTeleportAllUsersHomeRequest evOverride = OnEstateTeleportAllUsersHomeRequest; | ||
1225 | if(evOverride != null) | ||
1226 | { | ||
1227 | evOverride(remover_client, invoice, senderID); | ||
1228 | return; | ||
1229 | } | ||
1230 | |||
1215 | if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) | 1231 | if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) |
1216 | return; | 1232 | return; |
1217 | 1233 | ||
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs index 73e706c..2c0c882 100644 --- a/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs +++ b/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs | |||
@@ -46,16 +46,19 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | 47 | ||
48 | protected XEstateModule m_EstateModule; | 48 | protected XEstateModule m_EstateModule; |
49 | private string token; | ||
49 | 50 | ||
50 | public EstateConnector(XEstateModule module) | 51 | public EstateConnector(XEstateModule module, string _token) |
51 | { | 52 | { |
52 | m_EstateModule = module; | 53 | m_EstateModule = module; |
54 | token = _token; | ||
53 | } | 55 | } |
54 | 56 | ||
55 | public void SendTeleportHomeOneUser(uint EstateID, UUID PreyID) | 57 | public void SendTeleportHomeOneUser(uint EstateID, UUID PreyID) |
56 | { | 58 | { |
57 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | 59 | Dictionary<string, object> sendData = new Dictionary<string, object>(); |
58 | sendData["METHOD"] = "teleport_home_one_user"; | 60 | sendData["METHOD"] = "teleport_home_one_user"; |
61 | sendData["TOKEN"] = token; | ||
59 | 62 | ||
60 | sendData["EstateID"] = EstateID.ToString(); | 63 | sendData["EstateID"] = EstateID.ToString(); |
61 | sendData["PreyID"] = PreyID.ToString(); | 64 | sendData["PreyID"] = PreyID.ToString(); |
@@ -67,6 +70,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
67 | { | 70 | { |
68 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | 71 | Dictionary<string, object> sendData = new Dictionary<string, object>(); |
69 | sendData["METHOD"] = "teleport_home_all_users"; | 72 | sendData["METHOD"] = "teleport_home_all_users"; |
73 | sendData["TOKEN"] = token; | ||
70 | 74 | ||
71 | sendData["EstateID"] = EstateID.ToString(); | 75 | sendData["EstateID"] = EstateID.ToString(); |
72 | 76 | ||
@@ -77,6 +81,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
77 | { | 81 | { |
78 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | 82 | Dictionary<string, object> sendData = new Dictionary<string, object>(); |
79 | sendData["METHOD"] = "update_covenant"; | 83 | sendData["METHOD"] = "update_covenant"; |
84 | sendData["TOKEN"] = token; | ||
80 | 85 | ||
81 | sendData["CovenantID"] = CovenantID.ToString(); | 86 | sendData["CovenantID"] = CovenantID.ToString(); |
82 | sendData["EstateID"] = EstateID.ToString(); | 87 | sendData["EstateID"] = EstateID.ToString(); |
@@ -99,6 +104,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
99 | { | 104 | { |
100 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | 105 | Dictionary<string, object> sendData = new Dictionary<string, object>(); |
101 | sendData["METHOD"] = "update_estate"; | 106 | sendData["METHOD"] = "update_estate"; |
107 | sendData["TOKEN"] = token; | ||
102 | 108 | ||
103 | sendData["EstateID"] = EstateID.ToString(); | 109 | sendData["EstateID"] = EstateID.ToString(); |
104 | 110 | ||
@@ -119,6 +125,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
119 | { | 125 | { |
120 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | 126 | Dictionary<string, object> sendData = new Dictionary<string, object>(); |
121 | sendData["METHOD"] = "estate_message"; | 127 | sendData["METHOD"] = "estate_message"; |
128 | sendData["TOKEN"] = token; | ||
122 | 129 | ||
123 | sendData["EstateID"] = EstateID.ToString(); | 130 | sendData["EstateID"] = EstateID.ToString(); |
124 | sendData["FromID"] = FromID.ToString(); | 131 | sendData["FromID"] = FromID.ToString(); |
@@ -132,47 +139,43 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
132 | { | 139 | { |
133 | List<UUID> regions = m_EstateModule.Scenes[0].GetEstateRegions((int)EstateID); | 140 | List<UUID> regions = m_EstateModule.Scenes[0].GetEstateRegions((int)EstateID); |
134 | 141 | ||
135 | UUID ScopeID = UUID.Zero; | 142 | // Don't send to the same instance twice |
143 | List<string> done = new List<string>(); | ||
136 | 144 | ||
137 | // Handle local regions locally | 145 | // Handle local regions locally |
138 | // | ||
139 | lock (m_EstateModule.Scenes) | 146 | lock (m_EstateModule.Scenes) |
140 | { | 147 | { |
141 | foreach (Scene s in m_EstateModule.Scenes) | 148 | foreach (Scene s in m_EstateModule.Scenes) |
142 | { | 149 | { |
143 | if (regions.Contains(s.RegionInfo.RegionID)) | 150 | RegionInfo sreg = s.RegionInfo; |
151 | if (regions.Contains(sreg.RegionID)) | ||
144 | { | 152 | { |
145 | // All regions in one estate are in the same scope. | 153 | string url = sreg.ExternalHostName + ":" + sreg.HttpPort; |
146 | // Use that scope. | 154 | regions.Remove(sreg.RegionID); |
147 | // | 155 | if(!done.Contains(url)) // we may have older regs with same url lost in dbs |
148 | ScopeID = s.RegionInfo.ScopeID; | 156 | done.Add(url); |
149 | regions.Remove(s.RegionInfo.RegionID); | ||
150 | } | 157 | } |
151 | } | 158 | } |
152 | } | 159 | } |
153 | 160 | ||
154 | // Our own region should always be in the above list. | 161 | if(regions.Count == 0) |
155 | // In a standalone this would not be true. But then, | 162 | return; |
156 | // Scope ID is not relevat there. Use first scope. | ||
157 | // | ||
158 | if (ScopeID == UUID.Zero) | ||
159 | ScopeID = m_EstateModule.Scenes[0].RegionInfo.ScopeID; | ||
160 | 163 | ||
161 | // Don't send to the same instance twice | 164 | Scene baseScene = m_EstateModule.Scenes[0]; |
162 | // | 165 | UUID ScopeID = baseScene.RegionInfo.ScopeID; |
163 | List<string> done = new List<string>(); | 166 | IGridService gridService = baseScene.GridService; |
167 | if(gridService == null) | ||
168 | return; | ||
164 | 169 | ||
165 | // Send to remote regions | 170 | // Send to remote regions |
166 | // | ||
167 | foreach (UUID regionID in regions) | 171 | foreach (UUID regionID in regions) |
168 | { | 172 | { |
169 | GridRegion region = m_EstateModule.Scenes[0].GridService.GetRegionByUUID(ScopeID, regionID); | 173 | GridRegion region = gridService.GetRegionByUUID(ScopeID, regionID); |
170 | if (region != null) | 174 | if (region != null) |
171 | { | 175 | { |
172 | string url = "http://" + region.ExternalHostName + ":" + region.HttpPort; | 176 | string url = region.ExternalHostName + ":" + region.HttpPort; |
173 | if (done.Contains(url)) | 177 | if(done.Contains(url)) |
174 | continue; | 178 | continue; |
175 | |||
176 | Call(region, sendData); | 179 | Call(region, sendData); |
177 | done.Add(url); | 180 | done.Add(url); |
178 | } | 181 | } |
@@ -185,7 +188,12 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
185 | // m_log.DebugFormat("[XESTATE CONNECTOR]: queryString = {0}", reqString); | 188 | // m_log.DebugFormat("[XESTATE CONNECTOR]: queryString = {0}", reqString); |
186 | try | 189 | try |
187 | { | 190 | { |
188 | string url = "http://" + region.ExternalHostName + ":" + region.HttpPort; | 191 | string url = ""; |
192 | if(string.IsNullOrEmpty(region.ServerURI)) | ||
193 | url = "http://" + region.ExternalHostName + ":" + region.HttpPort; | ||
194 | else | ||
195 | url = region.ServerURI; | ||
196 | |||
189 | string reply = SynchronousRestFormsRequester.MakeRequest("POST", | 197 | string reply = SynchronousRestFormsRequester.MakeRequest("POST", |
190 | url + "/estate", | 198 | url + "/estate", |
191 | reqString); | 199 | reqString); |
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs index 4bb3799..a7195af 100644 --- a/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs | |||
@@ -51,6 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
51 | 51 | ||
52 | protected List<Scene> m_Scenes = new List<Scene>(); | 52 | protected List<Scene> m_Scenes = new List<Scene>(); |
53 | protected bool m_InInfoUpdate = false; | 53 | protected bool m_InInfoUpdate = false; |
54 | private string token = "7db8eh2gvgg45jj"; | ||
54 | 55 | ||
55 | public bool InInfoUpdate | 56 | public bool InInfoUpdate |
56 | { | 57 | { |
@@ -69,17 +70,19 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
69 | { | 70 | { |
70 | int port = 0; | 71 | int port = 0; |
71 | 72 | ||
72 | IConfig estateConfig = config.Configs["Estate"]; | 73 | IConfig estateConfig = config.Configs["Estates"]; |
73 | if (estateConfig != null) | 74 | if (estateConfig != null) |
74 | { | 75 | { |
75 | port = estateConfig.GetInt("Port", 0); | 76 | port = estateConfig.GetInt("Port", 0); |
77 | // this will need to came from somewhere else | ||
78 | token = estateConfig.GetString("Token", token); | ||
76 | } | 79 | } |
77 | 80 | ||
78 | m_EstateConnector = new EstateConnector(this); | 81 | m_EstateConnector = new EstateConnector(this, token); |
79 | 82 | ||
80 | // Instantiate the request handler | 83 | // Instantiate the request handler |
81 | IHttpServer server = MainServer.GetHttpServer((uint)port); | 84 | IHttpServer server = MainServer.GetHttpServer((uint)port); |
82 | server.AddStreamHandler(new EstateRequestHandler(this)); | 85 | server.AddStreamHandler(new EstateRequestHandler(this, token)); |
83 | } | 86 | } |
84 | 87 | ||
85 | public void PostInitialise() | 88 | public void PostInitialise() |
@@ -94,8 +97,6 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
94 | { | 97 | { |
95 | lock (m_Scenes) | 98 | lock (m_Scenes) |
96 | m_Scenes.Add(scene); | 99 | m_Scenes.Add(scene); |
97 | |||
98 | scene.EventManager.OnNewClient += OnNewClient; | ||
99 | } | 100 | } |
100 | 101 | ||
101 | public void RegionLoaded(Scene scene) | 102 | public void RegionLoaded(Scene scene) |
@@ -105,12 +106,12 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
105 | em.OnRegionInfoChange += OnRegionInfoChange; | 106 | em.OnRegionInfoChange += OnRegionInfoChange; |
106 | em.OnEstateInfoChange += OnEstateInfoChange; | 107 | em.OnEstateInfoChange += OnEstateInfoChange; |
107 | em.OnEstateMessage += OnEstateMessage; | 108 | em.OnEstateMessage += OnEstateMessage; |
109 | em.OnEstateTeleportOneUserHomeRequest += OnEstateTeleportOneUserHomeRequest; | ||
110 | em.OnEstateTeleportAllUsersHomeRequest += OnEstateTeleportAllUsersHomeRequest; | ||
108 | } | 111 | } |
109 | 112 | ||
110 | public void RemoveRegion(Scene scene) | 113 | public void RemoveRegion(Scene scene) |
111 | { | 114 | { |
112 | scene.EventManager.OnNewClient -= OnNewClient; | ||
113 | |||
114 | lock (m_Scenes) | 115 | lock (m_Scenes) |
115 | m_Scenes.Remove(scene); | 116 | m_Scenes.Remove(scene); |
116 | } | 117 | } |
@@ -181,13 +182,6 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
181 | m_EstateConnector.SendEstateMessage(estateID, FromID, FromName, Message); | 182 | m_EstateConnector.SendEstateMessage(estateID, FromID, FromName, Message); |
182 | } | 183 | } |
183 | 184 | ||
184 | private void OnNewClient(IClientAPI client) | ||
185 | { | ||
186 | client.OnEstateTeleportOneUserHomeRequest += OnEstateTeleportOneUserHomeRequest; | ||
187 | client.OnEstateTeleportAllUsersHomeRequest += OnEstateTeleportAllUsersHomeRequest; | ||
188 | |||
189 | } | ||
190 | |||
191 | private void OnEstateTeleportOneUserHomeRequest(IClientAPI client, UUID invoice, UUID senderID, UUID prey) | 185 | private void OnEstateTeleportOneUserHomeRequest(IClientAPI client, UUID invoice, UUID senderID, UUID prey) |
192 | { | 186 | { |
193 | if (prey == UUID.Zero) | 187 | if (prey == UUID.Zero) |
@@ -205,16 +199,18 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
205 | 199 | ||
206 | foreach (Scene s in Scenes) | 200 | foreach (Scene s in Scenes) |
207 | { | 201 | { |
208 | if (s == scene) | ||
209 | continue; // Already handles by estate module | ||
210 | if (s.RegionInfo.EstateSettings.EstateID != estateID) | 202 | if (s.RegionInfo.EstateSettings.EstateID != estateID) |
211 | continue; | 203 | continue; |
212 | 204 | ||
213 | ScenePresence p = scene.GetScenePresence(prey); | 205 | ScenePresence p = scene.GetScenePresence(prey); |
214 | if (p != null && !p.IsChildAgent) | 206 | if (p != null && !p.IsChildAgent ) |
215 | { | 207 | { |
216 | p.ControllingClient.SendTeleportStart(16); | 208 | if(!p.IsDeleted && !p.IsInTransit) |
217 | scene.TeleportClientHome(prey, p.ControllingClient); | 209 | { |
210 | p.ControllingClient.SendTeleportStart(16); | ||
211 | scene.TeleportClientHome(prey, p.ControllingClient); | ||
212 | } | ||
213 | return; | ||
218 | } | 214 | } |
219 | } | 215 | } |
220 | 216 | ||
@@ -235,8 +231,6 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
235 | 231 | ||
236 | foreach (Scene s in Scenes) | 232 | foreach (Scene s in Scenes) |
237 | { | 233 | { |
238 | if (s == scene) | ||
239 | continue; // Already handles by estate module | ||
240 | if (s.RegionInfo.EstateSettings.EstateID != estateID) | 234 | if (s.RegionInfo.EstateSettings.EstateID != estateID) |
241 | continue; | 235 | continue; |
242 | 236 | ||
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs index 1dcaed3..756b54d 100644 --- a/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs +++ b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs | |||
@@ -48,11 +48,13 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
48 | 48 | ||
49 | protected XEstateModule m_EstateModule; | 49 | protected XEstateModule m_EstateModule; |
50 | protected Object m_RequestLock = new Object(); | 50 | protected Object m_RequestLock = new Object(); |
51 | private string token; | ||
51 | 52 | ||
52 | public EstateRequestHandler(XEstateModule fmodule) | 53 | public EstateRequestHandler(XEstateModule fmodule, string _token) |
53 | : base("POST", "/estate") | 54 | : base("POST", "/estate") |
54 | { | 55 | { |
55 | m_EstateModule = fmodule; | 56 | m_EstateModule = fmodule; |
57 | token = _token; | ||
56 | } | 58 | } |
57 | 59 | ||
58 | protected override byte[] ProcessRequest(string path, Stream requestData, | 60 | protected override byte[] ProcessRequest(string path, Stream requestData, |
@@ -75,6 +77,15 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
75 | if (!request.ContainsKey("METHOD")) | 77 | if (!request.ContainsKey("METHOD")) |
76 | return FailureResult(); | 78 | return FailureResult(); |
77 | 79 | ||
80 | if (!request.ContainsKey("TOKEN")) | ||
81 | return FailureResult(); | ||
82 | |||
83 | string reqToken = request["TOKEN"].ToString(); | ||
84 | request.Remove("TOKEN"); | ||
85 | |||
86 | if(token != reqToken) | ||
87 | return FailureResult(); | ||
88 | |||
78 | string method = request["METHOD"].ToString(); | 89 | string method = request["METHOD"].ToString(); |
79 | request.Remove("METHOD"); | 90 | request.Remove("METHOD"); |
80 | 91 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs index 461c880..6b8b999 100644 --- a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs | |||
@@ -39,6 +39,8 @@ namespace OpenSim.Region.Framework.Interfaces | |||
39 | event ChangeDelegate OnRegionInfoChange; | 39 | event ChangeDelegate OnRegionInfoChange; |
40 | event ChangeDelegate OnEstateInfoChange; | 40 | event ChangeDelegate OnEstateInfoChange; |
41 | event MessageDelegate OnEstateMessage; | 41 | event MessageDelegate OnEstateMessage; |
42 | event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest; | ||
43 | event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest; | ||
42 | 44 | ||
43 | uint GetRegionFlags(); | 45 | uint GetRegionFlags(); |
44 | bool IsManager(UUID avatarID); | 46 | bool IsManager(UUID avatarID); |