aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs84
2 files changed, 62 insertions, 26 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 94bba83..1c503aa 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -550,7 +550,7 @@ namespace OpenSim.Region.CoreModules.World.Land
550 550
551 public void ClientOnParcelAccessListUpdateRequest(UUID agentID, 551 public void ClientOnParcelAccessListUpdateRequest(UUID agentID,
552 uint flags, int landLocalID, UUID transactionID, int sequenceID, 552 uint flags, int landLocalID, UUID transactionID, int sequenceID,
553 int sections, List<ParcelManager.ParcelAccessEntry> entries, 553 int sections, List<LandAccessEntry> entries,
554 IClientAPI remote_client) 554 IClientAPI remote_client)
555 { 555 {
556 // Flags is the list to update, it can mean either the ban or 556 // Flags is the list to update, it can mean either the ban or
@@ -1712,4 +1712,4 @@ namespace OpenSim.Region.CoreModules.World.Land
1712 MainConsole.Instance.Output(report.ToString()); 1712 MainConsole.Instance.Output(report.ToString());
1713 } 1713 }
1714 } 1714 }
1715} \ No newline at end of file 1715}
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 79b13c3..3b4336f 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -418,13 +418,21 @@ namespace OpenSim.Region.CoreModules.World.Land
418 418
419 public bool IsBannedFromLand(UUID avatar) 419 public bool IsBannedFromLand(UUID avatar)
420 { 420 {
421 if (m_scene.Permissions.CanEditParcelProperties(avatar, this, 0)) 421 ExpireAccessList();
422
423 if (m_scene.Permissions.IsAdministrator(avatar))
424 return false;
425
426 if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar))
427 return false;
428
429 if (avatar == LandData.OwnerID)
422 return false; 430 return false;
423 431
424 if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0) 432 if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0)
425 { 433 {
426 if (LandData.ParcelAccessList.FindIndex( 434 if (LandData.ParcelAccessList.FindIndex(
427 delegate(ParcelManager.ParcelAccessEntry e) 435 delegate(LandAccessEntry e)
428 { 436 {
429 if (e.AgentID == avatar && e.Flags == AccessList.Ban) 437 if (e.AgentID == avatar && e.Flags == AccessList.Ban)
430 return true; 438 return true;
@@ -439,13 +447,21 @@ namespace OpenSim.Region.CoreModules.World.Land
439 447
440 public bool IsRestrictedFromLand(UUID avatar) 448 public bool IsRestrictedFromLand(UUID avatar)
441 { 449 {
442 if (m_scene.Permissions.CanEditParcelProperties(avatar, this, 0)) 450 ExpireAccessList();
451
452 if (m_scene.Permissions.IsAdministrator(avatar))
453 return false;
454
455 if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar))
456 return false;
457
458 if (avatar == LandData.OwnerID)
443 return false; 459 return false;
444 460
445 if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0) 461 if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0)
446 { 462 {
447 if (LandData.ParcelAccessList.FindIndex( 463 if (LandData.ParcelAccessList.FindIndex(
448 delegate(ParcelManager.ParcelAccessEntry e) 464 delegate(LandAccessEntry e)
449 { 465 {
450 if (e.AgentID == avatar && e.Flags == AccessList.Access) 466 if (e.AgentID == avatar && e.Flags == AccessList.Access)
451 return true; 467 return true;
@@ -511,19 +527,24 @@ namespace OpenSim.Region.CoreModules.World.Land
511 527
512 #region AccessList Functions 528 #region AccessList Functions
513 529
514 public List<UUID> CreateAccessListArrayByFlag(AccessList flag) 530 public List<LandAccessEntry> CreateAccessListArrayByFlag(AccessList flag)
515 { 531 {
516 List<UUID> list = new List<UUID>(); 532 ExpireAccessList();
517 foreach (ParcelManager.ParcelAccessEntry entry in LandData.ParcelAccessList) 533
534 List<LandAccessEntry> list = new List<LandAccessEntry>();
535 foreach (LandAccessEntry entry in LandData.ParcelAccessList)
518 { 536 {
519 if (entry.Flags == flag) 537 if (entry.Flags == flag)
520 { 538 list.Add(entry);
521 list.Add(entry.AgentID);
522 }
523 } 539 }
524 if (list.Count == 0) 540 if (list.Count == 0)
525 { 541 {
526 list.Add(UUID.Zero); 542 LandAccessEntry e = new LandAccessEntry();
543 e.AgentID = UUID.Zero;
544 e.Flags = 0;
545 e.Expires = 0;
546
547 list.Add(e);
527 } 548 }
528 549
529 return list; 550 return list;
@@ -535,20 +556,20 @@ namespace OpenSim.Region.CoreModules.World.Land
535 556
536 if (flags == (uint) AccessList.Access || flags == (uint) AccessList.Both) 557 if (flags == (uint) AccessList.Access || flags == (uint) AccessList.Both)
537 { 558 {
538 List<UUID> avatars = CreateAccessListArrayByFlag(AccessList.Access); 559 List<LandAccessEntry> accessEntries = CreateAccessListArrayByFlag(AccessList.Access);
539 remote_client.SendLandAccessListData(avatars,(uint) AccessList.Access,LandData.LocalID); 560 remote_client.SendLandAccessListData(accessEntries,(uint) AccessList.Access,LandData.LocalID);
540 } 561 }
541 562
542 if (flags == (uint) AccessList.Ban || flags == (uint) AccessList.Both) 563 if (flags == (uint) AccessList.Ban || flags == (uint) AccessList.Both)
543 { 564 {
544 List<UUID> avatars = CreateAccessListArrayByFlag(AccessList.Ban); 565 List<LandAccessEntry> accessEntries = CreateAccessListArrayByFlag(AccessList.Ban);
545 remote_client.SendLandAccessListData(avatars, (uint)AccessList.Ban, LandData.LocalID); 566 remote_client.SendLandAccessListData(accessEntries, (uint)AccessList.Ban, LandData.LocalID);
546 } 567 }
547 } 568 }
548 569
549 public void UpdateAccessList(uint flags, UUID transactionID, 570 public void UpdateAccessList(uint flags, UUID transactionID,
550 int sequenceID, int sections, 571 int sequenceID, int sections,
551 List<ParcelManager.ParcelAccessEntry> entries, 572 List<LandAccessEntry> entries,
552 IClientAPI remote_client) 573 IClientAPI remote_client)
553 { 574 {
554 LandData newData = LandData.Copy(); 575 LandData newData = LandData.Copy();
@@ -558,16 +579,16 @@ namespace OpenSim.Region.CoreModules.World.Land
558 { 579 {
559 m_listTransactions[flags] = transactionID; 580 m_listTransactions[flags] = transactionID;
560 581
561 List<ParcelManager.ParcelAccessEntry> toRemove = 582 List<LandAccessEntry> toRemove =
562 new List<ParcelManager.ParcelAccessEntry>(); 583 new List<LandAccessEntry>();
563 584
564 foreach (ParcelManager.ParcelAccessEntry entry in newData.ParcelAccessList) 585 foreach (LandAccessEntry entry in newData.ParcelAccessList)
565 { 586 {
566 if (entry.Flags == (AccessList)flags) 587 if (entry.Flags == (AccessList)flags)
567 toRemove.Add(entry); 588 toRemove.Add(entry);
568 } 589 }
569 590
570 foreach (ParcelManager.ParcelAccessEntry entry in toRemove) 591 foreach (LandAccessEntry entry in toRemove)
571 { 592 {
572 newData.ParcelAccessList.Remove(entry); 593 newData.ParcelAccessList.Remove(entry);
573 } 594 }
@@ -582,13 +603,13 @@ namespace OpenSim.Region.CoreModules.World.Land
582 } 603 }
583 } 604 }
584 605
585 foreach (ParcelManager.ParcelAccessEntry entry in entries) 606 foreach (LandAccessEntry entry in entries)
586 { 607 {
587 ParcelManager.ParcelAccessEntry temp = 608 LandAccessEntry temp =
588 new ParcelManager.ParcelAccessEntry(); 609 new LandAccessEntry();
589 610
590 temp.AgentID = entry.AgentID; 611 temp.AgentID = entry.AgentID;
591 temp.Time = entry.Time; 612 temp.Expires = entry.Expires;
592 temp.Flags = (AccessList)flags; 613 temp.Flags = (AccessList)flags;
593 614
594 newData.ParcelAccessList.Add(temp); 615 newData.ParcelAccessList.Add(temp);
@@ -1105,5 +1126,20 @@ namespace OpenSim.Region.CoreModules.World.Land
1105 } 1126 }
1106 1127
1107 #endregion 1128 #endregion
1129
1130 private void ExpireAccessList()
1131 {
1132 List<LandAccessEntry> delete = new List<LandAccessEntry>();
1133
1134 foreach (LandAccessEntry entry in LandData.ParcelAccessList)
1135 {
1136 if (entry.Expires != 0 && entry.Expires < Util.UnixTimeSinceEpoch())
1137 delete.Add(entry);
1138 }
1139 foreach (LandAccessEntry entry in delete)
1140 LandData.ParcelAccessList.Remove(entry);
1141
1142 m_scene.EventManager.TriggerLandObjectUpdated((uint)LandData.LocalID, this);
1143 }
1108 } 1144 }
1109} 1145}