diff options
Diffstat (limited to 'OpenSim/Region')
5 files changed, 164 insertions, 103 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index f3fd249..6a0da7b 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -3895,7 +3895,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3895 | return false; | 3895 | return false; |
3896 | } | 3896 | } |
3897 | 3897 | ||
3898 | public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID) | 3898 | public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID) |
3899 | |||
3899 | { | 3900 | { |
3900 | EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); | 3901 | EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); |
3901 | packet.AgentData.TransactionID = UUID.Random(); | 3902 | packet.AgentData.TransactionID = UUID.Random(); |
@@ -3904,26 +3905,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3904 | packet.MethodData.Invoice = invoice; | 3905 | packet.MethodData.Invoice = invoice; |
3905 | packet.MethodData.Method = Utils.StringToBytes("setaccess"); | 3906 | packet.MethodData.Method = Utils.StringToBytes("setaccess"); |
3906 | 3907 | ||
3907 | EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + EstateManagers.Length]; | 3908 | EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + Data.Length]; |
3908 | 3909 | ||
3909 | for (int i = 0; i < (6 + EstateManagers.Length); i++) | 3910 | for (int i = 0; i < (6 + Data.Length); i++) |
3910 | { | 3911 | { |
3911 | returnblock[i] = new EstateOwnerMessagePacket.ParamListBlock(); | 3912 | returnblock[i] = new EstateOwnerMessagePacket.ParamListBlock(); |
3912 | } | 3913 | } |
3913 | int j = 0; | 3914 | int j = 0; |
3914 | 3915 | ||
3915 | returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++; | 3916 | returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++; |
3916 | returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateManagers).ToString()); j++; | 3917 | returnblock[j].Parameter = Utils.StringToBytes(code.ToString()); j++; |
3917 | returnblock[j].Parameter = Utils.StringToBytes("0"); j++; | 3918 | returnblock[j].Parameter = Utils.StringToBytes("0"); j++; |
3918 | returnblock[j].Parameter = Utils.StringToBytes("0"); j++; | 3919 | returnblock[j].Parameter = Utils.StringToBytes("0"); j++; |
3919 | returnblock[j].Parameter = Utils.StringToBytes("0"); j++; | 3920 | returnblock[j].Parameter = Utils.StringToBytes("0"); j++; |
3920 | returnblock[j].Parameter = Utils.StringToBytes(EstateManagers.Length.ToString()); j++; | 3921 | returnblock[j].Parameter = Utils.StringToBytes(Data.Length.ToString()); j++; |
3921 | for (int i = 0; i < EstateManagers.Length; i++) | 3922 | for (int i = 0; i < Data.Length; i++) |
3922 | { | 3923 | { |
3923 | returnblock[j].Parameter = EstateManagers[i].GetBytes(); j++; | 3924 | returnblock[j].Parameter = Data[i].GetBytes(); j++; |
3924 | } | 3925 | } |
3925 | packet.ParamList = returnblock; | 3926 | packet.ParamList = returnblock; |
3926 | packet.Header.Reliable = false; | 3927 | packet.Header.Reliable = true; |
3927 | OutPacket(packet, ThrottleOutPacketType.Task); | 3928 | OutPacket(packet, ThrottleOutPacketType.Task); |
3928 | } | 3929 | } |
3929 | 3930 | ||
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index b1dcb14..deade6b 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -75,10 +75,21 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
75 | m_scene.RegionInfo.EstateSettings.AbuseEmail, | 75 | m_scene.RegionInfo.EstateSettings.AbuseEmail, |
76 | estateOwner); | 76 | estateOwner); |
77 | 77 | ||
78 | remote_client.SendEstateManagersList(invoice, | 78 | remote_client.SendEstateList(invoice, |
79 | (int)Constants.EstateAccessCodex.EstateManagers, | ||
79 | m_scene.RegionInfo.EstateSettings.EstateManagers, | 80 | m_scene.RegionInfo.EstateSettings.EstateManagers, |
80 | m_scene.RegionInfo.EstateSettings.EstateID); | 81 | m_scene.RegionInfo.EstateSettings.EstateID); |
81 | 82 | ||
83 | remote_client.SendEstateList(invoice, | ||
84 | (int)Constants.EstateAccessCodex.AccessOptions, | ||
85 | m_scene.RegionInfo.EstateSettings.EstateAccess, | ||
86 | m_scene.RegionInfo.EstateSettings.EstateID); | ||
87 | |||
88 | remote_client.SendEstateList(invoice, | ||
89 | (int)Constants.EstateAccessCodex.AllowedGroups, | ||
90 | m_scene.RegionInfo.EstateSettings.EstateGroups, | ||
91 | m_scene.RegionInfo.EstateSettings.EstateID); | ||
92 | |||
82 | remote_client.SendBannedUserList(invoice, | 93 | remote_client.SendBannedUserList(invoice, |
83 | m_scene.RegionInfo.EstateSettings.EstateBans, | 94 | m_scene.RegionInfo.EstateSettings.EstateBans, |
84 | m_scene.RegionInfo.EstateSettings.EstateID); | 95 | m_scene.RegionInfo.EstateSettings.EstateID); |
@@ -233,127 +244,176 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
233 | if (user == m_scene.RegionInfo.MasterAvatarAssignedUUID) | 244 | if (user == m_scene.RegionInfo.MasterAvatarAssignedUUID) |
234 | return; // never process owner | 245 | return; // never process owner |
235 | 246 | ||
236 | switch (estateAccessType) | 247 | if ((estateAccessType & 4) != 0) // User add |
237 | { | 248 | { |
238 | case 64: | 249 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) |
239 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) | 250 | { |
240 | { | 251 | m_scene.RegionInfo.EstateSettings.AddEstateUser(user); |
241 | EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; | 252 | m_scene.RegionInfo.EstateSettings.Save(); |
242 | 253 | remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); | |
243 | bool alreadyInList = false; | 254 | } |
244 | 255 | else | |
245 | for (int i = 0; i < banlistcheck.Length; i++) | 256 | { |
246 | { | 257 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); |
247 | if (user == banlistcheck[i].BannedUserID) | 258 | } |
248 | { | ||
249 | alreadyInList = true; | ||
250 | break; | ||
251 | } | ||
252 | |||
253 | } | ||
254 | if (!alreadyInList) | ||
255 | { | ||
256 | 259 | ||
257 | EstateBan item = new EstateBan(); | 260 | } |
261 | if ((estateAccessType & 8) != 0) // User remove | ||
262 | { | ||
263 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) | ||
264 | { | ||
265 | m_scene.RegionInfo.EstateSettings.RemoveEstateUser(user); | ||
266 | m_scene.RegionInfo.EstateSettings.Save(); | ||
258 | 267 | ||
259 | item.BannedUserID = user; | 268 | remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AccessOptions, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); |
260 | item.EstateID = m_scene.RegionInfo.EstateSettings.EstateID; | 269 | } |
261 | item.BannedHostAddress = "0.0.0.0"; | 270 | else |
262 | item.BannedHostIPMask = "0.0.0.0"; | 271 | { |
272 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
273 | } | ||
274 | } | ||
275 | if ((estateAccessType & 16) != 0) // Group add | ||
276 | { | ||
277 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) | ||
278 | { | ||
279 | m_scene.RegionInfo.EstateSettings.AddEstateGroup(user); | ||
280 | m_scene.RegionInfo.EstateSettings.Save(); | ||
281 | remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); | ||
282 | } | ||
283 | else | ||
284 | { | ||
285 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
286 | } | ||
287 | } | ||
288 | if ((estateAccessType & 32) != 0) // Group remove | ||
289 | { | ||
290 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) | ||
291 | { | ||
292 | m_scene.RegionInfo.EstateSettings.RemoveEstateGroup(user); | ||
293 | m_scene.RegionInfo.EstateSettings.Save(); | ||
263 | 294 | ||
264 | m_scene.RegionInfo.EstateSettings.AddBan(item); | 295 | remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.AllowedGroups, m_scene.RegionInfo.EstateSettings.EstateAccess, m_scene.RegionInfo.EstateSettings.EstateID); |
265 | m_scene.RegionInfo.EstateSettings.Save(); | 296 | } |
297 | else | ||
298 | { | ||
299 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
300 | } | ||
301 | } | ||
302 | if ((estateAccessType & 64) != 0) // Ban add | ||
303 | { | ||
304 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) | ||
305 | { | ||
306 | EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; | ||
266 | 307 | ||
267 | ScenePresence s = m_scene.GetScenePresence(user); | 308 | bool alreadyInList = false; |
268 | if (s != null) | ||
269 | { | ||
270 | if (!s.IsChildAgent) | ||
271 | { | ||
272 | s.ControllingClient.SendTeleportLocationStart(); | ||
273 | m_scene.TeleportClientHome(user, s.ControllingClient); | ||
274 | } | ||
275 | } | ||
276 | 309 | ||
277 | } | 310 | for (int i = 0; i < banlistcheck.Length; i++) |
278 | else | 311 | { |
312 | if (user == banlistcheck[i].BannedUserID) | ||
279 | { | 313 | { |
280 | remote_client.SendAlertMessage("User is already on the region ban list"); | 314 | alreadyInList = true; |
315 | break; | ||
281 | } | 316 | } |
282 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); | 317 | |
283 | remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); | ||
284 | } | ||
285 | else | ||
286 | { | ||
287 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
288 | } | 318 | } |
289 | break; | 319 | if (!alreadyInList) |
290 | case 128: | ||
291 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) | ||
292 | { | 320 | { |
293 | EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; | ||
294 | 321 | ||
295 | bool alreadyInList = false; | 322 | EstateBan item = new EstateBan(); |
296 | EstateBan listitem = null; | 323 | |
324 | item.BannedUserID = user; | ||
325 | item.EstateID = m_scene.RegionInfo.EstateSettings.EstateID; | ||
326 | item.BannedHostAddress = "0.0.0.0"; | ||
327 | item.BannedHostIPMask = "0.0.0.0"; | ||
297 | 328 | ||
298 | for (int i = 0; i < banlistcheck.Length; i++) | 329 | m_scene.RegionInfo.EstateSettings.AddBan(item); |
330 | m_scene.RegionInfo.EstateSettings.Save(); | ||
331 | |||
332 | ScenePresence s = m_scene.GetScenePresence(user); | ||
333 | if (s != null) | ||
299 | { | 334 | { |
300 | if (user == banlistcheck[i].BannedUserID) | 335 | if (!s.IsChildAgent) |
301 | { | 336 | { |
302 | alreadyInList = true; | 337 | s.ControllingClient.SendTeleportLocationStart(); |
303 | listitem = banlistcheck[i]; | 338 | m_scene.TeleportClientHome(user, s.ControllingClient); |
304 | break; | ||
305 | } | 339 | } |
306 | |||
307 | } | 340 | } |
308 | if (alreadyInList && listitem != null) | 341 | |
309 | { | ||
310 | m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); | ||
311 | m_scene.RegionInfo.EstateSettings.Save(); | ||
312 | } | ||
313 | else | ||
314 | { | ||
315 | remote_client.SendAlertMessage("User is not on the region ban list"); | ||
316 | } | ||
317 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); | ||
318 | remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); | ||
319 | } | 342 | } |
320 | else | 343 | else |
321 | { | 344 | { |
322 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | 345 | remote_client.SendAlertMessage("User is already on the region ban list"); |
323 | } | 346 | } |
324 | break; | 347 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); |
325 | case 256: | 348 | remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); |
349 | } | ||
350 | else | ||
351 | { | ||
352 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
353 | } | ||
354 | } | ||
355 | if ((estateAccessType & 128) != 0) // Ban remove | ||
356 | { | ||
357 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, false) || m_scene.Permissions.BypassPermissions()) | ||
358 | { | ||
359 | EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; | ||
326 | 360 | ||
327 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) | 361 | bool alreadyInList = false; |
328 | { | 362 | EstateBan listitem = null; |
329 | m_scene.RegionInfo.EstateSettings.AddEstateManager(user); | 363 | |
330 | m_scene.RegionInfo.EstateSettings.Save(); | 364 | for (int i = 0; i < banlistcheck.Length; i++) |
331 | remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); | ||
332 | } | ||
333 | else | ||
334 | { | 365 | { |
335 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | 366 | if (user == banlistcheck[i].BannedUserID) |
336 | } | 367 | { |
368 | alreadyInList = true; | ||
369 | listitem = banlistcheck[i]; | ||
370 | break; | ||
371 | } | ||
337 | 372 | ||
338 | break; | 373 | } |
339 | case 512: | 374 | if (alreadyInList && listitem != null) |
340 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) | ||
341 | { | 375 | { |
342 | m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user); | 376 | m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.BannedUserID); |
343 | m_scene.RegionInfo.EstateSettings.Save(); | 377 | m_scene.RegionInfo.EstateSettings.Save(); |
344 | |||
345 | remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); | ||
346 | } | 378 | } |
347 | else | 379 | else |
348 | { | 380 | { |
349 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | 381 | remote_client.SendAlertMessage("User is not on the region ban list"); |
350 | } | 382 | } |
351 | break; | 383 | //m_scene.RegionInfo.regionBanlist.Add(Manager(user); |
352 | 384 | remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); | |
353 | default: | 385 | } |
386 | else | ||
387 | { | ||
388 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
389 | } | ||
390 | } | ||
391 | if ((estateAccessType & 256) != 0) // Manager add | ||
392 | { | ||
393 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) | ||
394 | { | ||
395 | m_scene.RegionInfo.EstateSettings.AddEstateManager(user); | ||
396 | m_scene.RegionInfo.EstateSettings.Save(); | ||
397 | remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); | ||
398 | } | ||
399 | else | ||
400 | { | ||
401 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
402 | } | ||
403 | } | ||
404 | if ((estateAccessType & 512) != 0) // Manager remove | ||
405 | { | ||
406 | if (m_scene.Permissions.CanIssueEstateCommand(remote_client.AgentId, true) || m_scene.Permissions.BypassPermissions()) | ||
407 | { | ||
408 | m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user); | ||
409 | m_scene.RegionInfo.EstateSettings.Save(); | ||
354 | 410 | ||
355 | m_log.ErrorFormat("EstateOwnerMessage: Unknown EstateAccessType requested in estateAccessDelta: {0}", estateAccessType.ToString()); | 411 | remote_client.SendEstateList(invoice, (int)Constants.EstateAccessCodex.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); |
356 | break; | 412 | } |
413 | else | ||
414 | { | ||
415 | remote_client.SendAlertMessage("Method EstateAccessDelta Failed, you don't have permissions"); | ||
416 | } | ||
357 | } | 417 | } |
358 | } | 418 | } |
359 | 419 | ||
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 3659711..fd97eaa 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | |||
@@ -879,7 +879,7 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
879 | { | 879 | { |
880 | } | 880 | } |
881 | 881 | ||
882 | public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID) | 882 | public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID) |
883 | { | 883 | { |
884 | } | 884 | } |
885 | 885 | ||
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 671cfef..f966376 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -1220,7 +1220,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
1220 | 1220 | ||
1221 | } | 1221 | } |
1222 | 1222 | ||
1223 | public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID) | 1223 | public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID) |
1224 | { | 1224 | { |
1225 | 1225 | ||
1226 | } | 1226 | } |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index 1639b7e..23398f7 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -897,7 +897,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
897 | { | 897 | { |
898 | } | 898 | } |
899 | 899 | ||
900 | public void SendEstateManagersList(UUID invoice, UUID[] EstateManagers, uint estateID) | 900 | public void SendEstateList(UUID invoice, int code, UUID[] Data, uint estateID) |
901 | { | 901 | { |
902 | } | 902 | } |
903 | 903 | ||