diff options
Diffstat (limited to 'OpenSim/Region/CoreModules')
7 files changed, 148 insertions, 60 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index ca8d8e6..0590716 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | |||
@@ -212,7 +212,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
212 | scene.EventManager.OnClientLogin += OnClientLogin; | 212 | scene.EventManager.OnClientLogin += OnClientLogin; |
213 | } | 213 | } |
214 | 214 | ||
215 | public void RegionLoaded(Scene scene) | 215 | public virtual void RegionLoaded(Scene scene) |
216 | { | 216 | { |
217 | } | 217 | } |
218 | 218 | ||
@@ -582,10 +582,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
582 | 582 | ||
583 | // Try the local sim | 583 | // Try the local sim |
584 | if (LocalFriendshipOffered(friendID, im)) | 584 | if (LocalFriendshipOffered(friendID, im)) |
585 | { | ||
586 | m_log.DebugFormat("[XXX]: LocalFriendshipOffered successes"); | ||
587 | return true; | 585 | return true; |
588 | } | ||
589 | 586 | ||
590 | // The prospective friend is not here [as root]. Let's forward. | 587 | // The prospective friend is not here [as root]. Let's forward. |
591 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | 588 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); |
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs index 0fe1134..e50a84a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs | |||
@@ -51,7 +51,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
51 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 51 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
52 | 52 | ||
53 | IUserManagement m_uMan; | 53 | IUserManagement m_uMan; |
54 | IUserManagement UserManagementModule | 54 | public IUserManagement UserManagementModule |
55 | { | 55 | { |
56 | get | 56 | get |
57 | { | 57 | { |
@@ -62,6 +62,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
62 | } | 62 | } |
63 | 63 | ||
64 | protected HGFriendsServicesConnector m_HGFriendsConnector = new HGFriendsServicesConnector(); | 64 | protected HGFriendsServicesConnector m_HGFriendsConnector = new HGFriendsServicesConnector(); |
65 | protected HGStatusNotifier m_StatusNotifier; | ||
65 | 66 | ||
66 | #region ISharedRegionModule | 67 | #region ISharedRegionModule |
67 | public override string Name | 68 | public override string Name |
@@ -78,6 +79,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
78 | scene.RegisterModuleInterface<IFriendsSimConnector>(this); | 79 | scene.RegisterModuleInterface<IFriendsSimConnector>(this); |
79 | } | 80 | } |
80 | 81 | ||
82 | public override void RegionLoaded(Scene scene) | ||
83 | { | ||
84 | if (!m_Enabled) | ||
85 | return; | ||
86 | if (m_StatusNotifier == null) | ||
87 | m_StatusNotifier = new HGStatusNotifier(this); | ||
88 | } | ||
89 | |||
81 | #endregion | 90 | #endregion |
82 | 91 | ||
83 | #region IFriendsSimConnector | 92 | #region IFriendsSimConnector |
@@ -230,25 +239,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
230 | if (friendsPerDomain.ContainsKey("local")) | 239 | if (friendsPerDomain.ContainsKey("local")) |
231 | base.StatusNotify(friendsPerDomain["local"], userID, online); | 240 | base.StatusNotify(friendsPerDomain["local"], userID, online); |
232 | 241 | ||
233 | foreach (KeyValuePair<string, List<FriendInfo>> kvp in friendsPerDomain) | 242 | m_StatusNotifier.Notify(userID, friendsPerDomain, online); |
234 | { | ||
235 | if (kvp.Key != "local") | ||
236 | { | ||
237 | // For the others, call the user agent service | ||
238 | List<string> ids = new List<string>(); | ||
239 | foreach (FriendInfo f in kvp.Value) | ||
240 | ids.Add(f.Friend); | ||
241 | UserAgentServiceConnector uConn = new UserAgentServiceConnector(kvp.Key); | ||
242 | List<UUID> friendsOnline = uConn.StatusNotification(ids, userID, online); | ||
243 | |||
244 | if (online && friendsOnline.Count > 0) | ||
245 | { | ||
246 | IClientAPI client = LocateClientObject(userID); | ||
247 | if (client != null) | ||
248 | client.SendAgentOnline(friendsOnline.ToArray()); | ||
249 | } | ||
250 | } | ||
251 | } | ||
252 | 243 | ||
253 | // m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting StatusNotify for {0}", userID); | 244 | // m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting StatusNotify for {0}", userID); |
254 | } | 245 | } |
@@ -261,25 +252,26 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
261 | 252 | ||
262 | // fid is not a UUID... | 253 | // fid is not a UUID... |
263 | string url = string.Empty, tmp = string.Empty, f = string.Empty, l = string.Empty; | 254 | string url = string.Empty, tmp = string.Empty, f = string.Empty, l = string.Empty; |
264 | m_log.DebugFormat("[YYY]: FID {0}", fid); | ||
265 | if (Util.ParseUniversalUserIdentifier(fid, out agentID, out url, out f, out l, out tmp)) | 255 | if (Util.ParseUniversalUserIdentifier(fid, out agentID, out url, out f, out l, out tmp)) |
266 | { | 256 | { |
267 | m_log.DebugFormat("[YYY]: Adding user {0} {1} {2}", f, l, url); | 257 | if (!agentID.Equals(UUID.Zero)) |
268 | m_uMan.AddUser(agentID, f, l, url); | ||
269 | |||
270 | string name = m_uMan.GetUserName(agentID); | ||
271 | string[] parts = name.Trim().Split(new char[] {' '}); | ||
272 | if (parts.Length == 2) | ||
273 | { | 258 | { |
274 | first = parts[0]; | 259 | m_uMan.AddUser(agentID, f, l, url); |
275 | last = parts[1]; | 260 | |
276 | } | 261 | string name = m_uMan.GetUserName(agentID); |
277 | else | 262 | string[] parts = name.Trim().Split(new char[] { ' ' }); |
278 | { | 263 | if (parts.Length == 2) |
279 | first = f; | 264 | { |
280 | last = l; | 265 | first = parts[0]; |
266 | last = parts[1]; | ||
267 | } | ||
268 | else | ||
269 | { | ||
270 | first = f; | ||
271 | last = l; | ||
272 | } | ||
273 | return true; | ||
281 | } | 274 | } |
282 | return true; | ||
283 | } | 275 | } |
284 | return false; | 276 | return false; |
285 | } | 277 | } |
@@ -744,7 +736,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
744 | { | 736 | { |
745 | string[] parts = im.fromAgentName.Split(new char[] { '@' }); | 737 | string[] parts = im.fromAgentName.Split(new char[] { '@' }); |
746 | if (parts.Length == 2) | 738 | if (parts.Length == 2) |
747 | m_uMan.AddUser(new UUID(im.fromAgentID), parts[0], "http://" + parts[1]); | 739 | { |
740 | string[] fl = parts[0].Trim().Split(new char[] { '.' }); | ||
741 | if (fl.Length == 2) | ||
742 | m_uMan.AddUser(new UUID(im.fromAgentID), fl[0], fl[1], "http://" + parts[1]); | ||
743 | else | ||
744 | m_uMan.AddUser(new UUID(im.fromAgentID), fl[0], "", "http://" + parts[1]); | ||
745 | } | ||
748 | } | 746 | } |
749 | return true; | 747 | return true; |
750 | } | 748 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGStatusNotifier.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGStatusNotifier.cs new file mode 100644 index 0000000..1fa4dd6 --- /dev/null +++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGStatusNotifier.cs | |||
@@ -0,0 +1,69 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Linq; | ||
4 | using System.Reflection; | ||
5 | using System.Text; | ||
6 | using OpenSim.Framework; | ||
7 | using OpenSim.Region.Framework.Interfaces; | ||
8 | using OpenSim.Services.Interfaces; | ||
9 | using OpenSim.Services.Connectors.Hypergrid; | ||
10 | using FriendInfo = OpenSim.Services.Interfaces.FriendInfo; | ||
11 | |||
12 | using OpenMetaverse; | ||
13 | |||
14 | using log4net; | ||
15 | |||
16 | namespace OpenSim.Region.CoreModules.Avatar.Friends | ||
17 | { | ||
18 | public class HGStatusNotifier | ||
19 | { | ||
20 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
21 | |||
22 | private HGFriendsModule m_FriendsModule; | ||
23 | |||
24 | public HGStatusNotifier(HGFriendsModule friendsModule) | ||
25 | { | ||
26 | m_FriendsModule = friendsModule; | ||
27 | } | ||
28 | |||
29 | public void Notify(UUID userID, Dictionary<string, List<FriendInfo>> friendsPerDomain, bool online) | ||
30 | { | ||
31 | foreach (KeyValuePair<string, List<FriendInfo>> kvp in friendsPerDomain) | ||
32 | { | ||
33 | if (kvp.Key != "local") | ||
34 | { | ||
35 | // For the others, call the user agent service | ||
36 | List<string> ids = new List<string>(); | ||
37 | foreach (FriendInfo f in kvp.Value) | ||
38 | ids.Add(f.Friend); | ||
39 | |||
40 | if (ids.Count == 0) | ||
41 | continue; // no one to notify. caller don't do this | ||
42 | |||
43 | m_log.DebugFormat("[HG STATUS NOTIFIER]: Notifying {0} friends in {1}", ids.Count, kvp.Key); | ||
44 | // ASSUMPTION: we assume that all users for one home domain | ||
45 | // have exactly the same set of service URLs. | ||
46 | // If this is ever not true, we need to change this. | ||
47 | UUID friendID = UUID.Zero; String tmp = String.Empty; | ||
48 | if (Util.ParseUniversalUserIdentifier(ids[0], out friendID, out tmp, out tmp, out tmp, out tmp)) | ||
49 | { | ||
50 | string friendsServerURI = m_FriendsModule.UserManagementModule.GetUserServerURL(friendID, "FriendsServerURI"); | ||
51 | if (friendsServerURI != string.Empty) | ||
52 | { | ||
53 | HGFriendsServicesConnector fConn = new HGFriendsServicesConnector(friendsServerURI); | ||
54 | |||
55 | List<UUID> friendsOnline = fConn.StatusNotification(ids, userID, online); | ||
56 | |||
57 | if (online && friendsOnline.Count > 0) | ||
58 | { | ||
59 | IClientAPI client = m_FriendsModule.LocateClientObject(userID); | ||
60 | if (client != null) | ||
61 | client.SendAgentOnline(friendsOnline.ToArray()); | ||
62 | } | ||
63 | } | ||
64 | } | ||
65 | } | ||
66 | } | ||
67 | } | ||
68 | } | ||
69 | } | ||
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 8b13b01..1e743c3 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -691,7 +691,13 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
691 | Scene.RegionInfo.RegionSettings.Save(); | 691 | Scene.RegionInfo.RegionSettings.Save(); |
692 | TriggerRegionInfoChange(); | 692 | TriggerRegionInfoChange(); |
693 | 693 | ||
694 | Scene.SetSceneCoreDebug(disableScripts, disableCollisions, disablePhysics); | 694 | Scene.SetSceneCoreDebug( |
695 | new Dictionary<string, string>() { | ||
696 | { "scripting", (!disableScripts).ToString() }, | ||
697 | { "collisions", (!disableCollisions).ToString() }, | ||
698 | { "physics", (!disablePhysics).ToString() } | ||
699 | } | ||
700 | ); | ||
695 | } | 701 | } |
696 | 702 | ||
697 | private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID, UUID prey) | 703 | private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID, UUID prey) |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 02a163f..e86887d 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -497,7 +497,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
497 | 497 | ||
498 | public bool IsRestrictedFromLand(UUID avatar) | 498 | public bool IsRestrictedFromLand(UUID avatar) |
499 | { | 499 | { |
500 | ExpireAccessList(); | 500 | if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) == 0) |
501 | return false; | ||
501 | 502 | ||
502 | if (m_scene.Permissions.IsAdministrator(avatar)) | 503 | if (m_scene.Permissions.IsAdministrator(avatar)) |
503 | return false; | 504 | return false; |
@@ -508,24 +509,27 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
508 | if (avatar == LandData.OwnerID) | 509 | if (avatar == LandData.OwnerID) |
509 | return false; | 510 | return false; |
510 | 511 | ||
511 | if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0) | 512 | if (HasGroupAccess(avatar)) |
512 | { | 513 | return false; |
513 | if (LandData.ParcelAccessList.FindIndex( | 514 | |
514 | delegate(LandAccessEntry e) | 515 | return (!IsInLandAccessList(avatar)); |
515 | { | 516 | } |
516 | if (e.AgentID == avatar && e.Flags == AccessList.Access) | 517 | |
517 | return true; | 518 | public bool IsInLandAccessList(UUID avatar) |
518 | return false; | 519 | { |
519 | }) == -1) | 520 | ExpireAccessList(); |
520 | { | 521 | |
521 | if (!HasGroupAccess(avatar)) | 522 | if (LandData.ParcelAccessList.FindIndex( |
523 | delegate(LandAccessEntry e) | ||
522 | { | 524 | { |
523 | return true; | 525 | if (e.AgentID == avatar && e.Flags == AccessList.Access) |
524 | } | 526 | return true; |
525 | } | 527 | return false; |
528 | }) == -1) | ||
529 | { | ||
530 | return false; | ||
526 | } | 531 | } |
527 | 532 | return true; | |
528 | return false; | ||
529 | } | 533 | } |
530 | 534 | ||
531 | public void SendLandUpdateToClient(IClientAPI remote_client) | 535 | public void SendLandUpdateToClient(IClientAPI remote_client) |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index e4ecc64..4a654a3 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -94,7 +94,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
94 | private bool m_RegionOwnerIsGod = false; | 94 | private bool m_RegionOwnerIsGod = false; |
95 | private bool m_RegionManagerIsGod = false; | 95 | private bool m_RegionManagerIsGod = false; |
96 | private bool m_ParcelOwnerIsGod = false; | 96 | private bool m_ParcelOwnerIsGod = false; |
97 | 97 | ||
98 | private bool m_SimpleBuildPermissions = false; | ||
99 | |||
98 | /// <value> | 100 | /// <value> |
99 | /// The set of users that are allowed to create scripts. This is only active if permissions are not being | 101 | /// The set of users that are allowed to create scripts. This is only active if permissions are not being |
100 | /// bypassed. This overrides normal permissions. | 102 | /// bypassed. This overrides normal permissions. |
@@ -139,7 +141,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
139 | m_RegionOwnerIsGod = myConfig.GetBoolean("region_owner_is_god", true); | 141 | m_RegionOwnerIsGod = myConfig.GetBoolean("region_owner_is_god", true); |
140 | m_RegionManagerIsGod = myConfig.GetBoolean("region_manager_is_god", false); | 142 | m_RegionManagerIsGod = myConfig.GetBoolean("region_manager_is_god", false); |
141 | m_ParcelOwnerIsGod = myConfig.GetBoolean("parcel_owner_is_god", true); | 143 | m_ParcelOwnerIsGod = myConfig.GetBoolean("parcel_owner_is_god", true); |
142 | 144 | ||
145 | m_SimpleBuildPermissions = myConfig.GetBoolean("simple_build_permissions", false); | ||
146 | |||
143 | m_allowedScriptCreators | 147 | m_allowedScriptCreators |
144 | = ParseUserSetConfigSetting(myConfig, "allowed_script_creators", m_allowedScriptCreators); | 148 | = ParseUserSetConfigSetting(myConfig, "allowed_script_creators", m_allowedScriptCreators); |
145 | m_allowedScriptEditors | 149 | m_allowedScriptEditors |
@@ -824,6 +828,10 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
824 | permission = true; | 828 | permission = true; |
825 | } | 829 | } |
826 | 830 | ||
831 | if (m_SimpleBuildPermissions && | ||
832 | (parcel.LandData.Flags & (uint)ParcelFlags.UseAccessList) == 0 && parcel.IsInLandAccessList(user)) | ||
833 | permission = true; | ||
834 | |||
827 | return permission; | 835 | return permission; |
828 | } | 836 | } |
829 | 837 | ||
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index c51e140..b5e79b8 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | |||
@@ -598,6 +598,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
598 | "[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}", | 598 | "[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}", |
599 | m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions); | 599 | m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions); |
600 | } | 600 | } |
601 | else | ||
602 | { | ||
603 | m_log.ErrorFormat( | ||
604 | "[TERRAIN]: Could not save terrain from {0} to {1}. {2} {3} {4} {5} {6} {7}", | ||
605 | m_scene.RegionInfo.RegionName, filename, fileWidth, fileHeight, fileStartX, fileStartY, offsetX, offsetY); | ||
606 | } | ||
601 | } | 607 | } |
602 | 608 | ||
603 | /// <summary> | 609 | /// <summary> |