diff options
Diffstat (limited to 'OpenSim/Region/CoreModules')
69 files changed, 3038 insertions, 801 deletions
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetTransactionsManager.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetTransactionsManager.cs index addc36b..9c646b6 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetTransactionsManager.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetTransactionsManager.cs | |||
@@ -162,7 +162,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
162 | AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); | 162 | AgentAssetTransactions transactions = GetUserTransactions(remoteClient.AgentId); |
163 | 163 | ||
164 | transactions.RequestUpdateTaskInventoryItem(remoteClient, part, transactionID, item); | 164 | transactions.RequestUpdateTaskInventoryItem(remoteClient, part, transactionID, item); |
165 | } | 165 | } |
166 | 166 | ||
167 | /// <summary> | 167 | /// <summary> |
168 | /// Request that a client (agent) begin an asset transfer. | 168 | /// Request that a client (agent) begin an asset transfer. |
diff --git a/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs index 0c6900d..2a1355b 100644 --- a/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs +++ b/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs | |||
@@ -49,9 +49,9 @@ namespace OpenSim.Region.CoreModules.Agent.Capabilities | |||
49 | /// </summary> | 49 | /// </summary> |
50 | protected Dictionary<UUID, Caps> m_capsHandlers = new Dictionary<UUID, Caps>(); | 50 | protected Dictionary<UUID, Caps> m_capsHandlers = new Dictionary<UUID, Caps>(); |
51 | 51 | ||
52 | protected Dictionary<UUID, string> capsPaths = new Dictionary<UUID, string>(); | 52 | protected Dictionary<UUID, string> capsPaths = new Dictionary<UUID, string>(); |
53 | protected Dictionary<UUID, Dictionary<ulong, string>> childrenSeeds | 53 | protected Dictionary<UUID, Dictionary<ulong, string>> childrenSeeds |
54 | = new Dictionary<UUID, Dictionary<ulong, string>>(); | 54 | = new Dictionary<UUID, Dictionary<ulong, string>>(); |
55 | 55 | ||
56 | public void Initialise(IConfigSource source) | 56 | public void Initialise(IConfigSource source) |
57 | { | 57 | { |
@@ -147,7 +147,7 @@ namespace OpenSim.Region.CoreModules.Agent.Capabilities | |||
147 | agentId, m_scene.RegionInfo.RegionName); | 147 | agentId, m_scene.RegionInfo.RegionName); |
148 | } | 148 | } |
149 | } | 149 | } |
150 | } | 150 | } |
151 | 151 | ||
152 | public Caps GetCapsHandlerForUser(UUID agentId) | 152 | public Caps GetCapsHandlerForUser(UUID agentId) |
153 | { | 153 | { |
@@ -177,7 +177,7 @@ namespace OpenSim.Region.CoreModules.Agent.Capabilities | |||
177 | } | 177 | } |
178 | 178 | ||
179 | return null; | 179 | return null; |
180 | } | 180 | } |
181 | 181 | ||
182 | public Dictionary<ulong, string> GetChildrenSeeds(UUID agentID) | 182 | public Dictionary<ulong, string> GetChildrenSeeds(UUID agentID) |
183 | { | 183 | { |
@@ -225,6 +225,6 @@ namespace OpenSim.Region.CoreModules.Agent.Capabilities | |||
225 | y = y / Constants.RegionSize; | 225 | y = y / Constants.RegionSize; |
226 | m_log.Info(" >> "+x+", "+y+": "+kvp.Value); | 226 | m_log.Info(" >> "+x+", "+y+": "+kvp.Value); |
227 | } | 227 | } |
228 | } | 228 | } |
229 | } | 229 | } |
230 | } | 230 | } |
diff --git a/OpenSim/Region/CoreModules/Agent/IPBan/SceneBanner.cs b/OpenSim/Region/CoreModules/Agent/IPBan/SceneBanner.cs index 394b1bb..8502006 100644 --- a/OpenSim/Region/CoreModules/Agent/IPBan/SceneBanner.cs +++ b/OpenSim/Region/CoreModules/Agent/IPBan/SceneBanner.cs | |||
@@ -51,7 +51,7 @@ namespace OpenSim.Region.CoreModules.Agent.IPBan | |||
51 | { | 51 | { |
52 | // Only need to run through all this if there are entries in the ban list | 52 | // Only need to run through all this if there are entries in the ban list |
53 | if (bans.Count > 0) | 53 | if (bans.Count > 0) |
54 | { | 54 | { |
55 | IClientIPEndpoint ipEndpoint; | 55 | IClientIPEndpoint ipEndpoint; |
56 | if (client.TryGet(out ipEndpoint)) | 56 | if (client.TryGet(out ipEndpoint)) |
57 | { | 57 | { |
diff --git a/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs b/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs index a1e27f1..5a5ad7e 100644 --- a/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/CenomeAssetCache.cs | |||
@@ -42,7 +42,7 @@ namespace OpenSim.Region.CoreModules.Asset | |||
42 | /// <para> | 42 | /// <para> |
43 | /// Cache is enabled by setting "AssetCaching" configuration to value "CenomeMemoryAssetCache". | 43 | /// Cache is enabled by setting "AssetCaching" configuration to value "CenomeMemoryAssetCache". |
44 | /// When cache is successfully enable log should have message | 44 | /// When cache is successfully enable log should have message |
45 | /// "[ASSET CACHE]: Cenome asset cache enabled (MaxSize = XXX bytes, MaxCount = XXX, ExpirationTime = XXX)". | 45 | /// "[ASSET CACHE]: Cenome asset cache enabled (MaxSize = XXX bytes, MaxCount = XXX, ExpirationTime = XXX)". |
46 | /// </para> | 46 | /// </para> |
47 | /// <para> | 47 | /// <para> |
48 | /// Cache's size is limited by two parameters: | 48 | /// Cache's size is limited by two parameters: |
@@ -113,7 +113,7 @@ namespace OpenSim.Region.CoreModules.Asset | |||
113 | 113 | ||
114 | /// <summary> | 114 | /// <summary> |
115 | /// Asset's default expiration time in the cache. | 115 | /// Asset's default expiration time in the cache. |
116 | /// </summary> | 116 | /// </summary> |
117 | public static readonly TimeSpan DefaultExpirationTime = TimeSpan.FromMinutes(30.0); | 117 | public static readonly TimeSpan DefaultExpirationTime = TimeSpan.FromMinutes(30.0); |
118 | 118 | ||
119 | /// <summary> | 119 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index d85d3df..817e0d4 100644 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | |||
@@ -142,7 +142,7 @@ namespace Flotsam.RegionModules.AssetCache | |||
142 | m_CacheDirectory = assetConfig.GetString("CacheDirectory", m_DefaultCacheDirectory); | 142 | m_CacheDirectory = assetConfig.GetString("CacheDirectory", m_DefaultCacheDirectory); |
143 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory", m_DefaultCacheDirectory); | 143 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory", m_DefaultCacheDirectory); |
144 | 144 | ||
145 | m_MemoryCacheEnabled = assetConfig.GetBoolean("MemoryCacheEnabled", true); | 145 | m_MemoryCacheEnabled = assetConfig.GetBoolean("MemoryCacheEnabled", false); |
146 | m_MemoryExpiration = TimeSpan.FromHours(assetConfig.GetDouble("MemoryCacheTimeout", m_DefaultMemoryExpiration)); | 146 | m_MemoryExpiration = TimeSpan.FromHours(assetConfig.GetDouble("MemoryCacheTimeout", m_DefaultMemoryExpiration)); |
147 | 147 | ||
148 | #if WAIT_ON_INPROGRESS_REQUESTS | 148 | #if WAIT_ON_INPROGRESS_REQUESTS |
@@ -150,7 +150,7 @@ namespace Flotsam.RegionModules.AssetCache | |||
150 | #endif | 150 | #endif |
151 | 151 | ||
152 | m_LogLevel = assetConfig.GetInt("LogLevel", 1); | 152 | m_LogLevel = assetConfig.GetInt("LogLevel", 1); |
153 | m_HitRateDisplay = (ulong)assetConfig.GetInt("HitRateDisplay", 1); | 153 | m_HitRateDisplay = (ulong)assetConfig.GetInt("HitRateDisplay", 1000); |
154 | 154 | ||
155 | m_FileExpiration = TimeSpan.FromHours(assetConfig.GetDouble("FileCacheTimeout", m_DefaultFileExpiration)); | 155 | m_FileExpiration = TimeSpan.FromHours(assetConfig.GetDouble("FileCacheTimeout", m_DefaultFileExpiration)); |
156 | m_FileExpirationCleanupTimer = TimeSpan.FromHours(assetConfig.GetDouble("FileCleanupTimer", m_DefaultFileExpiration)); | 156 | m_FileExpirationCleanupTimer = TimeSpan.FromHours(assetConfig.GetDouble("FileCleanupTimer", m_DefaultFileExpiration)); |
@@ -470,7 +470,7 @@ namespace Flotsam.RegionModules.AssetCache | |||
470 | else if (dirSize >= m_CacheWarnAt) | 470 | else if (dirSize >= m_CacheWarnAt) |
471 | { | 471 | { |
472 | m_log.WarnFormat("[FLOTSAM ASSET CACHE]: Cache folder exceeded CacheWarnAt limit {0} {1}. Suggest increasing tiers, tier length, or reducing cache expiration", dir, dirSize); | 472 | m_log.WarnFormat("[FLOTSAM ASSET CACHE]: Cache folder exceeded CacheWarnAt limit {0} {1}. Suggest increasing tiers, tier length, or reducing cache expiration", dir, dirSize); |
473 | } | 473 | } |
474 | } | 474 | } |
475 | 475 | ||
476 | private string GetFileName(string id) | 476 | private string GetFileName(string id) |
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs index fcc2673..66a9b5a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs | |||
@@ -114,7 +114,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat | |||
114 | scene.EventManager.OnChatBroadcast -= OnChatBroadcast; | 114 | scene.EventManager.OnChatBroadcast -= OnChatBroadcast; |
115 | m_scenes.Remove(scene); | 115 | m_scenes.Remove(scene); |
116 | } | 116 | } |
117 | } | 117 | } |
118 | } | 118 | } |
119 | 119 | ||
120 | public virtual void Close() | 120 | public virtual void Close() |
diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs index 87f137e..9387bce 100644 --- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs | |||
@@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule | |||
146 | private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) | 146 | private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) |
147 | { | 147 | { |
148 | ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | 148 | ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); |
149 | if ((obj.landData.Flags & (uint)ParcelFlags.AllowDamage) != 0) | 149 | if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0) |
150 | { | 150 | { |
151 | avatar.Invulnerable = false; | 151 | avatar.Invulnerable = false; |
152 | } | 152 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs index 046fc4a..ebebaf9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs | |||
@@ -52,7 +52,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
52 | this, "alert", "alert <first> <last> <message>", "Send an alert to a user", HandleAlertConsoleCommand); | 52 | this, "alert", "alert <first> <last> <message>", "Send an alert to a user", HandleAlertConsoleCommand); |
53 | 53 | ||
54 | m_scene.AddCommand( | 54 | m_scene.AddCommand( |
55 | this, "alert general", "alert general <message>", "Send an alert to everyone", HandleAlertConsoleCommand); | 55 | this, "alert general", "alert general <message>", "Send an alert to everyone", HandleAlertConsoleCommand); |
56 | } | 56 | } |
57 | 57 | ||
58 | public void PostInitialise() {} | 58 | public void PostInitialise() {} |
@@ -63,7 +63,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
63 | public void SendAlertToUser(IClientAPI client, string message) | 63 | public void SendAlertToUser(IClientAPI client, string message) |
64 | { | 64 | { |
65 | SendAlertToUser(client, message, false); | 65 | SendAlertToUser(client, message, false); |
66 | } | 66 | } |
67 | 67 | ||
68 | public void SendAlertToUser(IClientAPI client, string message, bool modal) | 68 | public void SendAlertToUser(IClientAPI client, string message, bool modal) |
69 | { | 69 | { |
@@ -73,7 +73,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
73 | public void SendAlertToUser(UUID agentID, string message) | 73 | public void SendAlertToUser(UUID agentID, string message) |
74 | { | 74 | { |
75 | SendAlertToUser(agentID, message, false); | 75 | SendAlertToUser(agentID, message, false); |
76 | } | 76 | } |
77 | 77 | ||
78 | public void SendAlertToUser(UUID agentID, string message, bool modal) | 78 | public void SendAlertToUser(UUID agentID, string message, bool modal) |
79 | { | 79 | { |
@@ -81,7 +81,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
81 | 81 | ||
82 | if (sp != null) | 82 | if (sp != null) |
83 | sp.ControllingClient.SendAgentAlertMessage(message, modal); | 83 | sp.ControllingClient.SendAgentAlertMessage(message, modal); |
84 | } | 84 | } |
85 | 85 | ||
86 | public void SendAlertToUser(string firstName, string lastName, string message, bool modal) | 86 | public void SendAlertToUser(string firstName, string lastName, string message, bool modal) |
87 | { | 87 | { |
@@ -95,7 +95,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
95 | break; | 95 | break; |
96 | } | 96 | } |
97 | } | 97 | } |
98 | } | 98 | } |
99 | 99 | ||
100 | public void SendGeneralAlert(string message) | 100 | public void SendGeneralAlert(string message) |
101 | { | 101 | { |
@@ -106,7 +106,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
106 | if (!presence.IsChildAgent) | 106 | if (!presence.IsChildAgent) |
107 | presence.ControllingClient.SendAlertMessage(message); | 107 | presence.ControllingClient.SendAlertMessage(message); |
108 | } | 108 | } |
109 | } | 109 | } |
110 | 110 | ||
111 | public void SendDialogToUser( | 111 | public void SendDialogToUser( |
112 | UUID avatarID, string objectName, UUID objectID, UUID ownerID, | 112 | UUID avatarID, string objectName, UUID objectID, UUID ownerID, |
@@ -135,9 +135,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
135 | { | 135 | { |
136 | ScenePresence sp = m_scene.GetScenePresence(avatarID); | 136 | ScenePresence sp = m_scene.GetScenePresence(avatarID); |
137 | 137 | ||
138 | if (sp != null) | 138 | if (sp != null) |
139 | sp.ControllingClient.SendLoadURL(objectName, objectID, ownerID, groupOwned, message, url); | 139 | sp.ControllingClient.SendLoadURL(objectName, objectID, ownerID, groupOwned, message, url); |
140 | } | 140 | } |
141 | 141 | ||
142 | public void SendNotificationToUsersInEstate( | 142 | public void SendNotificationToUsersInEstate( |
143 | UUID fromAvatarID, string fromAvatarName, string message) | 143 | UUID fromAvatarID, string fromAvatarName, string message) |
@@ -145,11 +145,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
145 | // TODO: This does not yet do what it says on the tin - it only sends the message to users in the same | 145 | // TODO: This does not yet do what it says on the tin - it only sends the message to users in the same |
146 | // region as the sending avatar. | 146 | // region as the sending avatar. |
147 | SendNotificationToUsersInRegion(fromAvatarID, fromAvatarName, message); | 147 | SendNotificationToUsersInRegion(fromAvatarID, fromAvatarName, message); |
148 | } | 148 | } |
149 | 149 | ||
150 | public void SendNotificationToUsersInRegion( | 150 | public void SendNotificationToUsersInRegion( |
151 | UUID fromAvatarID, string fromAvatarName, string message) | 151 | UUID fromAvatarID, string fromAvatarName, string message) |
152 | { | 152 | { |
153 | List<ScenePresence> presenceList = m_scene.GetScenePresences(); | 153 | List<ScenePresence> presenceList = m_scene.GetScenePresences(); |
154 | 154 | ||
155 | foreach (ScenePresence presence in presenceList) | 155 | foreach (ScenePresence presence in presenceList) |
@@ -185,7 +185,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
185 | 185 | ||
186 | m_log.InfoFormat( | 186 | m_log.InfoFormat( |
187 | "[DIALOG]: Sending alert in region {0} to {1} {2} with message {3}", | 187 | "[DIALOG]: Sending alert in region {0} to {1} {2} with message {3}", |
188 | m_scene.RegionInfo.RegionName, firstName, lastName, message); | 188 | m_scene.RegionInfo.RegionName, firstName, lastName, message); |
189 | SendAlertToUser(firstName, lastName, message, false); | 189 | SendAlertToUser(firstName, lastName, message, false); |
190 | } | 190 | } |
191 | } | 191 | } |
@@ -199,6 +199,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog | |||
199 | } | 199 | } |
200 | 200 | ||
201 | return result; | 201 | return result; |
202 | } | 202 | } |
203 | } | 203 | } |
204 | } | 204 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index 49b2b5c..fc7d63a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | |||
@@ -40,6 +40,7 @@ using OpenSim.Framework.Communications.Cache; | |||
40 | using OpenSim.Region.Framework.Interfaces; | 40 | using OpenSim.Region.Framework.Interfaces; |
41 | using OpenSim.Region.Framework.Scenes; | 41 | using OpenSim.Region.Framework.Scenes; |
42 | using OpenSim.Services.Interfaces; | 42 | using OpenSim.Services.Interfaces; |
43 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
43 | 44 | ||
44 | namespace OpenSim.Region.CoreModules.Avatar.Friends | 45 | namespace OpenSim.Region.CoreModules.Avatar.Friends |
45 | { | 46 | { |
@@ -108,7 +109,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
108 | private Dictionary<ulong, Scene> m_scenes = new Dictionary<ulong,Scene>(); | 109 | private Dictionary<ulong, Scene> m_scenes = new Dictionary<ulong,Scene>(); |
109 | private IMessageTransferModule m_TransferModule = null; | 110 | private IMessageTransferModule m_TransferModule = null; |
110 | 111 | ||
111 | private IGridServices m_gridServices = null; | 112 | private IGridService m_gridServices = null; |
112 | 113 | ||
113 | #region IRegionModule Members | 114 | #region IRegionModule Members |
114 | 115 | ||
@@ -142,7 +143,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
142 | if (m_scenes.Count > 0) | 143 | if (m_scenes.Count > 0) |
143 | { | 144 | { |
144 | m_TransferModule = m_initialScene.RequestModuleInterface<IMessageTransferModule>(); | 145 | m_TransferModule = m_initialScene.RequestModuleInterface<IMessageTransferModule>(); |
145 | m_gridServices = m_initialScene.CommsManager.GridService; | 146 | m_gridServices = m_initialScene.GridService; |
146 | } | 147 | } |
147 | if (m_TransferModule == null) | 148 | if (m_TransferModule == null) |
148 | m_log.Error("[FRIENDS]: Unable to find a message transfer module, friendship offers will not work"); | 149 | m_log.Error("[FRIENDS]: Unable to find a message transfer module, friendship offers will not work"); |
@@ -171,7 +172,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
171 | List<UUID> tpdAway = new List<UUID>(); | 172 | List<UUID> tpdAway = new List<UUID>(); |
172 | 173 | ||
173 | // destRegionHandle is a region on another server | 174 | // destRegionHandle is a region on another server |
174 | RegionInfo info = m_gridServices.RequestNeighbourInfo(destRegionHandle); | 175 | uint x = 0, y = 0; |
176 | Utils.LongToUInts(destRegionHandle, out x, out y); | ||
177 | GridRegion info = m_gridServices.GetRegionByPosition(m_initialScene.RegionInfo.ScopeID, (int)x, (int)y); | ||
175 | if (info != null) | 178 | if (info != null) |
176 | { | 179 | { |
177 | string httpServer = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/presence_update_bulk"; | 180 | string httpServer = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/presence_update_bulk"; |
@@ -223,7 +226,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
223 | public bool TriggerTerminateFriend(ulong destRegionHandle, UUID agentID, UUID exFriendID) | 226 | public bool TriggerTerminateFriend(ulong destRegionHandle, UUID agentID, UUID exFriendID) |
224 | { | 227 | { |
225 | // destRegionHandle is a region on another server | 228 | // destRegionHandle is a region on another server |
226 | RegionInfo info = m_gridServices.RequestNeighbourInfo(destRegionHandle); | 229 | uint x = 0, y = 0; |
230 | Utils.LongToUInts(destRegionHandle, out x, out y); | ||
231 | GridRegion info = m_gridServices.GetRegionByPosition(m_initialScene.RegionInfo.ScopeID, (int)x, (int)y); | ||
227 | if (info == null) | 232 | if (info == null) |
228 | { | 233 | { |
229 | m_log.WarnFormat("[OGS1 GRID SERVICES]: Couldn't find region {0}", destRegionHandle); | 234 | m_log.WarnFormat("[OGS1 GRID SERVICES]: Couldn't find region {0}", destRegionHandle); |
@@ -492,7 +497,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
492 | { | 497 | { |
493 | m_log.ErrorFormat("[FRIENDS]: No user found for id {0} in OfferFriendship()", fromUserId); | 498 | m_log.ErrorFormat("[FRIENDS]: No user found for id {0} in OfferFriendship()", fromUserId); |
494 | } | 499 | } |
495 | } | 500 | } |
496 | 501 | ||
497 | #region FriendRequestHandling | 502 | #region FriendRequestHandling |
498 | 503 | ||
@@ -503,7 +508,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
503 | 508 | ||
504 | if (im.dialog == (byte)InstantMessageDialog.FriendshipOffered) // 38 | 509 | if (im.dialog == (byte)InstantMessageDialog.FriendshipOffered) // 38 |
505 | { | 510 | { |
506 | // fromAgentName is the *destination* name (the friend we offer friendship to) | 511 | // fromAgentName is the *destination* name (the friend we offer friendship to) |
507 | ScenePresence initiator = GetAnyPresenceFromAgentID(new UUID(im.fromAgentID)); | 512 | ScenePresence initiator = GetAnyPresenceFromAgentID(new UUID(im.fromAgentID)); |
508 | im.fromAgentName = initiator != null ? initiator.Name : "(hippo)"; | 513 | im.fromAgentName = initiator != null ? initiator.Name : "(hippo)"; |
509 | 514 | ||
@@ -523,13 +528,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
523 | /// Invoked when a user offers a friendship. | 528 | /// Invoked when a user offers a friendship. |
524 | /// </summary> | 529 | /// </summary> |
525 | /// | 530 | /// |
526 | /// <param name="im"></param> | 531 | /// <param name="im"></param> |
527 | /// <param name="client"></param> | 532 | /// <param name="client"></param> |
528 | private void FriendshipOffered(GridInstantMessage im) | 533 | private void FriendshipOffered(GridInstantMessage im) |
529 | { | 534 | { |
530 | // this is triggered by the initiating agent: | 535 | // this is triggered by the initiating agent: |
531 | // A local agent offers friendship to some possibly remote friend. | 536 | // A local agent offers friendship to some possibly remote friend. |
532 | // A IM is triggered, processed here and sent to the friend (possibly in a remote region). | 537 | // A IM is triggered, processed here and sent to the friend (possibly in a remote region). |
533 | 538 | ||
534 | m_log.DebugFormat("[FRIEND]: Offer(38) - From: {0}, FromName: {1} To: {2}, Session: {3}, Message: {4}, Offline {5}", | 539 | m_log.DebugFormat("[FRIEND]: Offer(38) - From: {0}, FromName: {1} To: {2}, Session: {3}, Message: {4}, Offline {5}", |
535 | im.fromAgentID, im.fromAgentName, im.toAgentID, im.imSessionID, im.message, im.offline); | 540 | im.fromAgentID, im.fromAgentName, im.toAgentID, im.imSessionID, im.message, im.offline); |
@@ -554,7 +559,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
554 | m_log.DebugFormat("[FRIEND]: sending IM success = {0}", success); | 559 | m_log.DebugFormat("[FRIEND]: sending IM success = {0}", success); |
555 | } | 560 | } |
556 | ); | 561 | ); |
557 | } | 562 | } |
558 | } | 563 | } |
559 | 564 | ||
560 | /// <summary> | 565 | /// <summary> |
@@ -565,7 +570,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
565 | private void FriendshipAccepted(IClientAPI client, GridInstantMessage im) | 570 | private void FriendshipAccepted(IClientAPI client, GridInstantMessage im) |
566 | { | 571 | { |
567 | m_log.DebugFormat("[FRIEND]: 39 - from client {0}, agent {2} {3}, imsession {4} to {5}: {6} (dialog {7})", | 572 | m_log.DebugFormat("[FRIEND]: 39 - from client {0}, agent {2} {3}, imsession {4} to {5}: {6} (dialog {7})", |
568 | client.AgentId, im.fromAgentID, im.fromAgentName, im.imSessionID, im.toAgentID, im.message, im.dialog); | 573 | client.AgentId, im.fromAgentID, im.fromAgentName, im.imSessionID, im.toAgentID, im.message, im.dialog); |
569 | } | 574 | } |
570 | 575 | ||
571 | /// <summary> | 576 | /// <summary> |
@@ -597,7 +602,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
597 | delegate(bool success) { | 602 | delegate(bool success) { |
598 | m_log.DebugFormat("[FRIEND]: sending IM success = {0}", success); | 603 | m_log.DebugFormat("[FRIEND]: sending IM success = {0}", success); |
599 | } | 604 | } |
600 | ); | 605 | ); |
601 | } | 606 | } |
602 | 607 | ||
603 | private void OnGridInstantMessage(GridInstantMessage msg) | 608 | private void OnGridInstantMessage(GridInstantMessage msg) |
diff --git a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs index ff12361..8ce5092 100644 --- a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs | |||
@@ -91,6 +91,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures | |||
91 | else | 91 | else |
92 | m_log.ErrorFormat( | 92 | m_log.ErrorFormat( |
93 | "[GESTURES]: Unable to find gesture to deactivate {0} for {1}", gestureId, client.Name); | 93 | "[GESTURES]: Unable to find gesture to deactivate {0} for {1}", gestureId, client.Name); |
94 | } | 94 | } |
95 | } | 95 | } |
96 | } \ No newline at end of file | 96 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs index 8926527..f941728 100644 --- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs | |||
@@ -43,7 +43,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | |||
43 | { | 43 | { |
44 | m_scene = scene; | 44 | m_scene = scene; |
45 | m_dialogModule = m_scene.RequestModuleInterface<IDialogModule>(); | 45 | m_dialogModule = m_scene.RequestModuleInterface<IDialogModule>(); |
46 | m_scene.RegisterModuleInterface<IGodsModule>(this); | 46 | m_scene.RegisterModuleInterface<IGodsModule>(this); |
47 | } | 47 | } |
48 | 48 | ||
49 | public void PostInitialise() {} | 49 | public void PostInitialise() {} |
@@ -84,7 +84,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | |||
84 | m_dialogModule.SendAlertToUser(agentID, "Request for god powers denied"); | 84 | m_dialogModule.SendAlertToUser(agentID, "Request for god powers denied"); |
85 | } | 85 | } |
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
89 | /// <summary> | 89 | /// <summary> |
90 | /// Kicks User specified from the simulator. This logs them off of the grid | 90 | /// Kicks User specified from the simulator. This logs them off of the grid |
@@ -142,7 +142,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | |||
142 | } | 142 | } |
143 | } | 143 | } |
144 | else | 144 | else |
145 | { | 145 | { |
146 | m_dialogModule.SendAlertToUser(godID, "Kick request denied"); | 146 | m_dialogModule.SendAlertToUser(godID, "Kick request denied"); |
147 | } | 147 | } |
148 | } | 148 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs index 66f1e14..9a68749 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs | |||
@@ -38,7 +38,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
38 | { | 38 | { |
39 | public class InstantMessageModule : IRegionModule | 39 | public class InstantMessageModule : IRegionModule |
40 | { | 40 | { |
41 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 41 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
42 | 42 | ||
43 | /// <value> | 43 | /// <value> |
44 | /// Is this module enabled? | 44 | /// Is this module enabled? |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs index 4495303..e5159b3 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | |||
@@ -36,6 +36,7 @@ using OpenMetaverse; | |||
36 | using OpenSim.Framework; | 36 | using OpenSim.Framework; |
37 | using OpenSim.Region.Framework.Interfaces; | 37 | using OpenSim.Region.Framework.Interfaces; |
38 | using OpenSim.Region.Framework.Scenes; | 38 | using OpenSim.Region.Framework.Scenes; |
39 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
39 | 40 | ||
40 | namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | 41 | namespace OpenSim.Region.CoreModules.Avatar.InstantMessage |
41 | { | 42 | { |
@@ -497,7 +498,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
497 | { | 498 | { |
498 | if (upd.AgentOnline) | 499 | if (upd.AgentOnline) |
499 | { | 500 | { |
500 | RegionInfo reginfo = m_Scenes[0].SceneGridService.RequestNeighbouringRegionInfo(upd.Handle); | 501 | uint x = 0, y = 0; |
502 | Utils.LongToUInts(upd.Handle, out x, out y); | ||
503 | GridRegion reginfo = m_Scenes[0].GridService.GetRegionByPosition(m_Scenes[0].RegionInfo.ScopeID, | ||
504 | (int)x, (int)y); | ||
501 | if (reginfo != null) | 505 | if (reginfo != null) |
502 | { | 506 | { |
503 | Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im); | 507 | Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im); |
@@ -559,7 +563,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
559 | /// <param name="reginfo">RegionInfo we pull the data out of to send the request to</param> | 563 | /// <param name="reginfo">RegionInfo we pull the data out of to send the request to</param> |
560 | /// <param name="xmlrpcdata">The Instant Message data Hashtable</param> | 564 | /// <param name="xmlrpcdata">The Instant Message data Hashtable</param> |
561 | /// <returns>Bool if the message was successfully delivered at the other side.</returns> | 565 | /// <returns>Bool if the message was successfully delivered at the other side.</returns> |
562 | protected virtual bool doIMSending(RegionInfo reginfo, Hashtable xmlrpcdata) | 566 | protected virtual bool doIMSending(GridRegion reginfo, Hashtable xmlrpcdata) |
563 | { | 567 | { |
564 | 568 | ||
565 | ArrayList SendParams = new ArrayList(); | 569 | ArrayList SendParams = new ArrayList(); |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs index ebd9a72..ad05bab 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/PresenceModule.cs | |||
@@ -35,6 +35,7 @@ using OpenMetaverse; | |||
35 | using OpenSim.Framework; | 35 | using OpenSim.Framework; |
36 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
37 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
38 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
38 | 39 | ||
39 | namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | 40 | namespace OpenSim.Region.CoreModules.Avatar.InstantMessage |
40 | { | 41 | { |
@@ -171,7 +172,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
171 | { | 172 | { |
172 | // TODO this is the old messaging-server protocol; only the regionHandle is available. | 173 | // TODO this is the old messaging-server protocol; only the regionHandle is available. |
173 | // Fetch region-info to get the id | 174 | // Fetch region-info to get the id |
174 | RegionInfo regionInfo = m_initialScene.RequestNeighbouringRegionInfo(info.regionHandle); | 175 | uint x = 0, y = 0; |
176 | Utils.LongToUInts(info.regionHandle, out x, out y); | ||
177 | GridRegion regionInfo = m_initialScene.GridService.GetRegionByPosition(m_initialScene.RegionInfo.ScopeID, | ||
178 | (int)x, (int)y); | ||
175 | regionID = regionInfo.RegionID; | 179 | regionID = regionInfo.RegionID; |
176 | } | 180 | } |
177 | result[indices[i]] = new PresenceInfo(uuids[i], regionID); | 181 | result[indices[i]] = new PresenceInfo(uuids[i], regionID); |
@@ -349,6 +353,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
349 | 353 | ||
350 | private void NotifyMessageServerOfShutdown(Scene scene) | 354 | private void NotifyMessageServerOfShutdown(Scene scene) |
351 | { | 355 | { |
356 | if (m_Scenes[0].CommsManager.NetworkServersInfo.MessagingURL == string.Empty) | ||
357 | return; | ||
358 | |||
352 | Hashtable xmlrpcdata = new Hashtable(); | 359 | Hashtable xmlrpcdata = new Hashtable(); |
353 | xmlrpcdata["RegionUUID"] = scene.RegionInfo.RegionID.ToString(); | 360 | xmlrpcdata["RegionUUID"] = scene.RegionInfo.RegionID.ToString(); |
354 | ArrayList SendParams = new ArrayList(); | 361 | ArrayList SendParams = new ArrayList(); |
@@ -372,6 +379,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
372 | 379 | ||
373 | private void NotifyMessageServerOfAgentLocation(UUID agentID, UUID region, ulong regionHandle) | 380 | private void NotifyMessageServerOfAgentLocation(UUID agentID, UUID region, ulong regionHandle) |
374 | { | 381 | { |
382 | if (m_Scenes[0].CommsManager.NetworkServersInfo.MessagingURL == string.Empty) | ||
383 | return; | ||
384 | |||
375 | Hashtable xmlrpcdata = new Hashtable(); | 385 | Hashtable xmlrpcdata = new Hashtable(); |
376 | xmlrpcdata["AgentID"] = agentID.ToString(); | 386 | xmlrpcdata["AgentID"] = agentID.ToString(); |
377 | xmlrpcdata["RegionUUID"] = region.ToString(); | 387 | xmlrpcdata["RegionUUID"] = region.ToString(); |
@@ -397,6 +407,9 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
397 | 407 | ||
398 | private void NotifyMessageServerOfAgentLeaving(UUID agentID, UUID region, ulong regionHandle) | 408 | private void NotifyMessageServerOfAgentLeaving(UUID agentID, UUID region, ulong regionHandle) |
399 | { | 409 | { |
410 | if (m_Scenes[0].CommsManager.NetworkServersInfo.MessagingURL == string.Empty) | ||
411 | return; | ||
412 | |||
400 | Hashtable xmlrpcdata = new Hashtable(); | 413 | Hashtable xmlrpcdata = new Hashtable(); |
401 | xmlrpcdata["AgentID"] = agentID.ToString(); | 414 | xmlrpcdata["AgentID"] = agentID.ToString(); |
402 | xmlrpcdata["RegionUUID"] = region.ToString(); | 415 | xmlrpcdata["RegionUUID"] = region.ToString(); |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 907e2d4..f761bf0 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -59,7 +59,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
59 | /// <value> | 59 | /// <value> |
60 | /// We only use this to request modules | 60 | /// We only use this to request modules |
61 | /// </value> | 61 | /// </value> |
62 | protected Scene m_scene; | 62 | protected Scene m_scene; |
63 | 63 | ||
64 | /// <value> | 64 | /// <value> |
65 | /// The stream from which the inventory archive will be loaded. | 65 | /// The stream from which the inventory archive will be loaded. |
@@ -186,7 +186,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
186 | item.Folder = foundFolder.ID; | 186 | item.Folder = foundFolder.ID; |
187 | 187 | ||
188 | //m_userInfo.AddItem(item); | 188 | //m_userInfo.AddItem(item); |
189 | m_scene.InventoryService.AddItem(item); | 189 | m_scene.InventoryService.AddItem(item); |
190 | successfulItemRestores++; | 190 | successfulItemRestores++; |
191 | 191 | ||
192 | // If we're loading an item directly into the given destination folder then we need to record | 192 | // If we're loading an item directly into the given destination folder then we need to record |
@@ -299,14 +299,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
299 | = new InventoryFolderBase( | 299 | = new InventoryFolderBase( |
300 | newFolderId, newFolderName, m_userInfo.UserProfile.ID, | 300 | newFolderId, newFolderName, m_userInfo.UserProfile.ID, |
301 | (short)AssetType.Unknown, destFolder.ID, 1); | 301 | (short)AssetType.Unknown, destFolder.ID, 1); |
302 | m_scene.InventoryService.AddFolder(destFolder); | 302 | m_scene.InventoryService.AddFolder(destFolder); |
303 | 303 | ||
304 | // UUID newFolderId = UUID.Random(); | 304 | // UUID newFolderId = UUID.Random(); |
305 | // m_scene.InventoryService.AddFolder( | 305 | // m_scene.InventoryService.AddFolder( |
306 | // m_userInfo.CreateFolder( | 306 | // m_userInfo.CreateFolder( |
307 | // folderName, newFolderId, (ushort)AssetType.Folder, foundFolder.ID); | 307 | // folderName, newFolderId, (ushort)AssetType.Folder, foundFolder.ID); |
308 | 308 | ||
309 | // m_log.DebugFormat("[INVENTORY ARCHIVER]: Retrieving newly created folder {0}", folderName); | 309 | // m_log.DebugFormat("[INVENTORY ARCHIVER]: Retrieving newly created folder {0}", folderName); |
310 | // foundFolder = foundFolder.GetChildFolder(newFolderId); | 310 | // foundFolder = foundFolder.GetChildFolder(newFolderId); |
311 | // m_log.DebugFormat( | 311 | // m_log.DebugFormat( |
312 | // "[INVENTORY ARCHIVER]: Retrieved newly created folder {0} with ID {1}", | 312 | // "[INVENTORY ARCHIVER]: Retrieved newly created folder {0} with ID {1}", |
@@ -321,7 +321,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
321 | nodesLoaded.Add(destFolder); | 321 | nodesLoaded.Add(destFolder); |
322 | 322 | ||
323 | i++; | 323 | i++; |
324 | } | 324 | } |
325 | 325 | ||
326 | return destFolder; | 326 | return destFolder; |
327 | 327 | ||
@@ -357,7 +357,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
357 | rawFolders[i++], newFolderId, (ushort)AssetType.Folder, foundFolder.ID); | 357 | rawFolders[i++], newFolderId, (ushort)AssetType.Folder, foundFolder.ID); |
358 | foundFolder = foundFolder.GetChildFolder(newFolderId); | 358 | foundFolder = foundFolder.GetChildFolder(newFolderId); |
359 | } | 359 | } |
360 | */ | 360 | */ |
361 | } | 361 | } |
362 | 362 | ||
363 | /// <summary> | 363 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs index 5ebf2fa..a822d10 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs | |||
@@ -42,7 +42,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
42 | 42 | ||
43 | /// <summary> | 43 | /// <summary> |
44 | /// Find a folder given a PATH_DELIMITER delimited path starting from a user's root folder | 44 | /// Find a folder given a PATH_DELIMITER delimited path starting from a user's root folder |
45 | /// </summary> | 45 | /// </summary> |
46 | /// | 46 | /// |
47 | /// This method does not handle paths that contain multiple delimitors | 47 | /// This method does not handle paths that contain multiple delimitors |
48 | /// | 48 | /// |
@@ -58,7 +58,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
58 | /// User id to search | 58 | /// User id to search |
59 | /// </param> | 59 | /// </param> |
60 | /// <param name="path"> | 60 | /// <param name="path"> |
61 | /// The path to the required folder. | 61 | /// The path to the required folder. |
62 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. | 62 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. |
63 | /// </param> | 63 | /// </param> |
64 | /// <returns>null if the folder is not found</returns> | 64 | /// <returns>null if the folder is not found</returns> |
@@ -71,11 +71,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
71 | return null; | 71 | return null; |
72 | 72 | ||
73 | return FindFolderByPath(inventoryService, rootFolder, path); | 73 | return FindFolderByPath(inventoryService, rootFolder, path); |
74 | } | 74 | } |
75 | 75 | ||
76 | /// <summary> | 76 | /// <summary> |
77 | /// Find a folder given a PATH_DELIMITER delimited path starting from this folder | 77 | /// Find a folder given a PATH_DELIMITER delimited path starting from this folder |
78 | /// </summary> | 78 | /// </summary> |
79 | /// | 79 | /// |
80 | /// This method does not handle paths that contain multiple delimitors | 80 | /// This method does not handle paths that contain multiple delimitors |
81 | /// | 81 | /// |
@@ -91,7 +91,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
91 | /// The folder from which the path starts | 91 | /// The folder from which the path starts |
92 | /// </param> | 92 | /// </param> |
93 | /// <param name="path"> | 93 | /// <param name="path"> |
94 | /// The path to the required folder. | 94 | /// The path to the required folder. |
95 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. | 95 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. |
96 | /// </param> | 96 | /// </param> |
97 | /// <returns>null if the folder is not found</returns> | 97 | /// <returns>null if the folder is not found</returns> |
@@ -154,7 +154,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
154 | return null; | 154 | return null; |
155 | 155 | ||
156 | return FindItemByPath(inventoryService, rootFolder, path); | 156 | return FindItemByPath(inventoryService, rootFolder, path); |
157 | } | 157 | } |
158 | 158 | ||
159 | /// <summary> | 159 | /// <summary> |
160 | /// Find an item given a PATH_DELIMITOR delimited path starting from this folder. | 160 | /// Find an item given a PATH_DELIMITOR delimited path starting from this folder. |
@@ -194,7 +194,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
194 | } | 194 | } |
195 | else | 195 | else |
196 | { | 196 | { |
197 | InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID); | 197 | InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID); |
198 | 198 | ||
199 | foreach (InventoryFolderBase folder in contents.Folders) | 199 | foreach (InventoryFolderBase folder in contents.Folders) |
200 | { | 200 | { |
@@ -205,6 +205,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
205 | 205 | ||
206 | // We didn't find an item or intermediate folder with the given name | 206 | // We didn't find an item or intermediate folder with the given name |
207 | return null; | 207 | return null; |
208 | } | 208 | } |
209 | } | 209 | } |
210 | } \ No newline at end of file | 210 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index 7b4a9eb..499c552 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |||
@@ -55,7 +55,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
55 | 55 | ||
56 | private InventoryArchiverModule m_module; | 56 | private InventoryArchiverModule m_module; |
57 | private CachedUserInfo m_userInfo; | 57 | private CachedUserInfo m_userInfo; |
58 | private string m_invPath; | 58 | private string m_invPath; |
59 | protected TarArchiveWriter m_archiveWriter; | 59 | protected TarArchiveWriter m_archiveWriter; |
60 | protected UuidGatherer m_assetGatherer; | 60 | protected UuidGatherer m_assetGatherer; |
61 | 61 | ||
@@ -118,6 +118,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
118 | 118 | ||
119 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) | 119 | protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) |
120 | { | 120 | { |
121 | // We're almost done. Just need to write out the control file now | ||
122 | m_archiveWriter.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, Create0p1ControlFile()); | ||
123 | m_log.InfoFormat("[ARCHIVER]: Added control file to archive."); | ||
124 | |||
121 | Exception reportedException = null; | 125 | Exception reportedException = null; |
122 | bool succeeded = true; | 126 | bool succeeded = true; |
123 | 127 | ||
@@ -164,7 +168,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
164 | { | 168 | { |
165 | path += CreateArchiveFolderName(inventoryFolder); | 169 | path += CreateArchiveFolderName(inventoryFolder); |
166 | 170 | ||
167 | // We need to make sure that we record empty folders | 171 | // We need to make sure that we record empty folders |
168 | m_archiveWriter.WriteDir(path); | 172 | m_archiveWriter.WriteDir(path); |
169 | } | 173 | } |
170 | 174 | ||
@@ -258,7 +262,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
258 | if (maxComponentIndex >= 0 && components[maxComponentIndex] == STAR_WILDCARD) | 262 | if (maxComponentIndex >= 0 && components[maxComponentIndex] == STAR_WILDCARD) |
259 | { | 263 | { |
260 | foundStar = true; | 264 | foundStar = true; |
261 | maxComponentIndex--; | 265 | maxComponentIndex--; |
262 | } | 266 | } |
263 | 267 | ||
264 | m_invPath = String.Empty; | 268 | m_invPath = String.Empty; |
@@ -320,7 +324,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
320 | SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !foundStar); | 324 | SaveInvFolder(inventoryFolder, ArchiveConstants.INVENTORY_PATH, !foundStar); |
321 | } | 325 | } |
322 | 326 | ||
323 | SaveUsers(); | 327 | // Don't put all this profile information into the archive right now. |
328 | //SaveUsers(); | ||
329 | |||
324 | new AssetsRequest( | 330 | new AssetsRequest( |
325 | new AssetsArchiver(m_archiveWriter), m_assetUuids.Keys, | 331 | new AssetsArchiver(m_archiveWriter), m_assetUuids.Keys, |
326 | m_scene.AssetService, ReceivedAllAssets).Execute(); | 332 | m_scene.AssetService, ReceivedAllAssets).Execute(); |
@@ -363,8 +369,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
363 | /// <returns></returns> | 369 | /// <returns></returns> |
364 | public static string CreateArchiveFolderName(InventoryFolderBase folder) | 370 | public static string CreateArchiveFolderName(InventoryFolderBase folder) |
365 | { | 371 | { |
366 | return CreateArchiveFolderName(folder.Name, folder.ID); | 372 | return CreateArchiveFolderName(folder.Name, folder.ID); |
367 | } | 373 | } |
368 | 374 | ||
369 | /// <summary> | 375 | /// <summary> |
370 | /// Create the archive name for a particular item. | 376 | /// Create the archive name for a particular item. |
@@ -377,7 +383,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
377 | /// <returns></returns> | 383 | /// <returns></returns> |
378 | public static string CreateArchiveItemName(InventoryItemBase item) | 384 | public static string CreateArchiveItemName(InventoryItemBase item) |
379 | { | 385 | { |
380 | return CreateArchiveItemName(item.Name, item.ID); | 386 | return CreateArchiveItemName(item.Name, item.ID); |
381 | } | 387 | } |
382 | 388 | ||
383 | /// <summary> | 389 | /// <summary> |
@@ -392,7 +398,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
392 | "{0}{1}{2}/", | 398 | "{0}{1}{2}/", |
393 | name, | 399 | name, |
394 | ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, | 400 | ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, |
395 | id); | 401 | id); |
396 | } | 402 | } |
397 | 403 | ||
398 | /// <summary> | 404 | /// <summary> |
@@ -400,14 +406,38 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
400 | /// </summary> | 406 | /// </summary> |
401 | /// <param name="name"></param> | 407 | /// <param name="name"></param> |
402 | /// <param name="id"></param> | 408 | /// <param name="id"></param> |
403 | /// <returns></returns> | 409 | /// <returns></returns> |
404 | public static string CreateArchiveItemName(string name, UUID id) | 410 | public static string CreateArchiveItemName(string name, UUID id) |
405 | { | 411 | { |
406 | return string.Format( | 412 | return string.Format( |
407 | "{0}{1}{2}.xml", | 413 | "{0}{1}{2}.xml", |
408 | name, | 414 | name, |
409 | ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, | 415 | ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, |
410 | id); | 416 | id); |
417 | } | ||
418 | |||
419 | /// <summary> | ||
420 | /// Create the control file for a 0.1 version archive | ||
421 | /// </summary> | ||
422 | /// <returns></returns> | ||
423 | public static string Create0p1ControlFile() | ||
424 | { | ||
425 | StringWriter sw = new StringWriter(); | ||
426 | XmlTextWriter xtw = new XmlTextWriter(sw); | ||
427 | xtw.Formatting = Formatting.Indented; | ||
428 | xtw.WriteStartDocument(); | ||
429 | xtw.WriteStartElement("archive"); | ||
430 | xtw.WriteAttributeString("major_version", "0"); | ||
431 | xtw.WriteAttributeString("minor_version", "1"); | ||
432 | xtw.WriteEndElement(); | ||
433 | |||
434 | xtw.Flush(); | ||
435 | xtw.Close(); | ||
436 | |||
437 | String s = sw.ToString(); | ||
438 | sw.Close(); | ||
439 | |||
440 | return s; | ||
411 | } | 441 | } |
412 | } | 442 | } |
413 | } \ No newline at end of file | 443 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index 9f49da9..1228eb1 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | |||
@@ -40,12 +40,12 @@ using OpenSim.Region.Framework.Scenes; | |||
40 | using OpenSim.Services.Interfaces; | 40 | using OpenSim.Services.Interfaces; |
41 | 41 | ||
42 | namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | 42 | namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver |
43 | { | 43 | { |
44 | /// <summary> | 44 | /// <summary> |
45 | /// This module loads and saves OpenSimulator inventory archives | 45 | /// This module loads and saves OpenSimulator inventory archives |
46 | /// </summary> | 46 | /// </summary> |
47 | public class InventoryArchiverModule : IRegionModule, IInventoryArchiverModule | 47 | public class InventoryArchiverModule : IRegionModule, IInventoryArchiverModule |
48 | { | 48 | { |
49 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 49 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
50 | 50 | ||
51 | public string Name { get { return "Inventory Archiver Module"; } } | 51 | public string Name { get { return "Inventory Archiver Module"; } } |
@@ -57,7 +57,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
57 | /// </value> | 57 | /// </value> |
58 | public bool DisablePresenceChecks { get; set; } | 58 | public bool DisablePresenceChecks { get; set; } |
59 | 59 | ||
60 | public event InventoryArchiveSaved OnInventoryArchiveSaved; | 60 | public event InventoryArchiveSaved OnInventoryArchiveSaved; |
61 | 61 | ||
62 | /// <summary> | 62 | /// <summary> |
63 | /// The file to load and save inventory if no filename has been specified | 63 | /// The file to load and save inventory if no filename has been specified |
@@ -83,7 +83,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
83 | } | 83 | } |
84 | 84 | ||
85 | public void Initialise(Scene scene, IConfigSource source) | 85 | public void Initialise(Scene scene, IConfigSource source) |
86 | { | 86 | { |
87 | if (m_scenes.Count == 0) | 87 | if (m_scenes.Count == 0) |
88 | { | 88 | { |
89 | scene.RegisterModuleInterface<IInventoryArchiverModule>(this); | 89 | scene.RegisterModuleInterface<IInventoryArchiverModule>(this); |
@@ -102,7 +102,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
102 | m_aScene = scene; | 102 | m_aScene = scene; |
103 | } | 103 | } |
104 | 104 | ||
105 | m_scenes[scene.RegionInfo.RegionID] = scene; | 105 | m_scenes[scene.RegionInfo.RegionID] = scene; |
106 | } | 106 | } |
107 | 107 | ||
108 | public void PostInitialise() {} | 108 | public void PostInitialise() {} |
@@ -119,7 +119,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
119 | InventoryArchiveSaved handlerInventoryArchiveSaved = OnInventoryArchiveSaved; | 119 | InventoryArchiveSaved handlerInventoryArchiveSaved = OnInventoryArchiveSaved; |
120 | if (handlerInventoryArchiveSaved != null) | 120 | if (handlerInventoryArchiveSaved != null) |
121 | handlerInventoryArchiveSaved(id, succeeded, userInfo, invPath, saveStream, reportedException); | 121 | handlerInventoryArchiveSaved(id, succeeded, userInfo, invPath, saveStream, reportedException); |
122 | } | 122 | } |
123 | 123 | ||
124 | public bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream) | 124 | public bool ArchiveInventory(Guid id, string firstName, string lastName, string invPath, string pass, Stream saveStream) |
125 | { | 125 | { |
@@ -174,7 +174,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
174 | public bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, Stream loadStream) | 174 | public bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, Stream loadStream) |
175 | { | 175 | { |
176 | if (m_scenes.Count > 0) | 176 | if (m_scenes.Count > 0) |
177 | { | 177 | { |
178 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName, pass); | 178 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName, pass); |
179 | 179 | ||
180 | if (userInfo != null) | 180 | if (userInfo != null) |
@@ -182,7 +182,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
182 | if (CheckPresence(userInfo.UserProfile.ID)) | 182 | if (CheckPresence(userInfo.UserProfile.ID)) |
183 | { | 183 | { |
184 | InventoryArchiveReadRequest request = | 184 | InventoryArchiveReadRequest request = |
185 | new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream); | 185 | new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadStream); |
186 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); | 186 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); |
187 | 187 | ||
188 | return true; | 188 | return true; |
@@ -197,12 +197,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
197 | } | 197 | } |
198 | 198 | ||
199 | return false; | 199 | return false; |
200 | } | 200 | } |
201 | 201 | ||
202 | public bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, string loadPath) | 202 | public bool DearchiveInventory(string firstName, string lastName, string invPath, string pass, string loadPath) |
203 | { | 203 | { |
204 | if (m_scenes.Count > 0) | 204 | if (m_scenes.Count > 0) |
205 | { | 205 | { |
206 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName, pass); | 206 | CachedUserInfo userInfo = GetUserInfo(firstName, lastName, pass); |
207 | 207 | ||
208 | if (userInfo != null) | 208 | if (userInfo != null) |
@@ -210,7 +210,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
210 | if (CheckPresence(userInfo.UserProfile.ID)) | 210 | if (CheckPresence(userInfo.UserProfile.ID)) |
211 | { | 211 | { |
212 | InventoryArchiveReadRequest request = | 212 | InventoryArchiveReadRequest request = |
213 | new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath); | 213 | new InventoryArchiveReadRequest(m_aScene, userInfo, invPath, loadPath); |
214 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); | 214 | UpdateClientWithLoadedNodes(userInfo, request.Execute()); |
215 | 215 | ||
216 | return true; | 216 | return true; |
@@ -221,11 +221,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
221 | "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator", | 221 | "[INVENTORY ARCHIVER]: User {0} {1} not logged in to this region simulator", |
222 | userInfo.UserProfile.Name, userInfo.UserProfile.ID); | 222 | userInfo.UserProfile.Name, userInfo.UserProfile.ID); |
223 | } | 223 | } |
224 | } | 224 | } |
225 | } | 225 | } |
226 | 226 | ||
227 | return false; | 227 | return false; |
228 | } | 228 | } |
229 | 229 | ||
230 | /// <summary> | 230 | /// <summary> |
231 | /// Load inventory from an inventory file archive | 231 | /// Load inventory from an inventory file archive |
@@ -252,7 +252,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
252 | "[INVENTORY ARCHIVER]: Loading archive {0} to inventory path {1} for {2} {3}", | 252 | "[INVENTORY ARCHIVER]: Loading archive {0} to inventory path {1} for {2} {3}", |
253 | loadPath, invPath, firstName, lastName); | 253 | loadPath, invPath, firstName, lastName); |
254 | 254 | ||
255 | if (DearchiveInventory(firstName, lastName, invPath, pass, loadPath)) | 255 | if (DearchiveInventory(firstName, lastName, invPath, pass, loadPath)) |
256 | m_log.InfoFormat( | 256 | m_log.InfoFormat( |
257 | "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}", | 257 | "[INVENTORY ARCHIVER]: Loaded archive {0} for {1} {2}", |
258 | loadPath, firstName, lastName); | 258 | loadPath, firstName, lastName); |
@@ -264,7 +264,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
264 | /// <param name="cmdparams"></param> | 264 | /// <param name="cmdparams"></param> |
265 | protected void HandleSaveInvConsoleCommand(string module, string[] cmdparams) | 265 | protected void HandleSaveInvConsoleCommand(string module, string[] cmdparams) |
266 | { | 266 | { |
267 | if (cmdparams.Length < 5) | 267 | if (cmdparams.Length < 6) |
268 | { | 268 | { |
269 | m_log.Error( | 269 | m_log.Error( |
270 | "[INVENTORY ARCHIVER]: usage is save iar <first name> <last name> <inventory path> <user password> [<save file path>]"); | 270 | "[INVENTORY ARCHIVER]: usage is save iar <first name> <last name> <inventory path> <user password> [<save file path>]"); |
@@ -288,7 +288,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
288 | 288 | ||
289 | lock (m_pendingConsoleSaves) | 289 | lock (m_pendingConsoleSaves) |
290 | m_pendingConsoleSaves.Add(id); | 290 | m_pendingConsoleSaves.Add(id); |
291 | } | 291 | } |
292 | 292 | ||
293 | private void SaveInvConsoleCommandCompleted( | 293 | private void SaveInvConsoleCommandCompleted( |
294 | Guid id, bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream, | 294 | Guid id, bool succeeded, CachedUserInfo userInfo, string invPath, Stream saveStream, |
@@ -324,6 +324,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
324 | protected CachedUserInfo GetUserInfo(string firstName, string lastName, string pass) | 324 | protected CachedUserInfo GetUserInfo(string firstName, string lastName, string pass) |
325 | { | 325 | { |
326 | CachedUserInfo userInfo = m_aScene.CommsManager.UserProfileCacheService.GetUserDetails(firstName, lastName); | 326 | CachedUserInfo userInfo = m_aScene.CommsManager.UserProfileCacheService.GetUserDetails(firstName, lastName); |
327 | //m_aScene.CommsManager.UserService.GetUserProfile(firstName, lastName); | ||
327 | if (null == userInfo) | 328 | if (null == userInfo) |
328 | { | 329 | { |
329 | m_log.ErrorFormat( | 330 | m_log.ErrorFormat( |
@@ -332,16 +333,25 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
332 | return null; | 333 | return null; |
333 | } | 334 | } |
334 | 335 | ||
335 | string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(pass) + ":" + userInfo.UserProfile.PasswordSalt); | 336 | try |
336 | if (userInfo.UserProfile.PasswordHash != md5PasswdHash) | ||
337 | { | 337 | { |
338 | m_log.ErrorFormat( | 338 | if (m_aScene.CommsManager.UserService.AuthenticateUserByPassword(userInfo.UserProfile.ID, pass)) |
339 | "[INVENTORY ARCHIVER]: Password for user {0} {1} incorrect. Please try again.", | 339 | { |
340 | firstName, lastName); | 340 | return userInfo; |
341 | } | ||
342 | else | ||
343 | { | ||
344 | m_log.ErrorFormat( | ||
345 | "[INVENTORY ARCHIVER]: Password for user {0} {1} incorrect. Please try again.", | ||
346 | firstName, lastName); | ||
347 | return null; | ||
348 | } | ||
349 | } | ||
350 | catch (Exception e) | ||
351 | { | ||
352 | m_log.ErrorFormat("[INVENTORY ARCHIVER]: Could not authenticate password, {0}", e.Message); | ||
341 | return null; | 353 | return null; |
342 | } | 354 | } |
343 | |||
344 | return userInfo; | ||
345 | } | 355 | } |
346 | 356 | ||
347 | /// <summary> | 357 | /// <summary> |
@@ -349,7 +359,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
349 | /// </summary> | 359 | /// </summary> |
350 | /// <param name="loadedNodes">Can be empty. In which case, nothing happens</param> | 360 | /// <param name="loadedNodes">Can be empty. In which case, nothing happens</param> |
351 | private void UpdateClientWithLoadedNodes(CachedUserInfo userInfo, List<InventoryNodeBase> loadedNodes) | 361 | private void UpdateClientWithLoadedNodes(CachedUserInfo userInfo, List<InventoryNodeBase> loadedNodes) |
352 | { | 362 | { |
353 | if (loadedNodes.Count == 0) | 363 | if (loadedNodes.Count == 0) |
354 | return; | 364 | return; |
355 | 365 | ||
@@ -358,19 +368,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
358 | ScenePresence user = scene.GetScenePresence(userInfo.UserProfile.ID); | 368 | ScenePresence user = scene.GetScenePresence(userInfo.UserProfile.ID); |
359 | 369 | ||
360 | if (user != null && !user.IsChildAgent) | 370 | if (user != null && !user.IsChildAgent) |
361 | { | 371 | { |
362 | foreach (InventoryNodeBase node in loadedNodes) | 372 | foreach (InventoryNodeBase node in loadedNodes) |
363 | { | 373 | { |
364 | m_log.DebugFormat( | 374 | // m_log.DebugFormat( |
365 | "[INVENTORY ARCHIVER]: Notifying {0} of loaded inventory node {1}", | 375 | // "[INVENTORY ARCHIVER]: Notifying {0} of loaded inventory node {1}", |
366 | user.Name, node.Name); | 376 | // user.Name, node.Name); |
367 | 377 | ||
368 | user.ControllingClient.SendBulkUpdateInventory(node); | 378 | user.ControllingClient.SendBulkUpdateInventory(node); |
369 | } | 379 | } |
370 | 380 | ||
371 | break; | 381 | break; |
372 | } | 382 | } |
373 | } | 383 | } |
374 | } | 384 | } |
375 | 385 | ||
376 | /// <summary> | 386 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index ed293cd..b0fdcd6 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs | |||
@@ -37,7 +37,7 @@ using OpenMetaverse; | |||
37 | using OpenSim.Data; | 37 | using OpenSim.Data; |
38 | using OpenSim.Framework; | 38 | using OpenSim.Framework; |
39 | using OpenSim.Framework.Serialization; | 39 | using OpenSim.Framework.Serialization; |
40 | using OpenSim.Framework.Serialization.External; | 40 | using OpenSim.Framework.Serialization.External; |
41 | using OpenSim.Framework.Communications; | 41 | using OpenSim.Framework.Communications; |
42 | using OpenSim.Framework.Communications.Cache; | 42 | using OpenSim.Framework.Communications.Cache; |
43 | using OpenSim.Framework.Communications.Osp; | 43 | using OpenSim.Framework.Communications.Osp; |
@@ -70,7 +70,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
70 | Exception reportedException) | 70 | Exception reportedException) |
71 | { | 71 | { |
72 | mre.Set(); | 72 | mre.Set(); |
73 | } | 73 | } |
74 | 74 | ||
75 | /// <summary> | 75 | /// <summary> |
76 | /// Test saving a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet). | 76 | /// Test saving a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet). |
@@ -157,7 +157,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
157 | string expectedObject1FilePath = string.Format( | 157 | string expectedObject1FilePath = string.Format( |
158 | "{0}{1}{2}", | 158 | "{0}{1}{2}", |
159 | ArchiveConstants.INVENTORY_PATH, | 159 | ArchiveConstants.INVENTORY_PATH, |
160 | InventoryArchiveWriteRequest.CreateArchiveFolderName(objsFolder), | 160 | InventoryArchiveWriteRequest.CreateArchiveFolderName(objsFolder), |
161 | expectedObject1FileName); | 161 | expectedObject1FileName); |
162 | 162 | ||
163 | string filePath; | 163 | string filePath; |
@@ -195,7 +195,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
195 | Assert.That(gotObject1File, Is.True, "No item1 file in archive"); | 195 | Assert.That(gotObject1File, Is.True, "No item1 file in archive"); |
196 | // Assert.That(gotObject2File, Is.True, "No object2 file in archive"); | 196 | // Assert.That(gotObject2File, Is.True, "No object2 file in archive"); |
197 | 197 | ||
198 | // TODO: Test presence of more files and contents of files. | 198 | // TODO: Test presence of more files and contents of files. |
199 | } | 199 | } |
200 | 200 | ||
201 | /// <summary> | 201 | /// <summary> |
@@ -206,7 +206,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
206 | /// This test also does some deeper probing of loading into nested inventory structures | 206 | /// This test also does some deeper probing of loading into nested inventory structures |
207 | [Test] | 207 | [Test] |
208 | public void TestLoadIarV0_1ExistingUsers() | 208 | public void TestLoadIarV0_1ExistingUsers() |
209 | { | 209 | { |
210 | TestHelper.InMethod(); | 210 | TestHelper.InMethod(); |
211 | 211 | ||
212 | //log4net.Config.XmlConfigurator.Configure(); | 212 | //log4net.Config.XmlConfigurator.Configure(); |
@@ -238,7 +238,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
238 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); | 238 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); |
239 | tar.Close(); | 239 | tar.Close(); |
240 | 240 | ||
241 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); | 241 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); |
242 | SerialiserModule serialiserModule = new SerialiserModule(); | 242 | SerialiserModule serialiserModule = new SerialiserModule(); |
243 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); | 243 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); |
244 | 244 | ||
@@ -271,9 +271,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
271 | Assert.That(foundItem1.Owner, Is.EqualTo(userUuid), | 271 | Assert.That(foundItem1.Owner, Is.EqualTo(userUuid), |
272 | "Loaded item owner doesn't match inventory reciever"); | 272 | "Loaded item owner doesn't match inventory reciever"); |
273 | 273 | ||
274 | // Now try loading to a root child folder | 274 | // Now try loading to a root child folder |
275 | UserInventoryTestUtils.CreateInventoryFolder(scene.InventoryService, userInfo.UserProfile.ID, "xA"); | 275 | UserInventoryTestUtils.CreateInventoryFolder(scene.InventoryService, userInfo.UserProfile.ID, "xA"); |
276 | archiveReadStream = new MemoryStream(archiveReadStream.ToArray()); | 276 | archiveReadStream = new MemoryStream(archiveReadStream.ToArray()); |
277 | archiverModule.DearchiveInventory(userFirstName, userLastName, "xA", "meowfood", archiveReadStream); | 277 | archiverModule.DearchiveInventory(userFirstName, userLastName, "xA", "meowfood", archiveReadStream); |
278 | 278 | ||
279 | InventoryItemBase foundItem2 | 279 | InventoryItemBase foundItem2 |
@@ -282,12 +282,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
282 | 282 | ||
283 | // Now try loading to a more deeply nested folder | 283 | // Now try loading to a more deeply nested folder |
284 | UserInventoryTestUtils.CreateInventoryFolder(scene.InventoryService, userInfo.UserProfile.ID, "xB/xC"); | 284 | UserInventoryTestUtils.CreateInventoryFolder(scene.InventoryService, userInfo.UserProfile.ID, "xB/xC"); |
285 | archiveReadStream = new MemoryStream(archiveReadStream.ToArray()); | 285 | archiveReadStream = new MemoryStream(archiveReadStream.ToArray()); |
286 | archiverModule.DearchiveInventory(userFirstName, userLastName, "xB/xC", "meowfood", archiveReadStream); | 286 | archiverModule.DearchiveInventory(userFirstName, userLastName, "xB/xC", "meowfood", archiveReadStream); |
287 | 287 | ||
288 | InventoryItemBase foundItem3 | 288 | InventoryItemBase foundItem3 |
289 | = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, userInfo.UserProfile.ID, "xB/xC/" + itemName); | 289 | = InventoryArchiveUtils.FindItemByPath(scene.InventoryService, userInfo.UserProfile.ID, "xB/xC/" + itemName); |
290 | Assert.That(foundItem3, Is.Not.Null, "Didn't find loaded item 3"); | 290 | Assert.That(foundItem3, Is.Not.Null, "Didn't find loaded item 3"); |
291 | } | 291 | } |
292 | 292 | ||
293 | /// <summary> | 293 | /// <summary> |
@@ -299,7 +299,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
299 | /// (as tested in the a later commented out test) | 299 | /// (as tested in the a later commented out test) |
300 | [Test] | 300 | [Test] |
301 | public void TestLoadIarV0_1AbsentUsers() | 301 | public void TestLoadIarV0_1AbsentUsers() |
302 | { | 302 | { |
303 | TestHelper.InMethod(); | 303 | TestHelper.InMethod(); |
304 | 304 | ||
305 | log4net.Config.XmlConfigurator.Configure(); | 305 | log4net.Config.XmlConfigurator.Configure(); |
@@ -331,7 +331,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
331 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); | 331 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); |
332 | tar.Close(); | 332 | tar.Close(); |
333 | 333 | ||
334 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); | 334 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); |
335 | SerialiserModule serialiserModule = new SerialiserModule(); | 335 | SerialiserModule serialiserModule = new SerialiserModule(); |
336 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); | 336 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); |
337 | 337 | ||
@@ -357,8 +357,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
357 | // "Loaded item non-uuid creator doesn't match that of the loading user"); | 357 | // "Loaded item non-uuid creator doesn't match that of the loading user"); |
358 | Assert.That( | 358 | Assert.That( |
359 | foundItem1.CreatorIdAsUuid, Is.EqualTo(userUuid), | 359 | foundItem1.CreatorIdAsUuid, Is.EqualTo(userUuid), |
360 | "Loaded item uuid creator doesn't match that of the loading user"); | 360 | "Loaded item uuid creator doesn't match that of the loading user"); |
361 | } | 361 | } |
362 | 362 | ||
363 | /// <summary> | 363 | /// <summary> |
364 | /// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where | 364 | /// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where |
@@ -367,7 +367,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
367 | /// Disabled since temporary profiles have not yet been implemented. | 367 | /// Disabled since temporary profiles have not yet been implemented. |
368 | //[Test] | 368 | //[Test] |
369 | public void TestLoadIarV0_1TempProfiles() | 369 | public void TestLoadIarV0_1TempProfiles() |
370 | { | 370 | { |
371 | TestHelper.InMethod(); | 371 | TestHelper.InMethod(); |
372 | 372 | ||
373 | log4net.Config.XmlConfigurator.Configure(); | 373 | log4net.Config.XmlConfigurator.Configure(); |
@@ -396,7 +396,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
396 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); | 396 | tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1)); |
397 | tar.Close(); | 397 | tar.Close(); |
398 | 398 | ||
399 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); | 399 | MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray()); |
400 | SerialiserModule serialiserModule = new SerialiserModule(); | 400 | SerialiserModule serialiserModule = new SerialiserModule(); |
401 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); | 401 | InventoryArchiverModule archiverModule = new InventoryArchiverModule(true); |
402 | 402 | ||
@@ -436,7 +436,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
436 | Assert.That(foundItem.Owner, Is.EqualTo(userUuid)); | 436 | Assert.That(foundItem.Owner, Is.EqualTo(userUuid)); |
437 | 437 | ||
438 | Console.WriteLine("### Successfully completed {0} ###", MethodBase.GetCurrentMethod()); | 438 | Console.WriteLine("### Successfully completed {0} ###", MethodBase.GetCurrentMethod()); |
439 | } | 439 | } |
440 | 440 | ||
441 | /// <summary> | 441 | /// <summary> |
442 | /// Test replication of an archive path to the user's inventory. | 442 | /// Test replication of an archive path to the user's inventory. |
@@ -474,7 +474,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
474 | string itemArchivePath | 474 | string itemArchivePath |
475 | = string.Format( | 475 | = string.Format( |
476 | "{0}{1}{2}{3}", | 476 | "{0}{1}{2}{3}", |
477 | ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemArchiveName); | 477 | ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemArchiveName); |
478 | 478 | ||
479 | //Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder); | 479 | //Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder); |
480 | 480 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index 75976e2..d9a021f 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs | |||
@@ -169,12 +169,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
169 | byte[] copyIDBytes = copyID.GetBytes(); | 169 | byte[] copyIDBytes = copyID.GetBytes(); |
170 | im.binaryBucket = new byte[1 + copyIDBytes.Length]; | 170 | im.binaryBucket = new byte[1 + copyIDBytes.Length]; |
171 | im.binaryBucket[0] = (byte)AssetType.Folder; | 171 | im.binaryBucket[0] = (byte)AssetType.Folder; |
172 | Array.Copy(copyIDBytes, 0, im.binaryBucket, 1, copyIDBytes.Length); | 172 | Array.Copy(copyIDBytes, 0, im.binaryBucket, 1, copyIDBytes.Length); |
173 | 173 | ||
174 | if (user != null && !user.IsChildAgent) | 174 | if (user != null && !user.IsChildAgent) |
175 | { | 175 | { |
176 | user.ControllingClient.SendBulkUpdateInventory(folderCopy); | 176 | user.ControllingClient.SendBulkUpdateInventory(folderCopy); |
177 | } | 177 | } |
178 | } | 178 | } |
179 | else | 179 | else |
180 | { | 180 | { |
@@ -199,10 +199,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
199 | } | 199 | } |
200 | 200 | ||
201 | copyID = itemCopy.ID; | 201 | copyID = itemCopy.ID; |
202 | Array.Copy(copyID.GetBytes(), 0, im.binaryBucket, 1, 16); | 202 | Array.Copy(copyID.GetBytes(), 0, im.binaryBucket, 1, 16); |
203 | 203 | ||
204 | if (user != null && !user.IsChildAgent) | 204 | if (user != null && !user.IsChildAgent) |
205 | { | 205 | { |
206 | user.ControllingClient.SendBulkUpdateInventory(itemCopy); | 206 | user.ControllingClient.SendBulkUpdateInventory(itemCopy); |
207 | } | 207 | } |
208 | } | 208 | } |
@@ -241,7 +241,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
241 | } | 241 | } |
242 | } | 242 | } |
243 | else if (im.dialog == (byte) InstantMessageDialog.InventoryDeclined) | 243 | else if (im.dialog == (byte) InstantMessageDialog.InventoryDeclined) |
244 | { | 244 | { |
245 | // Here, the recipient is local and we can assume that the | 245 | // Here, the recipient is local and we can assume that the |
246 | // inventory is loaded. Courtesy of the above bulk update, | 246 | // inventory is loaded. Courtesy of the above bulk update, |
247 | // It will have been pushed to the client, too | 247 | // It will have been pushed to the client, too |
@@ -284,7 +284,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
284 | } | 284 | } |
285 | 285 | ||
286 | if ((null == item && null == folder) | null == trashFolder) | 286 | if ((null == item && null == folder) | null == trashFolder) |
287 | { | 287 | { |
288 | string reason = String.Empty; | 288 | string reason = String.Empty; |
289 | 289 | ||
290 | if (trashFolder == null) | 290 | if (trashFolder == null) |
diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs index 34d46a0..1b23d92 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs | |||
@@ -316,7 +316,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
316 | 316 | ||
317 | // This will persist this beyond the expiry of the caps handlers | 317 | // This will persist this beyond the expiry of the caps handlers |
318 | MainServer.Instance.AddPollServiceHTTPHandler( | 318 | MainServer.Instance.AddPollServiceHTTPHandler( |
319 | capsBase + EventQueueGetUUID.ToString() + "/", EventQueuePath2, new PollServiceEventArgs(HasEvents, GetEvents, NoEvents, agentID)); | 319 | capsBase + EventQueueGetUUID.ToString() + "/", EventQueuePoll, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID)); |
320 | 320 | ||
321 | Random rnd = new Random(Environment.TickCount); | 321 | Random rnd = new Random(Environment.TickCount); |
322 | lock (m_ids) | 322 | lock (m_ids) |
@@ -326,7 +326,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
326 | } | 326 | } |
327 | } | 327 | } |
328 | 328 | ||
329 | public bool HasEvents(UUID agentID) | 329 | public bool HasEvents(UUID requestID, UUID agentID) |
330 | { | 330 | { |
331 | // Don't use this, because of race conditions at agent closing time | 331 | // Don't use this, because of race conditions at agent closing time |
332 | //Queue<OSD> queue = TryGetQueue(agentID); | 332 | //Queue<OSD> queue = TryGetQueue(agentID); |
@@ -343,14 +343,14 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
343 | return false; | 343 | return false; |
344 | } | 344 | } |
345 | 345 | ||
346 | public Hashtable GetEvents(UUID pAgentId, string request) | 346 | public Hashtable GetEvents(UUID requestID, UUID pAgentId, string request) |
347 | { | 347 | { |
348 | Queue<OSD> queue = TryGetQueue(pAgentId); | 348 | Queue<OSD> queue = TryGetQueue(pAgentId); |
349 | OSD element; | 349 | OSD element; |
350 | lock (queue) | 350 | lock (queue) |
351 | { | 351 | { |
352 | if (queue.Count == 0) | 352 | if (queue.Count == 0) |
353 | return NoEvents(); | 353 | return NoEvents(requestID, pAgentId); |
354 | element = queue.Dequeue(); // 15s timeout | 354 | element = queue.Dequeue(); // 15s timeout |
355 | } | 355 | } |
356 | 356 | ||
@@ -398,7 +398,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
398 | //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", agentID, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); | 398 | //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", agentID, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); |
399 | } | 399 | } |
400 | 400 | ||
401 | public Hashtable NoEvents() | 401 | public Hashtable NoEvents(UUID requestID, UUID agentID) |
402 | { | 402 | { |
403 | Hashtable responsedata = new Hashtable(); | 403 | Hashtable responsedata = new Hashtable(); |
404 | responsedata["int_response_code"] = 502; | 404 | responsedata["int_response_code"] = 502; |
@@ -454,7 +454,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
454 | responsedata["error_status_text"] = "Upstream error:"; | 454 | responsedata["error_status_text"] = "Upstream error:"; |
455 | responsedata["http_protocol_version"] = "HTTP/1.0"; | 455 | responsedata["http_protocol_version"] = "HTTP/1.0"; |
456 | return responsedata; | 456 | return responsedata; |
457 | } | 457 | } |
458 | 458 | ||
459 | OSDArray array = new OSDArray(); | 459 | OSDArray array = new OSDArray(); |
460 | if (element == null) // didn't have an event in 15s | 460 | if (element == null) // didn't have an event in 15s |
@@ -491,6 +491,11 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue | |||
491 | return responsedata; | 491 | return responsedata; |
492 | } | 492 | } |
493 | 493 | ||
494 | public Hashtable EventQueuePoll(Hashtable request) | ||
495 | { | ||
496 | return new Hashtable(); | ||
497 | } | ||
498 | |||
494 | public Hashtable EventQueuePath2(Hashtable request) | 499 | public Hashtable EventQueuePath2(Hashtable request) |
495 | { | 500 | { |
496 | string capuuid = (string)request["uri"]; //path.Replace("/CAPS/EQG/",""); | 501 | string capuuid = (string)request["uri"]; //path.Replace("/CAPS/EQG/",""); |
diff --git a/OpenSim/Region/CoreModules/Framework/Services/RegionMapService.cs b/OpenSim/Region/CoreModules/Framework/Services/RegionMapService.cs deleted file mode 100644 index 8c92727..0000000 --- a/OpenSim/Region/CoreModules/Framework/Services/RegionMapService.cs +++ /dev/null | |||
@@ -1,208 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Net; | ||
32 | using System.Reflection; | ||
33 | using log4net; | ||
34 | using Nini.Config; | ||
35 | using OpenMetaverse; | ||
36 | using OpenSim.Data; | ||
37 | using OpenSim.Framework; | ||
38 | using OpenSim.Framework.Communications; | ||
39 | using OpenSim.Framework.Communications.Cache; | ||
40 | using OpenSim.Framework.Servers.HttpServer; | ||
41 | using OpenSim.Region.Framework.Interfaces; | ||
42 | using OpenSim.Region.Framework.Scenes; | ||
43 | |||
44 | using Nwc.XmlRpc; | ||
45 | |||
46 | |||
47 | namespace OpenSim.Region.CoreModules.Framework.Services | ||
48 | { | ||
49 | public class RegionMapService : IRegionModule | ||
50 | { | ||
51 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
52 | private static bool initialized = false; | ||
53 | private static bool enabled = false; | ||
54 | |||
55 | Scene m_scene; | ||
56 | //AssetService m_assetService; | ||
57 | |||
58 | #region IRegionModule interface | ||
59 | |||
60 | public void Initialise(Scene scene, IConfigSource config) | ||
61 | { | ||
62 | if (!initialized) | ||
63 | { | ||
64 | initialized = true; | ||
65 | m_scene = scene; | ||
66 | |||
67 | // This module is only on for hypergrid mode | ||
68 | enabled = config.Configs["Startup"].GetBoolean("hypergrid", false); | ||
69 | } | ||
70 | } | ||
71 | |||
72 | public void PostInitialise() | ||
73 | { | ||
74 | if (enabled) | ||
75 | { | ||
76 | m_log.Info("[RegionMapService]: Starting..."); | ||
77 | |||
78 | //m_assetService = new AssetService(m_scene); | ||
79 | new GridService(m_scene); | ||
80 | } | ||
81 | } | ||
82 | |||
83 | public void Close() | ||
84 | { | ||
85 | } | ||
86 | |||
87 | public string Name | ||
88 | { | ||
89 | get { return "RegionMapService"; } | ||
90 | } | ||
91 | |||
92 | public bool IsSharedModule | ||
93 | { | ||
94 | get { return true; } | ||
95 | } | ||
96 | |||
97 | #endregion | ||
98 | |||
99 | } | ||
100 | |||
101 | public class GridService | ||
102 | { | ||
103 | // private IUserService m_userService; | ||
104 | private IGridServices m_gridService; | ||
105 | private bool m_doLookup = false; | ||
106 | |||
107 | public bool DoLookup | ||
108 | { | ||
109 | get { return m_doLookup; } | ||
110 | set { m_doLookup = value; } | ||
111 | } | ||
112 | private static readonly ILog m_log | ||
113 | = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
114 | |||
115 | public GridService(Scene m_scene) | ||
116 | { | ||
117 | AddHandlers(m_scene); | ||
118 | // m_userService = m_scene.CommsManager.UserService; | ||
119 | m_gridService = m_scene.CommsManager.GridService; | ||
120 | } | ||
121 | |||
122 | protected void AddHandlers(Scene m_scene) | ||
123 | { | ||
124 | // IAssetDataPlugin m_assetProvider | ||
125 | // = ((AssetServerBase)m_scene.CommsManager.AssetCache.AssetServer).AssetProviderPlugin; | ||
126 | |||
127 | IHttpServer httpServer = MainServer.Instance; | ||
128 | httpServer.AddXmlRPCHandler("simulator_data_request", XmlRpcSimulatorDataRequestMethod); | ||
129 | //m_httpServer.AddXmlRPCHandler("map_block", XmlRpcMapBlockMethod); | ||
130 | //m_httpServer.AddXmlRPCHandler("search_for_region_by_name", XmlRpcSearchForRegionMethod); | ||
131 | |||
132 | } | ||
133 | |||
134 | /// <summary> | ||
135 | /// Returns an XML RPC response to a simulator profile request | ||
136 | /// </summary> | ||
137 | /// <param name="request"></param> | ||
138 | /// <returns></returns> | ||
139 | public XmlRpcResponse XmlRpcSimulatorDataRequestMethod(XmlRpcRequest request, IPEndPoint remoteClient) | ||
140 | { | ||
141 | Hashtable requestData = (Hashtable)request.Params[0]; | ||
142 | Hashtable responseData = new Hashtable(); | ||
143 | RegionInfo simData = null; | ||
144 | if (requestData.ContainsKey("region_UUID")) | ||
145 | { | ||
146 | UUID regionID = new UUID((string)requestData["region_UUID"]); | ||
147 | simData = m_gridService.RequestNeighbourInfo(regionID); //.GetRegion(regionID); | ||
148 | if (simData == null) | ||
149 | { | ||
150 | m_log.WarnFormat("[HGGridService] didn't find region for regionID {0} from {1}", | ||
151 | regionID, request.Params.Count > 1 ? request.Params[1] : "unknwon source"); | ||
152 | } | ||
153 | } | ||
154 | else if (requestData.ContainsKey("region_handle")) | ||
155 | { | ||
156 | //CFK: The if/else below this makes this message redundant. | ||
157 | //CFK: m_log.Info("requesting data for region " + (string) requestData["region_handle"]); | ||
158 | ulong regionHandle = Convert.ToUInt64((string)requestData["region_handle"]); | ||
159 | simData = m_gridService.RequestNeighbourInfo(regionHandle); //m_gridDBService.GetRegion(regionHandle); | ||
160 | if (simData == null) | ||
161 | { | ||
162 | m_log.WarnFormat("[HGGridService] didn't find region for regionHandle {0} from {1}", | ||
163 | regionHandle, request.Params.Count > 1 ? request.Params[1] : "unknwon source"); | ||
164 | } | ||
165 | } | ||
166 | else if (requestData.ContainsKey("region_name_search")) | ||
167 | { | ||
168 | string regionName = (string)requestData["region_name_search"]; | ||
169 | List<RegionInfo> regInfos = m_gridService.RequestNamedRegions(regionName, 1);//m_gridDBService.GetRegion(regionName); | ||
170 | if (regInfos != null) | ||
171 | simData = regInfos[0]; | ||
172 | |||
173 | if (simData == null) | ||
174 | { | ||
175 | m_log.WarnFormat("[HGGridService] didn't find region for regionName {0} from {1}", | ||
176 | regionName, request.Params.Count > 1 ? request.Params[1] : "unknwon source"); | ||
177 | } | ||
178 | } | ||
179 | else m_log.Warn("[HGGridService] regionlookup without regionID, regionHandle or regionHame"); | ||
180 | |||
181 | if (simData == null) | ||
182 | { | ||
183 | //Sim does not exist | ||
184 | responseData["error"] = "Sim does not exist"; | ||
185 | } | ||
186 | else | ||
187 | { | ||
188 | m_log.Debug("[HGGridService]: found " + (string)simData.RegionName + " regionHandle = " + | ||
189 | (string)requestData["region_handle"]); | ||
190 | responseData["sim_ip"] = simData.ExternalEndPoint.Address.ToString(); | ||
191 | responseData["sim_port"] = simData.ExternalEndPoint.Port.ToString(); | ||
192 | //responseData["server_uri"] = simData.serverURI; | ||
193 | responseData["http_port"] = simData.HttpPort.ToString(); | ||
194 | //responseData["remoting_port"] = simData.remotingPort.ToString(); | ||
195 | responseData["region_locx"] = simData.RegionLocX.ToString(); | ||
196 | responseData["region_locy"] = simData.RegionLocY.ToString(); | ||
197 | responseData["region_UUID"] = simData.RegionID.ToString(); | ||
198 | responseData["region_name"] = simData.RegionName; | ||
199 | responseData["region_secret"] = simData.regionSecret; | ||
200 | } | ||
201 | |||
202 | XmlRpcResponse response = new XmlRpcResponse(); | ||
203 | response.Value = responseData; | ||
204 | return response; | ||
205 | } | ||
206 | |||
207 | } | ||
208 | } | ||
diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs index 613dbe9..4199c98 100644 --- a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs +++ b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs | |||
@@ -61,7 +61,7 @@ namespace OpenSim.Region.CoreModules.Hypergrid | |||
61 | { | 61 | { |
62 | if (m_firstScene != null) | 62 | if (m_firstScene != null) |
63 | { | 63 | { |
64 | return m_firstScene.CommsManager.GridService.RegionLoginsEnabled; | 64 | return m_firstScene.SceneGridService.RegionLoginsEnabled; |
65 | } | 65 | } |
66 | else | 66 | else |
67 | { | 67 | { |
diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs index 6774060..a0ccdc7 100644 --- a/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs +++ b/OpenSim/Region/CoreModules/Hypergrid/HGWorldMapModule.cs | |||
@@ -34,6 +34,7 @@ using OpenSim.Framework; | |||
34 | using OpenSim.Region.CoreModules.World.WorldMap; | 34 | using OpenSim.Region.CoreModules.World.WorldMap; |
35 | using OpenSim.Region.Framework.Interfaces; | 35 | using OpenSim.Region.Framework.Interfaces; |
36 | using OpenSim.Region.Framework.Scenes; | 36 | using OpenSim.Region.Framework.Scenes; |
37 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
37 | 38 | ||
38 | namespace OpenSim.Region.CoreModules.Hypergrid | 39 | namespace OpenSim.Region.CoreModules.Hypergrid |
39 | { | 40 | { |
@@ -59,7 +60,17 @@ namespace OpenSim.Region.CoreModules.Hypergrid | |||
59 | 60 | ||
60 | protected override void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) | 61 | protected override void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) |
61 | { | 62 | { |
62 | List<MapBlockData> mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, maxX + 4, maxY + 4); | 63 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); |
64 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | ||
65 | (minX - 4) * (int)Constants.RegionSize, (maxX + 4) * (int)Constants.RegionSize, | ||
66 | (minY - 4) * (int)Constants.RegionSize, (maxY + 4) * (int)Constants.RegionSize); | ||
67 | |||
68 | foreach (GridRegion r in regions) | ||
69 | { | ||
70 | MapBlockData block = new MapBlockData(); | ||
71 | MapBlockFromGridRegion(block, r); | ||
72 | mapBlocks.Add(block); | ||
73 | } | ||
63 | 74 | ||
64 | // Different from super | 75 | // Different from super |
65 | FillInMap(mapBlocks, minX, minY, maxX, maxY); | 76 | FillInMap(mapBlocks, minX, minY, maxX, maxY); |
diff --git a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs index e9c1e9d..7d6f150 100644 --- a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs +++ b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs | |||
@@ -353,11 +353,11 @@ namespace OpenSim.Region.CoreModules.InterGrid | |||
353 | return responseMap; | 353 | return responseMap; |
354 | } | 354 | } |
355 | 355 | ||
356 | // Using OpenSim.Framework.Capabilities.Caps here one time.. | 356 | // Using OpenSim.Framework.Capabilities.Caps here one time.. |
357 | // so the long name is probably better then a using statement | 357 | // so the long name is probably better then a using statement |
358 | public void OnRegisterCaps(UUID agentID, Caps caps) | 358 | public void OnRegisterCaps(UUID agentID, Caps caps) |
359 | { | 359 | { |
360 | /* If we ever want to register our own caps here.... | 360 | /* If we ever want to register our own caps here.... |
361 | * | 361 | * |
362 | string capsBase = "/CAPS/" + caps.CapsObjectPath; | 362 | string capsBase = "/CAPS/" + caps.CapsObjectPath; |
363 | caps.RegisterHandler("CAPNAME", | 363 | caps.RegisterHandler("CAPNAME", |
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml index f9e61aa..8f82718 100644 --- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml +++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml | |||
@@ -38,11 +38,15 @@ | |||
38 | <RegionModule id="RemoteLandServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Land.RemoteLandServicesConnector" /> | 38 | <RegionModule id="RemoteLandServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Land.RemoteLandServicesConnector" /> |
39 | <RegionModule id="LocalInterregionComms" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion.LocalInterregionComms" /> | 39 | <RegionModule id="LocalInterregionComms" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion.LocalInterregionComms" /> |
40 | <RegionModule id="RESTInterregionComms" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion.RESTInterregionComms" /> | 40 | <RegionModule id="RESTInterregionComms" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion.RESTInterregionComms" /> |
41 | <RegionModule id="LocalGridServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.LocalGridServicesConnector" /> | ||
42 | <RegionModule id="RemoteGridServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.RemoteGridServicesConnector" /> | ||
43 | <RegionModule id="HGGridConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.HGGridConnector" /> | ||
41 | <!-- Service connectors IN modules --> | 44 | <!-- Service connectors IN modules --> |
42 | <RegionModule id="AssetServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Asset.AssetServiceInConnectorModule" /> | 45 | <RegionModule id="AssetServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Asset.AssetServiceInConnectorModule" /> |
43 | <RegionModule id="InventoryServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Inventory.InventoryServiceInConnectorModule" /> | 46 | <RegionModule id="InventoryServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Inventory.InventoryServiceInConnectorModule" /> |
44 | <RegionModule id="LandServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Land.LandServiceInConnectorModule" /> | 47 | <RegionModule id="LandServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Land.LandServiceInConnectorModule" /> |
45 | <RegionModule id="NeighbourServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour.NeighbourServiceInConnectorModule" /> \ | 48 | <RegionModule id="NeighbourServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour.NeighbourServiceInConnectorModule" /> \ |
49 | <RegionModule id="HypergridServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Grid.HypergridServiceInConnectorModule" /> \ | ||
46 | 50 | ||
47 | </Extension> | 51 | </Extension> |
48 | 52 | ||
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs index 6a2a6c8..b885420 100644 --- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs | |||
@@ -55,14 +55,19 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
55 | public UUID requestID; | 55 | public UUID requestID; |
56 | public Dictionary<string, string> headers; | 56 | public Dictionary<string, string> headers; |
57 | public string body; | 57 | public string body; |
58 | public int responseCode; | ||
59 | public string responseBody; | ||
58 | public ManualResetEvent ev; | 60 | public ManualResetEvent ev; |
61 | public bool requestDone; | ||
62 | public int startTime; | ||
63 | public string uri; | ||
59 | } | 64 | } |
60 | 65 | ||
61 | public class UrlModule : ISharedRegionModule, IUrlModule | 66 | public class UrlModule : ISharedRegionModule, IUrlModule |
62 | { | 67 | { |
63 | // private static readonly ILog m_log = | 68 | private static readonly ILog m_log = |
64 | // LogManager.GetLogger( | 69 | LogManager.GetLogger( |
65 | // MethodBase.GetCurrentMethod().DeclaringType); | 70 | MethodBase.GetCurrentMethod().DeclaringType); |
66 | 71 | ||
67 | private Dictionary<UUID, UrlData> m_RequestMap = | 72 | private Dictionary<UUID, UrlData> m_RequestMap = |
68 | new Dictionary<UUID, UrlData>(); | 73 | new Dictionary<UUID, UrlData>(); |
@@ -70,15 +75,23 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
70 | private Dictionary<string, UrlData> m_UrlMap = | 75 | private Dictionary<string, UrlData> m_UrlMap = |
71 | new Dictionary<string, UrlData>(); | 76 | new Dictionary<string, UrlData>(); |
72 | 77 | ||
78 | |||
73 | private int m_TotalUrls = 100; | 79 | private int m_TotalUrls = 100; |
74 | 80 | ||
75 | private IHttpServer m_HttpServer = null; | 81 | private IHttpServer m_HttpServer = null; |
76 | 82 | ||
83 | private string m_ExternalHostNameForLSL = ""; | ||
84 | |||
77 | public Type ReplaceableInterface | 85 | public Type ReplaceableInterface |
78 | { | 86 | { |
79 | get { return null; } | 87 | get { return null; } |
80 | } | 88 | } |
81 | 89 | ||
90 | private Hashtable HandleHttpPoll(Hashtable request) | ||
91 | { | ||
92 | return new Hashtable(); | ||
93 | } | ||
94 | |||
82 | public string Name | 95 | public string Name |
83 | { | 96 | { |
84 | get { return "UrlModule"; } | 97 | get { return "UrlModule"; } |
@@ -86,6 +99,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
86 | 99 | ||
87 | public void Initialise(IConfigSource config) | 100 | public void Initialise(IConfigSource config) |
88 | { | 101 | { |
102 | m_ExternalHostNameForLSL = config.Configs["Network"].GetString("ExternalHostNameForLSL", System.Environment.MachineName); | ||
89 | } | 103 | } |
90 | 104 | ||
91 | public void PostInitialise() | 105 | public void PostInitialise() |
@@ -117,7 +131,6 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
117 | public void Close() | 131 | public void Close() |
118 | { | 132 | { |
119 | } | 133 | } |
120 | |||
121 | public UUID RequestURL(IScriptModule engine, SceneObjectPart host, UUID itemID) | 134 | public UUID RequestURL(IScriptModule engine, SceneObjectPart host, UUID itemID) |
122 | { | 135 | { |
123 | UUID urlcode = UUID.Random(); | 136 | UUID urlcode = UUID.Random(); |
@@ -129,7 +142,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
129 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" }); | 142 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" }); |
130 | return urlcode; | 143 | return urlcode; |
131 | } | 144 | } |
132 | string url = "http://"+System.Environment.MachineName+":"+m_HttpServer.Port.ToString()+"/lslhttp/"+urlcode.ToString()+"/"; | 145 | string url = "http://" + m_ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + "/lslhttp/" + urlcode.ToString() + "/"; |
133 | 146 | ||
134 | UrlData urlData = new UrlData(); | 147 | UrlData urlData = new UrlData(); |
135 | urlData.hostID = host.UUID; | 148 | urlData.hostID = host.UUID; |
@@ -139,9 +152,14 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
139 | urlData.urlcode = urlcode; | 152 | urlData.urlcode = urlcode; |
140 | urlData.requests = new Dictionary<UUID, RequestData>(); | 153 | urlData.requests = new Dictionary<UUID, RequestData>(); |
141 | 154 | ||
155 | |||
142 | m_UrlMap[url] = urlData; | 156 | m_UrlMap[url] = urlData; |
143 | 157 | ||
144 | m_HttpServer.AddHTTPHandler("/lslhttp/"+urlcode.ToString()+"/", HttpRequestHandler); | 158 | string uri = "/lslhttp/" + urlcode.ToString() + "/"; |
159 | |||
160 | m_HttpServer.AddPollServiceHTTPHandler(uri,HandleHttpPoll, | ||
161 | new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents, | ||
162 | urlcode)); | ||
145 | 163 | ||
146 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url }); | 164 | engine.PostScriptEvent(itemID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url }); |
147 | } | 165 | } |
@@ -165,7 +183,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
165 | UrlData data; | 183 | UrlData data; |
166 | 184 | ||
167 | if (!m_UrlMap.TryGetValue(url, out data)) | 185 | if (!m_UrlMap.TryGetValue(url, out data)) |
186 | { | ||
168 | return; | 187 | return; |
188 | } | ||
169 | 189 | ||
170 | foreach (UUID req in data.requests.Keys) | 190 | foreach (UUID req in data.requests.Keys) |
171 | m_RequestMap.Remove(req); | 191 | m_RequestMap.Remove(req); |
@@ -174,13 +194,36 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
174 | m_UrlMap.Remove(url); | 194 | m_UrlMap.Remove(url); |
175 | } | 195 | } |
176 | } | 196 | } |
177 | 197 | ||
178 | public void HttpResponse(UUID request, int status, string body) | 198 | public void HttpResponse(UUID request, int status, string body) |
179 | { | 199 | { |
200 | if (m_RequestMap.ContainsKey(request)) | ||
201 | { | ||
202 | UrlData urlData = m_RequestMap[request]; | ||
203 | urlData.requests[request].responseCode = status; | ||
204 | urlData.requests[request].responseBody = body; | ||
205 | //urlData.requests[request].ev.Set(); | ||
206 | urlData.requests[request].requestDone =true; | ||
207 | } | ||
208 | else | ||
209 | { | ||
210 | m_log.Info("[HttpRequestHandler] There is no http-in request with id " + request.ToString()); | ||
211 | } | ||
180 | } | 212 | } |
181 | 213 | ||
182 | public string GetHttpHeader(UUID request, string header) | 214 | public string GetHttpHeader(UUID requestId, string header) |
183 | { | 215 | { |
216 | if (m_RequestMap.ContainsKey(requestId)) | ||
217 | { | ||
218 | UrlData urlData=m_RequestMap[requestId]; | ||
219 | string value; | ||
220 | if (urlData.requests[requestId].headers.TryGetValue(header,out value)) | ||
221 | return value; | ||
222 | } | ||
223 | else | ||
224 | { | ||
225 | m_log.Warn("[HttpRequestHandler] There was no http-in request with id " + requestId); | ||
226 | } | ||
184 | return String.Empty; | 227 | return String.Empty; |
185 | } | 228 | } |
186 | 229 | ||
@@ -233,26 +276,214 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp | |||
233 | } | 276 | } |
234 | } | 277 | } |
235 | 278 | ||
279 | |||
236 | private void RemoveUrl(UrlData data) | 280 | private void RemoveUrl(UrlData data) |
237 | { | 281 | { |
238 | m_HttpServer.RemoveHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/"); | 282 | m_HttpServer.RemoveHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/"); |
239 | } | 283 | } |
240 | 284 | ||
241 | private Hashtable HttpRequestHandler(Hashtable request) | 285 | private Hashtable NoEvents(UUID requestID, UUID sessionID) |
242 | { | 286 | { |
243 | string uri = request["uri"].ToString(); | 287 | Hashtable response = new Hashtable(); |
244 | //A solution to this ugly mess would be to use only the /lslhttp/<UUID>/ part of the URI as the key. | 288 | UrlData url; |
245 | UrlData url = m_UrlMap["http://"+System.Environment.MachineName+":"+m_HttpServer.Port.ToString()+uri]; | 289 | lock (m_RequestMap) |
290 | { | ||
291 | if (!m_RequestMap.ContainsKey(requestID)) | ||
292 | return response; | ||
293 | url = m_RequestMap[requestID]; | ||
294 | } | ||
295 | |||
296 | if (System.Environment.TickCount - url.requests[requestID].startTime > 25000) | ||
297 | { | ||
298 | response["int_response_code"] = 500; | ||
299 | response["str_response_string"] = "Script timeout"; | ||
300 | response["content_type"] = "text/plain"; | ||
301 | response["keepalive"] = false; | ||
302 | response["reusecontext"] = false; | ||
303 | |||
304 | //remove from map | ||
305 | lock (url) | ||
306 | { | ||
307 | url.requests.Remove(requestID); | ||
308 | m_RequestMap.Remove(requestID); | ||
309 | } | ||
310 | |||
311 | return response; | ||
312 | } | ||
313 | |||
314 | |||
315 | return response; | ||
316 | } | ||
317 | |||
318 | private bool HasEvents(UUID requestID, UUID sessionID) | ||
319 | { | ||
320 | UrlData url=null; | ||
246 | 321 | ||
247 | //UUID.Random() below is a hack! Eventually we will do HTTP requests and responses properly. | 322 | lock (m_RequestMap) |
248 | url.engine.PostScriptEvent(url.itemID, "http_request", new Object[] { UUID.Random().ToString(), request["http-method"].ToString(), request["body"].ToString() }); | 323 | { |
324 | if (!m_RequestMap.ContainsKey(requestID)) | ||
325 | { | ||
326 | return false; | ||
327 | } | ||
328 | url = m_RequestMap[requestID]; | ||
329 | if (!url.requests.ContainsKey(requestID)) | ||
330 | { | ||
331 | return false; | ||
332 | } | ||
333 | } | ||
249 | 334 | ||
335 | if (System.Environment.TickCount-url.requests[requestID].startTime>25000) | ||
336 | { | ||
337 | return true; | ||
338 | } | ||
339 | |||
340 | if (url.requests[requestID].requestDone) | ||
341 | return true; | ||
342 | else | ||
343 | return false; | ||
344 | |||
345 | } | ||
346 | private Hashtable GetEvents(UUID requestID, UUID sessionID, string request) | ||
347 | { | ||
348 | UrlData url = null; | ||
349 | RequestData requestData = null; | ||
350 | |||
351 | lock (m_RequestMap) | ||
352 | { | ||
353 | if (!m_RequestMap.ContainsKey(requestID)) | ||
354 | return NoEvents(requestID,sessionID); | ||
355 | url = m_RequestMap[requestID]; | ||
356 | requestData = url.requests[requestID]; | ||
357 | } | ||
358 | |||
359 | if (!requestData.requestDone) | ||
360 | return NoEvents(requestID,sessionID); | ||
361 | |||
250 | Hashtable response = new Hashtable(); | 362 | Hashtable response = new Hashtable(); |
251 | response["int_response_code"] = 200; | 363 | |
252 | response["str_response_string"] = "This is a generic response as OpenSim does not yet support proper responses. Your request has been passed to the object."; | 364 | if (System.Environment.TickCount - requestData.startTime > 25000) |
365 | { | ||
366 | response["int_response_code"] = 500; | ||
367 | response["str_response_string"] = "Script timeout"; | ||
368 | response["content_type"] = "text/plain"; | ||
369 | response["keepalive"] = false; | ||
370 | response["reusecontext"] = false; | ||
371 | return response; | ||
372 | } | ||
373 | //put response | ||
374 | response["int_response_code"] = requestData.responseCode; | ||
375 | response["str_response_string"] = requestData.responseBody; | ||
376 | response["content_type"] = "text/plain"; | ||
377 | response["keepalive"] = false; | ||
378 | response["reusecontext"] = false; | ||
379 | |||
380 | //remove from map | ||
381 | lock (url) | ||
382 | { | ||
383 | url.requests.Remove(requestID); | ||
384 | m_RequestMap.Remove(requestID); | ||
385 | } | ||
253 | 386 | ||
254 | return response; | 387 | return response; |
255 | } | 388 | } |
389 | public void HttpRequestHandler(UUID requestID, Hashtable request) | ||
390 | { | ||
391 | lock (request) | ||
392 | { | ||
393 | string uri = request["uri"].ToString(); | ||
394 | |||
395 | try | ||
396 | { | ||
397 | Hashtable headers = (Hashtable)request["headers"]; | ||
398 | |||
399 | // string uri_full = "http://" + m_ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + uri;// "/lslhttp/" + urlcode.ToString() + "/"; | ||
400 | |||
401 | int pos1 = uri.IndexOf("/");// /lslhttp | ||
402 | int pos2 = uri.IndexOf("/", pos1 + 1);// /lslhttp/ | ||
403 | int pos3 = uri.IndexOf("/", pos2 + 1);// /lslhttp/<UUID>/ | ||
404 | string uri_tmp = uri.Substring(0, pos3 + 1); | ||
405 | //HTTP server code doesn't provide us with QueryStrings | ||
406 | string pathInfo; | ||
407 | string queryString; | ||
408 | queryString = ""; | ||
409 | |||
410 | pathInfo = uri.Substring(pos3); | ||
411 | |||
412 | UrlData url = m_UrlMap["http://" + m_ExternalHostNameForLSL + ":" + m_HttpServer.Port.ToString() + uri_tmp]; | ||
413 | |||
414 | //for llGetHttpHeader support we need to store original URI here | ||
415 | //to make x-path-info / x-query-string / x-script-url / x-remote-ip headers | ||
416 | //as per http://wiki.secondlife.com/wiki/LlGetHTTPHeader | ||
417 | |||
418 | RequestData requestData = new RequestData(); | ||
419 | requestData.requestID = requestID; | ||
420 | requestData.requestDone = false; | ||
421 | requestData.startTime = System.Environment.TickCount; | ||
422 | requestData.uri = uri; | ||
423 | if (requestData.headers == null) | ||
424 | requestData.headers = new Dictionary<string, string>(); | ||
425 | |||
426 | foreach (DictionaryEntry header in headers) | ||
427 | { | ||
428 | string key = (string)header.Key; | ||
429 | string value = (string)header.Value; | ||
430 | requestData.headers.Add(key, value); | ||
431 | } | ||
432 | foreach (DictionaryEntry de in request) | ||
433 | { | ||
434 | if (de.Key.ToString() == "querystringkeys") | ||
435 | { | ||
436 | System.String[] keys = (System.String[])de.Value; | ||
437 | foreach (String key in keys) | ||
438 | { | ||
439 | if (request.ContainsKey(key)) | ||
440 | { | ||
441 | string val = (String)request[key]; | ||
442 | queryString = queryString + key + "=" + val + "&"; | ||
443 | } | ||
444 | } | ||
445 | if (queryString.Length > 1) | ||
446 | queryString = queryString.Substring(0, queryString.Length - 1); | ||
447 | |||
448 | } | ||
449 | |||
450 | } | ||
451 | |||
452 | //if this machine is behind DNAT/port forwarding, currently this is being | ||
453 | //set to address of port forwarding router | ||
454 | requestData.headers["x-remote-ip"] = requestData.headers["remote_addr"]; | ||
455 | requestData.headers["x-path-info"] = pathInfo; | ||
456 | requestData.headers["x-query-string"] = queryString; | ||
457 | requestData.headers["x-script-url"] = url.url; | ||
458 | |||
459 | requestData.ev = new ManualResetEvent(false); | ||
460 | lock (url.requests) | ||
461 | { | ||
462 | url.requests.Add(requestID, requestData); | ||
463 | } | ||
464 | lock (m_RequestMap) | ||
465 | { | ||
466 | //add to request map | ||
467 | m_RequestMap.Add(requestID, url); | ||
468 | } | ||
469 | |||
470 | url.engine.PostScriptEvent(url.itemID, "http_request", new Object[] { requestID.ToString(), request["http-method"].ToString(), request["body"].ToString() }); | ||
471 | |||
472 | //send initial response? | ||
473 | // Hashtable response = new Hashtable(); | ||
474 | |||
475 | return; | ||
476 | |||
477 | } | ||
478 | catch (Exception we) | ||
479 | { | ||
480 | //Hashtable response = new Hashtable(); | ||
481 | m_log.Warn("[HttpRequestHandler]: http-in request failed"); | ||
482 | m_log.Warn(we.Message); | ||
483 | m_log.Warn(we.StackTrace); | ||
484 | } | ||
485 | } | ||
486 | } | ||
256 | 487 | ||
257 | private void OnScriptReset(uint localID, UUID itemID) | 488 | private void OnScriptReset(uint localID, UUID itemID) |
258 | { | 489 | { |
diff --git a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs index bea6222..d57a8e5 100644 --- a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs | |||
@@ -184,7 +184,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | |||
184 | string value = ""; | 184 | string value = ""; |
185 | 185 | ||
186 | if (nvp[0] != null) | 186 | if (nvp[0] != null) |
187 | { | 187 | { |
188 | name = nvp[0].Trim(); | 188 | name = nvp[0].Trim(); |
189 | } | 189 | } |
190 | 190 | ||
@@ -291,10 +291,10 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | |||
291 | temp = 128; | 291 | temp = 128; |
292 | 292 | ||
293 | width = temp; | 293 | width = temp; |
294 | height = temp; | 294 | height = temp; |
295 | } | 295 | } |
296 | } | 296 | } |
297 | break; | 297 | break; |
298 | } | 298 | } |
299 | } | 299 | } |
300 | 300 | ||
@@ -410,7 +410,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender | |||
410 | Font myFont = new Font(fontName, fontSize); | 410 | Font myFont = new Font(fontName, fontSize); |
411 | SolidBrush myBrush = new SolidBrush(Color.Black); | 411 | SolidBrush myBrush = new SolidBrush(Color.Black); |
412 | 412 | ||
413 | char[] lineDelimiter = {dataDelim}; | 413 | char[] lineDelimiter = {dataDelim}; |
414 | char[] partsDelimiter = {','}; | 414 | char[] partsDelimiter = {','}; |
415 | string[] lines = data.Split(lineDelimiter); | 415 | string[] lines = data.Split(lineDelimiter); |
416 | 416 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Grid/HypergridServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Grid/HypergridServiceInConnectorModule.cs new file mode 100644 index 0000000..92db15b --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Grid/HypergridServiceInConnectorModule.cs | |||
@@ -0,0 +1,134 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Reflection; | ||
30 | using System.Collections.Generic; | ||
31 | using log4net; | ||
32 | using Nini.Config; | ||
33 | using OpenSim.Framework; | ||
34 | using OpenSim.Framework.Servers.HttpServer; | ||
35 | using OpenSim.Region.Framework.Scenes; | ||
36 | using OpenSim.Region.Framework.Interfaces; | ||
37 | using OpenSim.Server.Base; | ||
38 | using OpenSim.Server.Handlers.Base; | ||
39 | using OpenSim.Server.Handlers.Grid; | ||
40 | using OpenSim.Services.Interfaces; | ||
41 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
42 | |||
43 | namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Grid | ||
44 | { | ||
45 | public class HypergridServiceInConnectorModule : ISharedRegionModule | ||
46 | { | ||
47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
48 | private static bool m_Enabled = false; | ||
49 | |||
50 | private IConfigSource m_Config; | ||
51 | bool m_Registered = false; | ||
52 | HypergridServiceInConnector m_HypergridHandler; | ||
53 | |||
54 | #region IRegionModule interface | ||
55 | |||
56 | public void Initialise(IConfigSource config) | ||
57 | { | ||
58 | //// This module is only on for standalones in hypergrid mode | ||
59 | //enabled = (!config.Configs["Startup"].GetBoolean("gridmode", true)) && | ||
60 | // config.Configs["Startup"].GetBoolean("hypergrid", true); | ||
61 | //m_log.DebugFormat("[RegionInventoryService]: enabled? {0}", enabled); | ||
62 | m_Config = config; | ||
63 | IConfig moduleConfig = config.Configs["Modules"]; | ||
64 | if (moduleConfig != null) | ||
65 | { | ||
66 | m_Enabled = moduleConfig.GetBoolean("HypergridServiceInConnector", false); | ||
67 | if (m_Enabled) | ||
68 | { | ||
69 | m_log.Info("[HGGRID IN CONNECTOR]: Hypergrid Service In Connector enabled"); | ||
70 | } | ||
71 | |||
72 | } | ||
73 | |||
74 | } | ||
75 | |||
76 | public void PostInitialise() | ||
77 | { | ||
78 | } | ||
79 | |||
80 | public void Close() | ||
81 | { | ||
82 | } | ||
83 | |||
84 | public Type ReplaceableInterface | ||
85 | { | ||
86 | get { return null; } | ||
87 | } | ||
88 | |||
89 | public string Name | ||
90 | { | ||
91 | get { return "HypergridService"; } | ||
92 | } | ||
93 | |||
94 | public void AddRegion(Scene scene) | ||
95 | { | ||
96 | if (!m_Enabled) | ||
97 | return; | ||
98 | |||
99 | } | ||
100 | |||
101 | public void RemoveRegion(Scene scene) | ||
102 | { | ||
103 | if (!m_Enabled) | ||
104 | return; | ||
105 | |||
106 | GridRegion rinfo = new GridRegion(scene.RegionInfo); | ||
107 | m_HypergridHandler.RemoveRegion(rinfo); | ||
108 | } | ||
109 | |||
110 | public void RegionLoaded(Scene scene) | ||
111 | { | ||
112 | if (!m_Enabled) | ||
113 | return; | ||
114 | |||
115 | if (!m_Registered) | ||
116 | { | ||
117 | m_Registered = true; | ||
118 | |||
119 | m_log.Info("[HypergridService]: Starting..."); | ||
120 | |||
121 | Object[] args = new Object[] { m_Config, MainServer.Instance }; | ||
122 | |||
123 | m_HypergridHandler = new HypergridServiceInConnector(m_Config, MainServer.Instance, scene.RequestModuleInterface<IHyperlinkService>()); | ||
124 | //ServerUtils.LoadPlugin<HypergridServiceInConnector>("OpenSim.Server.Handlers.dll:HypergridServiceInConnector", args); | ||
125 | } | ||
126 | |||
127 | GridRegion rinfo = new GridRegion(scene.RegionInfo); | ||
128 | m_HypergridHandler.AddRegion(rinfo); | ||
129 | } | ||
130 | |||
131 | #endregion | ||
132 | |||
133 | } | ||
134 | } | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs index a31ce8e..8a90370 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Neighbour/NeighbourServiceInConnectorModule.cs | |||
@@ -121,7 +121,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour | |||
121 | 121 | ||
122 | #region INeighbourService | 122 | #region INeighbourService |
123 | 123 | ||
124 | public bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) | 124 | public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) |
125 | { | 125 | { |
126 | m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", | 126 | m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", |
127 | thisRegion.RegionName, regionHandle, m_Scenes.Count); | 127 | thisRegion.RegionName, regionHandle, m_Scenes.Count); |
@@ -134,7 +134,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Neighbour | |||
134 | } | 134 | } |
135 | } | 135 | } |
136 | m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: region handle {0} not found", regionHandle); | 136 | m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: region handle {0} not found", regionHandle); |
137 | return false; | 137 | return null; |
138 | } | 138 | } |
139 | 139 | ||
140 | #endregion INeighbourService | 140 | #endregion INeighbourService |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs index e69613a..85a1ac3 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs | |||
@@ -134,7 +134,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
134 | 134 | ||
135 | public bool IsAuthorizedForRegion(string userID, string regionID, out string message) | 135 | public bool IsAuthorizedForRegion(string userID, string regionID, out string message) |
136 | { | 136 | { |
137 | return m_AuthorizationService.IsAuthorizedForRegion(userID, regionID, out message); | 137 | return m_AuthorizationService.IsAuthorizedForRegion(userID, regionID, out message); |
138 | } | 138 | } |
139 | 139 | ||
140 | } | 140 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs index a672f4f..fca2df2 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs | |||
@@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
146 | else | 146 | else |
147 | { | 147 | { |
148 | m_log.ErrorFormat("[REMOTE AUTHORIZATION CONNECTOR] IsAuthorizedForRegion, can't find scene to match region id of {0} ",regionID); | 148 | m_log.ErrorFormat("[REMOTE AUTHORIZATION CONNECTOR] IsAuthorizedForRegion, can't find scene to match region id of {0} ",regionID); |
149 | } | 149 | } |
150 | 150 | ||
151 | 151 | ||
152 | return isAuthorized; | 152 | return isAuthorized; |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs new file mode 100644 index 0000000..0974372 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGCommands.cs | |||
@@ -0,0 +1,303 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Reflection; | ||
31 | using System.Xml; | ||
32 | using log4net; | ||
33 | using Nini.Config; | ||
34 | using OpenSim.Framework; | ||
35 | //using OpenSim.Framework.Communications; | ||
36 | using OpenSim.Framework.Console; | ||
37 | using OpenSim.Region.Framework; | ||
38 | using OpenSim.Region.Framework.Scenes; | ||
39 | using OpenSim.Region.Framework.Scenes.Hypergrid; | ||
40 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
41 | |||
42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | ||
43 | { | ||
44 | public class HGCommands | ||
45 | { | ||
46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
47 | private HGGridConnector m_HGGridConnector; | ||
48 | private Scene m_scene; | ||
49 | |||
50 | private static uint m_autoMappingX = 0; | ||
51 | private static uint m_autoMappingY = 0; | ||
52 | private static bool m_enableAutoMapping = false; | ||
53 | |||
54 | public HGCommands(HGGridConnector hgConnector, Scene scene) | ||
55 | { | ||
56 | m_HGGridConnector = hgConnector; | ||
57 | m_scene = scene; | ||
58 | } | ||
59 | |||
60 | //public static Scene CreateScene(RegionInfo regionInfo, AgentCircuitManager circuitManager, CommunicationsManager m_commsManager, | ||
61 | // StorageManager storageManager, ModuleLoader m_moduleLoader, ConfigSettings m_configSettings, OpenSimConfigSource m_config, string m_version) | ||
62 | //{ | ||
63 | // HGSceneCommunicationService sceneGridService = new HGSceneCommunicationService(m_commsManager, HGServices); | ||
64 | |||
65 | // return | ||
66 | // new HGScene( | ||
67 | // regionInfo, circuitManager, m_commsManager, sceneGridService, storageManager, | ||
68 | // m_moduleLoader, false, m_configSettings.PhysicalPrim, | ||
69 | // m_configSettings.See_into_region_from_neighbor, m_config.Source, m_version); | ||
70 | //} | ||
71 | |||
72 | public void RunCommand(string module, string[] cmdparams) | ||
73 | { | ||
74 | List<string> args = new List<string>(cmdparams); | ||
75 | if (args.Count < 1) | ||
76 | return; | ||
77 | |||
78 | string command = args[0]; | ||
79 | args.RemoveAt(0); | ||
80 | |||
81 | cmdparams = args.ToArray(); | ||
82 | |||
83 | RunHGCommand(command, cmdparams); | ||
84 | |||
85 | } | ||
86 | |||
87 | private void RunHGCommand(string command, string[] cmdparams) | ||
88 | { | ||
89 | if (command.Equals("link-mapping")) | ||
90 | { | ||
91 | if (cmdparams.Length == 2) | ||
92 | { | ||
93 | try | ||
94 | { | ||
95 | m_autoMappingX = Convert.ToUInt32(cmdparams[0]); | ||
96 | m_autoMappingY = Convert.ToUInt32(cmdparams[1]); | ||
97 | m_enableAutoMapping = true; | ||
98 | } | ||
99 | catch (Exception) | ||
100 | { | ||
101 | m_autoMappingX = 0; | ||
102 | m_autoMappingY = 0; | ||
103 | m_enableAutoMapping = false; | ||
104 | } | ||
105 | } | ||
106 | } | ||
107 | else if (command.Equals("link-region")) | ||
108 | { | ||
109 | if (cmdparams.Length < 3) | ||
110 | { | ||
111 | if ((cmdparams.Length == 1) || (cmdparams.Length == 2)) | ||
112 | { | ||
113 | LoadXmlLinkFile(cmdparams); | ||
114 | } | ||
115 | else | ||
116 | { | ||
117 | LinkRegionCmdUsage(); | ||
118 | } | ||
119 | return; | ||
120 | } | ||
121 | |||
122 | if (cmdparams[2].Contains(":")) | ||
123 | { | ||
124 | // New format | ||
125 | int xloc, yloc; | ||
126 | string mapName; | ||
127 | try | ||
128 | { | ||
129 | xloc = Convert.ToInt32(cmdparams[0]); | ||
130 | yloc = Convert.ToInt32(cmdparams[1]); | ||
131 | mapName = cmdparams[2]; | ||
132 | if (cmdparams.Length > 3) | ||
133 | for (int i = 3; i < cmdparams.Length; i++) | ||
134 | mapName += " " + cmdparams[i]; | ||
135 | |||
136 | m_log.Info(">> MapName: " + mapName); | ||
137 | //internalPort = Convert.ToUInt32(cmdparams[4]); | ||
138 | //remotingPort = Convert.ToUInt32(cmdparams[5]); | ||
139 | } | ||
140 | catch (Exception e) | ||
141 | { | ||
142 | m_log.Warn("[HGrid] Wrong format for link-region command: " + e.Message); | ||
143 | LinkRegionCmdUsage(); | ||
144 | return; | ||
145 | } | ||
146 | |||
147 | // Convert cell coordinates given by the user to meters | ||
148 | xloc = xloc * (int)Constants.RegionSize; | ||
149 | yloc = yloc * (int)Constants.RegionSize; | ||
150 | m_HGGridConnector.TryLinkRegionToCoords(m_scene, null, mapName, xloc, yloc); | ||
151 | } | ||
152 | else | ||
153 | { | ||
154 | // old format | ||
155 | GridRegion regInfo; | ||
156 | int xloc, yloc; | ||
157 | uint externalPort; | ||
158 | string externalHostName; | ||
159 | try | ||
160 | { | ||
161 | xloc = Convert.ToInt32(cmdparams[0]); | ||
162 | yloc = Convert.ToInt32(cmdparams[1]); | ||
163 | externalPort = Convert.ToUInt32(cmdparams[3]); | ||
164 | externalHostName = cmdparams[2]; | ||
165 | //internalPort = Convert.ToUInt32(cmdparams[4]); | ||
166 | //remotingPort = Convert.ToUInt32(cmdparams[5]); | ||
167 | } | ||
168 | catch (Exception e) | ||
169 | { | ||
170 | m_log.Warn("[HGrid] Wrong format for link-region command: " + e.Message); | ||
171 | LinkRegionCmdUsage(); | ||
172 | return; | ||
173 | } | ||
174 | |||
175 | // Convert cell coordinates given by the user to meters | ||
176 | xloc = xloc * (int)Constants.RegionSize; | ||
177 | yloc = yloc * (int)Constants.RegionSize; | ||
178 | if (m_HGGridConnector.TryCreateLink(m_scene, null, xloc, yloc, "", externalPort, externalHostName, out regInfo)) | ||
179 | { | ||
180 | if (cmdparams.Length >= 5) | ||
181 | { | ||
182 | regInfo.RegionName = ""; | ||
183 | for (int i = 4; i < cmdparams.Length; i++) | ||
184 | regInfo.RegionName += cmdparams[i] + " "; | ||
185 | } | ||
186 | } | ||
187 | } | ||
188 | return; | ||
189 | } | ||
190 | else if (command.Equals("unlink-region")) | ||
191 | { | ||
192 | if (cmdparams.Length < 1) | ||
193 | { | ||
194 | UnlinkRegionCmdUsage(); | ||
195 | return; | ||
196 | } | ||
197 | if (m_HGGridConnector.TryUnlinkRegion(m_scene, cmdparams[0])) | ||
198 | m_log.InfoFormat("[HGrid]: Successfully unlinked {0}", cmdparams[0]); | ||
199 | else | ||
200 | m_log.InfoFormat("[HGrid]: Unable to unlink {0}, region not found", cmdparams[0]); | ||
201 | } | ||
202 | } | ||
203 | |||
204 | private void LoadXmlLinkFile(string[] cmdparams) | ||
205 | { | ||
206 | //use http://www.hgurl.com/hypergrid.xml for test | ||
207 | try | ||
208 | { | ||
209 | XmlReader r = XmlReader.Create(cmdparams[0]); | ||
210 | XmlConfigSource cs = new XmlConfigSource(r); | ||
211 | string[] excludeSections = null; | ||
212 | |||
213 | if (cmdparams.Length == 2) | ||
214 | { | ||
215 | if (cmdparams[1].ToLower().StartsWith("excludelist:")) | ||
216 | { | ||
217 | string excludeString = cmdparams[1].ToLower(); | ||
218 | excludeString = excludeString.Remove(0, 12); | ||
219 | char[] splitter = { ';' }; | ||
220 | |||
221 | excludeSections = excludeString.Split(splitter); | ||
222 | } | ||
223 | } | ||
224 | |||
225 | for (int i = 0; i < cs.Configs.Count; i++) | ||
226 | { | ||
227 | bool skip = false; | ||
228 | if ((excludeSections != null) && (excludeSections.Length > 0)) | ||
229 | { | ||
230 | for (int n = 0; n < excludeSections.Length; n++) | ||
231 | { | ||
232 | if (excludeSections[n] == cs.Configs[i].Name.ToLower()) | ||
233 | { | ||
234 | skip = true; | ||
235 | break; | ||
236 | } | ||
237 | } | ||
238 | } | ||
239 | if (!skip) | ||
240 | { | ||
241 | ReadLinkFromConfig(cs.Configs[i]); | ||
242 | } | ||
243 | } | ||
244 | } | ||
245 | catch (Exception e) | ||
246 | { | ||
247 | m_log.Error(e.ToString()); | ||
248 | } | ||
249 | } | ||
250 | |||
251 | |||
252 | private void ReadLinkFromConfig(IConfig config) | ||
253 | { | ||
254 | GridRegion regInfo; | ||
255 | int xloc, yloc; | ||
256 | uint externalPort; | ||
257 | string externalHostName; | ||
258 | uint realXLoc, realYLoc; | ||
259 | |||
260 | xloc = Convert.ToInt32(config.GetString("xloc", "0")); | ||
261 | yloc = Convert.ToInt32(config.GetString("yloc", "0")); | ||
262 | externalPort = Convert.ToUInt32(config.GetString("externalPort", "0")); | ||
263 | externalHostName = config.GetString("externalHostName", ""); | ||
264 | realXLoc = Convert.ToUInt32(config.GetString("real-xloc", "0")); | ||
265 | realYLoc = Convert.ToUInt32(config.GetString("real-yloc", "0")); | ||
266 | |||
267 | if (m_enableAutoMapping) | ||
268 | { | ||
269 | xloc = (int)((xloc % 100) + m_autoMappingX); | ||
270 | yloc = (int)((yloc % 100) + m_autoMappingY); | ||
271 | } | ||
272 | |||
273 | if (((realXLoc == 0) && (realYLoc == 0)) || | ||
274 | (((realXLoc - xloc < 3896) || (xloc - realXLoc < 3896)) && | ||
275 | ((realYLoc - yloc < 3896) || (yloc - realYLoc < 3896)))) | ||
276 | { | ||
277 | xloc = xloc * (int)Constants.RegionSize; | ||
278 | yloc = yloc * (int)Constants.RegionSize; | ||
279 | if ( | ||
280 | m_HGGridConnector.TryCreateLink(m_scene, null, xloc, yloc, "", externalPort, | ||
281 | externalHostName, out regInfo)) | ||
282 | { | ||
283 | regInfo.RegionName = config.GetString("localName", ""); | ||
284 | } | ||
285 | } | ||
286 | } | ||
287 | |||
288 | |||
289 | private void LinkRegionCmdUsage() | ||
290 | { | ||
291 | m_log.Info("Usage: link-region <Xloc> <Yloc> <HostName>:<HttpPort>[:<RemoteRegionName>]"); | ||
292 | m_log.Info("Usage: link-region <Xloc> <Yloc> <HostName> <HttpPort> [<LocalName>]"); | ||
293 | m_log.Info("Usage: link-region <URI_of_xml> [<exclude>]"); | ||
294 | } | ||
295 | |||
296 | private void UnlinkRegionCmdUsage() | ||
297 | { | ||
298 | m_log.Info("Usage: unlink-region <HostName>:<HttpPort>"); | ||
299 | m_log.Info("Usage: unlink-region <LocalName>"); | ||
300 | } | ||
301 | |||
302 | } | ||
303 | } | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGGridConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGGridConnector.cs new file mode 100644 index 0000000..148331b --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/HGGridConnector.cs | |||
@@ -0,0 +1,795 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Net; | ||
31 | using System.Reflection; | ||
32 | using System.Xml; | ||
33 | |||
34 | using OpenSim.Framework.Communications.Cache; | ||
35 | using OpenSim.Framework; | ||
36 | using OpenSim.Region.Framework.Interfaces; | ||
37 | using OpenSim.Region.Framework.Scenes; | ||
38 | using OpenSim.Region.Framework.Scenes.Hypergrid; | ||
39 | using OpenSim.Services.Interfaces; | ||
40 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
41 | using OpenSim.Server.Base; | ||
42 | using OpenSim.Services.Connectors.Grid; | ||
43 | using OpenSim.Framework.Console; | ||
44 | |||
45 | using OpenMetaverse; | ||
46 | using log4net; | ||
47 | using Nini.Config; | ||
48 | |||
49 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | ||
50 | { | ||
51 | public class HGGridConnector : ISharedRegionModule, IGridService, IHyperlinkService | ||
52 | { | ||
53 | private static readonly ILog m_log = | ||
54 | LogManager.GetLogger( | ||
55 | MethodBase.GetCurrentMethod().DeclaringType); | ||
56 | private static string LocalAssetServerURI, LocalInventoryServerURI, LocalUserServerURI; | ||
57 | |||
58 | private bool m_Enabled = false; | ||
59 | private bool m_Initialized = false; | ||
60 | |||
61 | private Scene m_aScene; | ||
62 | private Dictionary<ulong, Scene> m_LocalScenes = new Dictionary<ulong, Scene>(); | ||
63 | |||
64 | private IGridService m_GridServiceConnector; | ||
65 | private HypergridServiceConnector m_HypergridServiceConnector; | ||
66 | |||
67 | // Hyperlink regions are hyperlinks on the map | ||
68 | protected Dictionary<UUID, GridRegion> m_HyperlinkRegions = new Dictionary<UUID, GridRegion>(); | ||
69 | |||
70 | // Known regions are home regions of visiting foreign users. | ||
71 | // They are not on the map as static hyperlinks. They are dynamic hyperlinks, they go away when | ||
72 | // the visitor goes away. They are mapped to X=0 on the map. | ||
73 | // This is key-ed on agent ID | ||
74 | protected Dictionary<UUID, GridRegion> m_knownRegions = new Dictionary<UUID, GridRegion>(); | ||
75 | |||
76 | protected Dictionary<UUID, ulong> m_HyperlinkHandles = new Dictionary<UUID, ulong>(); | ||
77 | |||
78 | #region ISharedRegionModule | ||
79 | |||
80 | public Type ReplaceableInterface | ||
81 | { | ||
82 | get { return null; } | ||
83 | } | ||
84 | |||
85 | public string Name | ||
86 | { | ||
87 | get { return "HGGridServicesConnector"; } | ||
88 | } | ||
89 | |||
90 | public void Initialise(IConfigSource source) | ||
91 | { | ||
92 | IConfig moduleConfig = source.Configs["Modules"]; | ||
93 | if (moduleConfig != null) | ||
94 | { | ||
95 | string name = moduleConfig.GetString("GridServices", ""); | ||
96 | if (name == Name) | ||
97 | { | ||
98 | IConfig gridConfig = source.Configs["GridService"]; | ||
99 | if (gridConfig == null) | ||
100 | { | ||
101 | m_log.Error("[HGGRID CONNECTOR]: GridService missing from OpenSim.ini"); | ||
102 | return; | ||
103 | } | ||
104 | |||
105 | |||
106 | InitialiseConnectorModule(source); | ||
107 | |||
108 | m_Enabled = true; | ||
109 | m_log.Info("[HGGRID CONNECTOR]: HG grid enabled"); | ||
110 | } | ||
111 | } | ||
112 | } | ||
113 | |||
114 | private void InitialiseConnectorModule(IConfigSource source) | ||
115 | { | ||
116 | IConfig gridConfig = source.Configs["GridService"]; | ||
117 | if (gridConfig == null) | ||
118 | { | ||
119 | m_log.Error("[HGGRID CONNECTOR]: GridService missing from OpenSim.ini"); | ||
120 | throw new Exception("Grid connector init error"); | ||
121 | } | ||
122 | |||
123 | string module = gridConfig.GetString("GridServiceConnectorModule", String.Empty); | ||
124 | if (module == String.Empty) | ||
125 | { | ||
126 | m_log.Error("[HGGRID CONNECTOR]: No GridServiceConnectorModule named in section GridService"); | ||
127 | //return; | ||
128 | throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); | ||
129 | } | ||
130 | |||
131 | Object[] args = new Object[] { source }; | ||
132 | m_GridServiceConnector = ServerUtils.LoadPlugin<IGridService>(module, args); | ||
133 | |||
134 | } | ||
135 | |||
136 | public void PostInitialise() | ||
137 | { | ||
138 | if (m_Enabled) | ||
139 | ((ISharedRegionModule)m_GridServiceConnector).PostInitialise(); | ||
140 | } | ||
141 | |||
142 | public void Close() | ||
143 | { | ||
144 | } | ||
145 | |||
146 | public void AddRegion(Scene scene) | ||
147 | { | ||
148 | if (!m_Enabled) | ||
149 | return; | ||
150 | |||
151 | m_LocalScenes[scene.RegionInfo.RegionHandle] = scene; | ||
152 | scene.RegisterModuleInterface<IGridService>(this); | ||
153 | scene.RegisterModuleInterface<IHyperlinkService>(this); | ||
154 | |||
155 | ((ISharedRegionModule)m_GridServiceConnector).AddRegion(scene); | ||
156 | |||
157 | } | ||
158 | |||
159 | public void RemoveRegion(Scene scene) | ||
160 | { | ||
161 | if (m_Enabled) | ||
162 | { | ||
163 | m_LocalScenes.Remove(scene.RegionInfo.RegionHandle); | ||
164 | ((ISharedRegionModule)m_GridServiceConnector).RemoveRegion(scene); | ||
165 | } | ||
166 | } | ||
167 | |||
168 | public void RegionLoaded(Scene scene) | ||
169 | { | ||
170 | if (!m_Enabled) | ||
171 | return; | ||
172 | |||
173 | if (!m_Initialized) | ||
174 | { | ||
175 | m_aScene = scene; | ||
176 | LocalAssetServerURI = m_aScene.CommsManager.NetworkServersInfo.UserURL; | ||
177 | LocalInventoryServerURI = m_aScene.CommsManager.NetworkServersInfo.InventoryURL; | ||
178 | LocalUserServerURI = m_aScene.CommsManager.NetworkServersInfo.UserURL; | ||
179 | |||
180 | m_HypergridServiceConnector = new HypergridServiceConnector(scene.AssetService); | ||
181 | |||
182 | HGCommands hgCommands = new HGCommands(this, scene); | ||
183 | MainConsole.Instance.Commands.AddCommand("HGGridServicesConnector", false, "link-region", | ||
184 | "link-region <Xloc> <Yloc> <HostName>:<HttpPort>[:<RemoteRegionName>] <cr>", | ||
185 | "Link a hypergrid region", hgCommands.RunCommand); | ||
186 | MainConsole.Instance.Commands.AddCommand("HGGridServicesConnector", false, "unlink-region", | ||
187 | "unlink-region <local name> or <HostName>:<HttpPort> <cr>", | ||
188 | "Unlink a hypergrid region", hgCommands.RunCommand); | ||
189 | MainConsole.Instance.Commands.AddCommand("HGGridServicesConnector", false, "link-mapping", "link-mapping [<x> <y>] <cr>", | ||
190 | "Set local coordinate to map HG regions to", hgCommands.RunCommand); | ||
191 | |||
192 | // Yikes!! Remove this as soon as user services get refactored | ||
193 | HGNetworkServersInfo.Init(LocalAssetServerURI, LocalInventoryServerURI, LocalUserServerURI); | ||
194 | |||
195 | m_Initialized = true; | ||
196 | } | ||
197 | } | ||
198 | |||
199 | #endregion | ||
200 | |||
201 | #region IGridService | ||
202 | |||
203 | public bool RegisterRegion(UUID scopeID, GridRegion regionInfo) | ||
204 | { | ||
205 | // Region doesn't exist here. Trying to link remote region | ||
206 | if (regionInfo.RegionID.Equals(UUID.Zero)) | ||
207 | { | ||
208 | m_log.Info("[HGrid]: Linking remote region " + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort); | ||
209 | ulong regionHandle = 0; | ||
210 | regionInfo.RegionID = m_HypergridServiceConnector.LinkRegion(regionInfo, out regionHandle); | ||
211 | if (!regionInfo.RegionID.Equals(UUID.Zero)) | ||
212 | { | ||
213 | AddHyperlinkRegion(regionInfo, regionHandle); | ||
214 | m_log.Info("[HGrid]: Successfully linked to region_uuid " + regionInfo.RegionID); | ||
215 | |||
216 | // Try get the map image | ||
217 | m_HypergridServiceConnector.GetMapImage(regionInfo); | ||
218 | return true; | ||
219 | } | ||
220 | else | ||
221 | { | ||
222 | m_log.Info("[HGrid]: No such region " + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort + "(" + regionInfo.InternalEndPoint.Port + ")"); | ||
223 | return false; | ||
224 | } | ||
225 | // Note that these remote regions aren't registered in localBackend, so return null, no local listeners | ||
226 | } | ||
227 | else // normal grid | ||
228 | return m_GridServiceConnector.RegisterRegion(scopeID, regionInfo); | ||
229 | } | ||
230 | |||
231 | public bool DeregisterRegion(UUID regionID) | ||
232 | { | ||
233 | // Try the hyperlink collection | ||
234 | if (m_HyperlinkRegions.ContainsKey(regionID)) | ||
235 | { | ||
236 | RemoveHyperlinkRegion(regionID); | ||
237 | return true; | ||
238 | } | ||
239 | // Try the foreign users home collection | ||
240 | |||
241 | foreach (GridRegion r in m_knownRegions.Values) | ||
242 | if (r.RegionID == regionID) | ||
243 | { | ||
244 | RemoveHyperlinkHomeRegion(regionID); | ||
245 | return true; | ||
246 | } | ||
247 | |||
248 | // Finally, try the normal route | ||
249 | return m_GridServiceConnector.DeregisterRegion(regionID); | ||
250 | } | ||
251 | |||
252 | public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) | ||
253 | { | ||
254 | // No serving neighbours on hyperliked regions. | ||
255 | // Just the regular regions. | ||
256 | return m_GridServiceConnector.GetNeighbours(scopeID, regionID); | ||
257 | } | ||
258 | |||
259 | public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) | ||
260 | { | ||
261 | // Try the hyperlink collection | ||
262 | if (m_HyperlinkRegions.ContainsKey(regionID)) | ||
263 | return m_HyperlinkRegions[regionID]; | ||
264 | |||
265 | // Try the foreign users home collection | ||
266 | foreach (GridRegion r in m_knownRegions.Values) | ||
267 | if (r.RegionID == regionID) | ||
268 | return r; | ||
269 | |||
270 | // Finally, try the normal route | ||
271 | return m_GridServiceConnector.GetRegionByUUID(scopeID, regionID); | ||
272 | } | ||
273 | |||
274 | public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) | ||
275 | { | ||
276 | int snapX = (int) (x / Constants.RegionSize) * (int)Constants.RegionSize; | ||
277 | int snapY = (int) (y / Constants.RegionSize) * (int)Constants.RegionSize; | ||
278 | // Try the hyperlink collection | ||
279 | foreach (GridRegion r in m_HyperlinkRegions.Values) | ||
280 | { | ||
281 | if ((r.RegionLocX == snapX) && (r.RegionLocY == snapY)) | ||
282 | return r; | ||
283 | } | ||
284 | |||
285 | // Try the foreign users home collection | ||
286 | foreach (GridRegion r in m_knownRegions.Values) | ||
287 | { | ||
288 | if ((r.RegionLocX == snapX) && (r.RegionLocY == snapY)) | ||
289 | { | ||
290 | return r; | ||
291 | } | ||
292 | } | ||
293 | |||
294 | // Finally, try the normal route | ||
295 | return m_GridServiceConnector.GetRegionByPosition(scopeID, x, y); | ||
296 | } | ||
297 | |||
298 | public GridRegion GetRegionByName(UUID scopeID, string regionName) | ||
299 | { | ||
300 | // Try normal grid first | ||
301 | GridRegion region = m_GridServiceConnector.GetRegionByName(scopeID, regionName); | ||
302 | if (region != null) | ||
303 | return region; | ||
304 | |||
305 | // Try the hyperlink collection | ||
306 | foreach (GridRegion r in m_HyperlinkRegions.Values) | ||
307 | { | ||
308 | if (r.RegionName == regionName) | ||
309 | return r; | ||
310 | } | ||
311 | |||
312 | // Try the foreign users home collection | ||
313 | foreach (GridRegion r in m_knownRegions.Values) | ||
314 | { | ||
315 | if (r.RegionName == regionName) | ||
316 | return r; | ||
317 | } | ||
318 | return null; | ||
319 | } | ||
320 | |||
321 | public List<GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber) | ||
322 | { | ||
323 | List<GridRegion> rinfos = new List<GridRegion>(); | ||
324 | |||
325 | // Commenting until regionname exists | ||
326 | //foreach (SimpleRegionInfo r in m_HyperlinkRegions.Values) | ||
327 | // if ((r.RegionName != null) && r.RegionName.StartsWith(name)) | ||
328 | // rinfos.Add(r); | ||
329 | |||
330 | rinfos.AddRange(m_GridServiceConnector.GetRegionsByName(scopeID, name, maxNumber)); | ||
331 | return rinfos; | ||
332 | } | ||
333 | |||
334 | public List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax) | ||
335 | { | ||
336 | int snapXmin = (int)(xmin / Constants.RegionSize) * (int)Constants.RegionSize; | ||
337 | int snapXmax = (int)(xmax / Constants.RegionSize) * (int)Constants.RegionSize; | ||
338 | int snapYmin = (int)(ymin / Constants.RegionSize) * (int)Constants.RegionSize; | ||
339 | int snapYmax = (int)(ymax / Constants.RegionSize) * (int)Constants.RegionSize; | ||
340 | |||
341 | List<GridRegion> rinfos = new List<GridRegion>(); | ||
342 | foreach (GridRegion r in m_HyperlinkRegions.Values) | ||
343 | if ((r.RegionLocX > snapXmin) && (r.RegionLocX < snapYmax) && | ||
344 | (r.RegionLocY > snapYmin) && (r.RegionLocY < snapYmax)) | ||
345 | rinfos.Add(r); | ||
346 | |||
347 | rinfos.AddRange(m_GridServiceConnector.GetRegionRange(scopeID, xmin, xmax, ymin, ymax)); | ||
348 | |||
349 | return rinfos; | ||
350 | } | ||
351 | |||
352 | #endregion | ||
353 | |||
354 | #region Auxiliary | ||
355 | |||
356 | private void AddHyperlinkRegion(GridRegion regionInfo, ulong regionHandle) | ||
357 | { | ||
358 | m_HyperlinkRegions[regionInfo.RegionID] = regionInfo; | ||
359 | m_HyperlinkHandles[regionInfo.RegionID] = regionHandle; | ||
360 | } | ||
361 | |||
362 | private void RemoveHyperlinkRegion(UUID regionID) | ||
363 | { | ||
364 | m_HyperlinkRegions.Remove(regionID); | ||
365 | m_HyperlinkHandles.Remove(regionID); | ||
366 | } | ||
367 | |||
368 | private void AddHyperlinkHomeRegion(UUID userID, GridRegion regionInfo, ulong regionHandle) | ||
369 | { | ||
370 | m_knownRegions[userID] = regionInfo; | ||
371 | m_HyperlinkHandles[regionInfo.RegionID] = regionHandle; | ||
372 | } | ||
373 | |||
374 | private void RemoveHyperlinkHomeRegion(UUID regionID) | ||
375 | { | ||
376 | foreach (KeyValuePair<UUID, GridRegion> kvp in m_knownRegions) | ||
377 | { | ||
378 | if (kvp.Value.RegionID == regionID) | ||
379 | { | ||
380 | m_knownRegions.Remove(kvp.Key); | ||
381 | } | ||
382 | } | ||
383 | m_HyperlinkHandles.Remove(regionID); | ||
384 | } | ||
385 | #endregion | ||
386 | |||
387 | #region IHyperlinkService | ||
388 | |||
389 | private static Random random = new Random(); | ||
390 | |||
391 | |||
392 | public GridRegion TryLinkRegionToCoords(Scene m_scene, IClientAPI client, string mapName, int xloc, int yloc) | ||
393 | { | ||
394 | string host = "127.0.0.1"; | ||
395 | string portstr; | ||
396 | string regionName = ""; | ||
397 | uint port = 9000; | ||
398 | string[] parts = mapName.Split(new char[] { ':' }); | ||
399 | if (parts.Length >= 1) | ||
400 | { | ||
401 | host = parts[0]; | ||
402 | } | ||
403 | if (parts.Length >= 2) | ||
404 | { | ||
405 | portstr = parts[1]; | ||
406 | if (!UInt32.TryParse(portstr, out port)) | ||
407 | regionName = parts[1]; | ||
408 | } | ||
409 | // always take the last one | ||
410 | if (parts.Length >= 3) | ||
411 | { | ||
412 | regionName = parts[2]; | ||
413 | } | ||
414 | |||
415 | // Sanity check. Don't ever link to this sim. | ||
416 | IPAddress ipaddr = null; | ||
417 | try | ||
418 | { | ||
419 | ipaddr = Util.GetHostFromDNS(host); | ||
420 | } | ||
421 | catch { } | ||
422 | |||
423 | if ((ipaddr != null) && | ||
424 | !((m_scene.RegionInfo.ExternalEndPoint.Address.Equals(ipaddr)) && (m_scene.RegionInfo.HttpPort == port))) | ||
425 | { | ||
426 | GridRegion regInfo; | ||
427 | bool success = TryCreateLink(m_scene, client, xloc, yloc, regionName, port, host, out regInfo); | ||
428 | if (success) | ||
429 | { | ||
430 | regInfo.RegionName = mapName; | ||
431 | return regInfo; | ||
432 | } | ||
433 | } | ||
434 | |||
435 | return null; | ||
436 | } | ||
437 | |||
438 | |||
439 | // From the map search and secondlife://blah | ||
440 | public GridRegion TryLinkRegion(Scene m_scene, IClientAPI client, string mapName) | ||
441 | { | ||
442 | int xloc = random.Next(0, Int16.MaxValue) * (int) Constants.RegionSize; | ||
443 | return TryLinkRegionToCoords(m_scene, client, mapName, xloc, 0); | ||
444 | } | ||
445 | |||
446 | public bool TryCreateLink(Scene m_scene, IClientAPI client, int xloc, int yloc, | ||
447 | string externalRegionName, uint externalPort, string externalHostName, out GridRegion regInfo) | ||
448 | { | ||
449 | m_log.DebugFormat("[HGrid]: Link to {0}:{1}, in {2}-{3}", externalHostName, externalPort, xloc, yloc); | ||
450 | |||
451 | regInfo = new GridRegion(); | ||
452 | regInfo.RegionName = externalRegionName; | ||
453 | regInfo.HttpPort = externalPort; | ||
454 | regInfo.ExternalHostName = externalHostName; | ||
455 | regInfo.RegionLocX = xloc; | ||
456 | regInfo.RegionLocY = yloc; | ||
457 | |||
458 | try | ||
459 | { | ||
460 | regInfo.InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int)0); | ||
461 | } | ||
462 | catch (Exception e) | ||
463 | { | ||
464 | m_log.Warn("[HGrid]: Wrong format for link-region: " + e.Message); | ||
465 | return false; | ||
466 | } | ||
467 | |||
468 | // Finally, link it | ||
469 | if (!RegisterRegion(UUID.Zero, regInfo)) | ||
470 | { | ||
471 | m_log.Warn("[HGrid]: Unable to link region"); | ||
472 | return false; | ||
473 | } | ||
474 | |||
475 | int x, y; | ||
476 | if (!Check4096(m_scene, regInfo, out x, out y)) | ||
477 | { | ||
478 | DeregisterRegion(regInfo.RegionID); | ||
479 | if (client != null) | ||
480 | client.SendAlertMessage("Region is too far (" + x + ", " + y + ")"); | ||
481 | m_log.Info("[HGrid]: Unable to link, region is too far (" + x + ", " + y + ")"); | ||
482 | return false; | ||
483 | } | ||
484 | |||
485 | if (!CheckCoords(m_scene.RegionInfo.RegionLocX, m_scene.RegionInfo.RegionLocY, x, y)) | ||
486 | { | ||
487 | DeregisterRegion(regInfo.RegionID); | ||
488 | if (client != null) | ||
489 | client.SendAlertMessage("Region has incompatible coordinates (" + x + ", " + y + ")"); | ||
490 | m_log.Info("[HGrid]: Unable to link, region has incompatible coordinates (" + x + ", " + y + ")"); | ||
491 | return false; | ||
492 | } | ||
493 | |||
494 | m_log.Debug("[HGrid]: link region succeeded"); | ||
495 | return true; | ||
496 | } | ||
497 | |||
498 | public bool TryUnlinkRegion(Scene m_scene, string mapName) | ||
499 | { | ||
500 | GridRegion regInfo = null; | ||
501 | if (mapName.Contains(":")) | ||
502 | { | ||
503 | string host = "127.0.0.1"; | ||
504 | //string portstr; | ||
505 | //string regionName = ""; | ||
506 | uint port = 9000; | ||
507 | string[] parts = mapName.Split(new char[] { ':' }); | ||
508 | if (parts.Length >= 1) | ||
509 | { | ||
510 | host = parts[0]; | ||
511 | } | ||
512 | // if (parts.Length >= 2) | ||
513 | // { | ||
514 | // portstr = parts[1]; | ||
515 | // if (!UInt32.TryParse(portstr, out port)) | ||
516 | // regionName = parts[1]; | ||
517 | // } | ||
518 | // always take the last one | ||
519 | // if (parts.Length >= 3) | ||
520 | // { | ||
521 | // regionName = parts[2]; | ||
522 | // } | ||
523 | foreach (GridRegion r in m_HyperlinkRegions.Values) | ||
524 | if (host.Equals(r.ExternalHostName) && (port == r.HttpPort)) | ||
525 | regInfo = r; | ||
526 | } | ||
527 | else | ||
528 | { | ||
529 | foreach (GridRegion r in m_HyperlinkRegions.Values) | ||
530 | if (r.RegionName.Equals(mapName)) | ||
531 | regInfo = r; | ||
532 | } | ||
533 | if (regInfo != null) | ||
534 | { | ||
535 | return DeregisterRegion(regInfo.RegionID); | ||
536 | } | ||
537 | else | ||
538 | { | ||
539 | m_log.InfoFormat("[HGrid]: Region {0} not found", mapName); | ||
540 | return false; | ||
541 | } | ||
542 | } | ||
543 | |||
544 | /// <summary> | ||
545 | /// Cope with this viewer limitation. | ||
546 | /// </summary> | ||
547 | /// <param name="regInfo"></param> | ||
548 | /// <returns></returns> | ||
549 | public bool Check4096(Scene m_scene, GridRegion regInfo, out int x, out int y) | ||
550 | { | ||
551 | ulong realHandle = m_HyperlinkHandles[regInfo.RegionID]; | ||
552 | uint ux = 0, uy = 0; | ||
553 | Utils.LongToUInts(realHandle, out ux, out uy); | ||
554 | x = (int)(ux / Constants.RegionSize); | ||
555 | y = (int)(uy / Constants.RegionSize); | ||
556 | |||
557 | if ((Math.Abs((int)m_scene.RegionInfo.RegionLocX - x) >= 4096) || | ||
558 | (Math.Abs((int)m_scene.RegionInfo.RegionLocY - y) >= 4096)) | ||
559 | { | ||
560 | return false; | ||
561 | } | ||
562 | return true; | ||
563 | } | ||
564 | |||
565 | public bool CheckCoords(uint thisx, uint thisy, int x, int y) | ||
566 | { | ||
567 | if ((thisx == x) && (thisy == y)) | ||
568 | return false; | ||
569 | return true; | ||
570 | } | ||
571 | |||
572 | public GridRegion TryLinkRegion(IClientAPI client, string regionDescriptor) | ||
573 | { | ||
574 | return TryLinkRegion((Scene)client.Scene, client, regionDescriptor); | ||
575 | } | ||
576 | |||
577 | public GridRegion GetHyperlinkRegion(ulong handle) | ||
578 | { | ||
579 | foreach (GridRegion r in m_HyperlinkRegions.Values) | ||
580 | if (r.RegionHandle == handle) | ||
581 | return r; | ||
582 | foreach (GridRegion r in m_knownRegions.Values) | ||
583 | if (r.RegionHandle == handle) | ||
584 | return r; | ||
585 | return null; | ||
586 | } | ||
587 | |||
588 | public ulong FindRegionHandle(ulong handle) | ||
589 | { | ||
590 | foreach (GridRegion r in m_HyperlinkRegions.Values) | ||
591 | if ((r.RegionHandle == handle) && (m_HyperlinkHandles.ContainsKey(r.RegionID))) | ||
592 | return m_HyperlinkHandles[r.RegionID]; | ||
593 | |||
594 | foreach (GridRegion r in m_knownRegions.Values) | ||
595 | if ((r.RegionHandle == handle) && (m_HyperlinkHandles.ContainsKey(r.RegionID))) | ||
596 | return m_HyperlinkHandles[r.RegionID]; | ||
597 | |||
598 | return handle; | ||
599 | } | ||
600 | |||
601 | public bool SendUserInformation(GridRegion regInfo, AgentCircuitData agentData) | ||
602 | { | ||
603 | CachedUserInfo uinfo = m_aScene.CommsManager.UserProfileCacheService.GetUserDetails(agentData.AgentID); | ||
604 | |||
605 | if ((IsLocalUser(uinfo) && (GetHyperlinkRegion(regInfo.RegionHandle) != null)) || | ||
606 | (!IsLocalUser(uinfo) && !IsGoingHome(uinfo, regInfo))) | ||
607 | { | ||
608 | m_log.Info("[HGrid]: Local user is going to foreign region or foreign user is going elsewhere"); | ||
609 | |||
610 | // Set the position of the region on the remote grid | ||
611 | ulong realHandle = FindRegionHandle(regInfo.RegionHandle); | ||
612 | uint x = 0, y = 0; | ||
613 | Utils.LongToUInts(regInfo.RegionHandle, out x, out y); | ||
614 | GridRegion clonedRegion = new GridRegion(regInfo); | ||
615 | clonedRegion.RegionLocX = (int)x; | ||
616 | clonedRegion.RegionLocY = (int)y; | ||
617 | |||
618 | // Get the user's home region information | ||
619 | GridRegion home = m_aScene.GridService.GetRegionByUUID(m_aScene.RegionInfo.ScopeID, uinfo.UserProfile.HomeRegionID); | ||
620 | |||
621 | // Get the user's service URLs | ||
622 | string serverURI = ""; | ||
623 | if (uinfo.UserProfile is ForeignUserProfileData) | ||
624 | serverURI = Util.ServerURI(((ForeignUserProfileData)uinfo.UserProfile).UserServerURI); | ||
625 | string userServer = (serverURI == "") || (serverURI == null) ? LocalUserServerURI : serverURI; | ||
626 | |||
627 | string assetServer = Util.ServerURI(uinfo.UserProfile.UserAssetURI); | ||
628 | if ((assetServer == null) || (assetServer == "")) | ||
629 | assetServer = LocalAssetServerURI; | ||
630 | |||
631 | string inventoryServer = Util.ServerURI(uinfo.UserProfile.UserInventoryURI); | ||
632 | if ((inventoryServer == null) || (inventoryServer == "")) | ||
633 | inventoryServer = LocalInventoryServerURI; | ||
634 | |||
635 | if (!m_HypergridServiceConnector.InformRegionOfUser(clonedRegion, agentData, home, userServer, assetServer, inventoryServer)) | ||
636 | { | ||
637 | m_log.Warn("[HGrid]: Could not inform remote region of transferring user."); | ||
638 | return false; | ||
639 | } | ||
640 | } | ||
641 | //if ((uinfo == null) || !IsGoingHome(uinfo, regInfo)) | ||
642 | //{ | ||
643 | // m_log.Info("[HGrid]: User seems to be going to foreign region."); | ||
644 | // if (!InformRegionOfUser(regInfo, agentData)) | ||
645 | // { | ||
646 | // m_log.Warn("[HGrid]: Could not inform remote region of transferring user."); | ||
647 | // return false; | ||
648 | // } | ||
649 | //} | ||
650 | //else | ||
651 | // m_log.Info("[HGrid]: User seems to be going home " + uinfo.UserProfile.FirstName + " " + uinfo.UserProfile.SurName); | ||
652 | |||
653 | // May need to change agent's name | ||
654 | if (IsLocalUser(uinfo) && (GetHyperlinkRegion(regInfo.RegionHandle) != null)) | ||
655 | { | ||
656 | agentData.firstname = agentData.firstname + "." + agentData.lastname; | ||
657 | agentData.lastname = "@" + LocalUserServerURI.Replace("http://", ""); ; //HGNetworkServersInfo.Singleton.LocalUserServerURI; | ||
658 | } | ||
659 | |||
660 | return true; | ||
661 | } | ||
662 | |||
663 | public void AdjustUserInformation(AgentCircuitData agentData) | ||
664 | { | ||
665 | CachedUserInfo uinfo = m_aScene.CommsManager.UserProfileCacheService.GetUserDetails(agentData.AgentID); | ||
666 | if ((uinfo != null) && (uinfo.UserProfile != null) && | ||
667 | (IsLocalUser(uinfo) || !(uinfo.UserProfile is ForeignUserProfileData))) | ||
668 | { | ||
669 | //m_log.Debug("---------------> Local User!"); | ||
670 | string[] parts = agentData.firstname.Split(new char[] { '.' }); | ||
671 | if (parts.Length == 2) | ||
672 | { | ||
673 | agentData.firstname = parts[0]; | ||
674 | agentData.lastname = parts[1]; | ||
675 | } | ||
676 | } | ||
677 | //else | ||
678 | // m_log.Debug("---------------> Foreign User!"); | ||
679 | } | ||
680 | |||
681 | // Check if a local user exists with the same UUID as the incoming foreign user | ||
682 | public bool CheckUserAtEntry(UUID userID, UUID sessionID, out bool comingHome) | ||
683 | { | ||
684 | comingHome = false; | ||
685 | if (!m_aScene.SceneGridService.RegionLoginsEnabled) | ||
686 | return false; | ||
687 | |||
688 | CachedUserInfo uinfo = m_aScene.CommsManager.UserProfileCacheService.GetUserDetails(userID); | ||
689 | if (uinfo != null) | ||
690 | { | ||
691 | // uh-oh we have a potential intruder | ||
692 | if (uinfo.SessionID != sessionID) | ||
693 | // can't have a foreigner with a local UUID | ||
694 | return false; | ||
695 | else | ||
696 | // oh, so it's you! welcome back | ||
697 | comingHome = true; | ||
698 | } | ||
699 | |||
700 | // OK, user can come in | ||
701 | return true; | ||
702 | } | ||
703 | |||
704 | public void AcceptUser(ForeignUserProfileData user, GridRegion home) | ||
705 | { | ||
706 | m_aScene.CommsManager.UserProfileCacheService.PreloadUserCache(user); | ||
707 | ulong realHandle = home.RegionHandle; | ||
708 | // Change the local coordinates | ||
709 | // X=0 on the map | ||
710 | home.RegionLocX = 0; | ||
711 | home.RegionLocY = random.Next(0, 10000) * (int)Constants.RegionSize; | ||
712 | |||
713 | AddHyperlinkHomeRegion(user.ID, home, realHandle); | ||
714 | |||
715 | DumpUserData(user); | ||
716 | DumpRegionData(home); | ||
717 | |||
718 | } | ||
719 | |||
720 | public bool IsLocalUser(UUID userID) | ||
721 | { | ||
722 | CachedUserInfo uinfo = m_aScene.CommsManager.UserProfileCacheService.GetUserDetails(userID); | ||
723 | return IsLocalUser(uinfo); | ||
724 | } | ||
725 | |||
726 | #endregion | ||
727 | |||
728 | #region IHyperlink Misc | ||
729 | |||
730 | protected bool IsComingHome(ForeignUserProfileData userData) | ||
731 | { | ||
732 | return (userData.UserServerURI == LocalUserServerURI); | ||
733 | } | ||
734 | |||
735 | // Is the user going back to the home region or the home grid? | ||
736 | protected bool IsGoingHome(CachedUserInfo uinfo, GridRegion rinfo) | ||
737 | { | ||
738 | if (uinfo.UserProfile == null) | ||
739 | return false; | ||
740 | |||
741 | if (!(uinfo.UserProfile is ForeignUserProfileData)) | ||
742 | // it's a home user, can't be outside to return home | ||
743 | return false; | ||
744 | |||
745 | // OK, it's a foreign user with a ForeignUserProfileData | ||
746 | // and is going back to exactly the home region. | ||
747 | // We can't check if it's going back to a non-home region | ||
748 | // of the home grid. That will be dealt with in the | ||
749 | // receiving end | ||
750 | return (uinfo.UserProfile.HomeRegionID == rinfo.RegionID); | ||
751 | } | ||
752 | |||
753 | protected bool IsLocalUser(CachedUserInfo uinfo) | ||
754 | { | ||
755 | if (uinfo == null) | ||
756 | return false; | ||
757 | |||
758 | return !(uinfo.UserProfile is ForeignUserProfileData); | ||
759 | |||
760 | } | ||
761 | |||
762 | protected bool IsLocalRegion(ulong handle) | ||
763 | { | ||
764 | return m_LocalScenes.ContainsKey(handle); | ||
765 | } | ||
766 | |||
767 | private void DumpUserData(ForeignUserProfileData userData) | ||
768 | { | ||
769 | m_log.Info(" ------------ User Data Dump ----------"); | ||
770 | m_log.Info(" >> Name: " + userData.FirstName + " " + userData.SurName); | ||
771 | m_log.Info(" >> HomeID: " + userData.HomeRegionID); | ||
772 | m_log.Info(" >> UserServer: " + userData.UserServerURI); | ||
773 | m_log.Info(" >> InvServer: " + userData.UserInventoryURI); | ||
774 | m_log.Info(" >> AssetServer: " + userData.UserAssetURI); | ||
775 | m_log.Info(" ------------ -------------- ----------"); | ||
776 | } | ||
777 | |||
778 | private void DumpRegionData(GridRegion rinfo) | ||
779 | { | ||
780 | m_log.Info(" ------------ Region Data Dump ----------"); | ||
781 | m_log.Info(" >> handle: " + rinfo.RegionHandle); | ||
782 | m_log.Info(" >> coords: " + rinfo.RegionLocX + ", " + rinfo.RegionLocY); | ||
783 | m_log.Info(" >> external host name: " + rinfo.ExternalHostName); | ||
784 | m_log.Info(" >> http port: " + rinfo.HttpPort); | ||
785 | m_log.Info(" >> external EP address: " + rinfo.ExternalEndPoint.Address); | ||
786 | m_log.Info(" >> external EP port: " + rinfo.ExternalEndPoint.Port); | ||
787 | m_log.Info(" ------------ -------------- ----------"); | ||
788 | } | ||
789 | |||
790 | |||
791 | #endregion | ||
792 | |||
793 | |||
794 | } | ||
795 | } | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs new file mode 100644 index 0000000..3ca4882 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs | |||
@@ -0,0 +1,240 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using log4net; | ||
29 | using Nini.Config; | ||
30 | using System; | ||
31 | using System.Collections.Generic; | ||
32 | using System.Reflection; | ||
33 | using OpenSim.Framework; | ||
34 | using OpenSim.Framework.Console; | ||
35 | using OpenSim.Server.Base; | ||
36 | using OpenSim.Region.Framework.Interfaces; | ||
37 | using OpenSim.Region.Framework.Scenes; | ||
38 | using OpenSim.Services.Interfaces; | ||
39 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
40 | using OpenMetaverse; | ||
41 | |||
42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | ||
43 | { | ||
44 | public class LocalGridServicesConnector : | ||
45 | ISharedRegionModule, IGridService | ||
46 | { | ||
47 | private static readonly ILog m_log = | ||
48 | LogManager.GetLogger( | ||
49 | MethodBase.GetCurrentMethod().DeclaringType); | ||
50 | |||
51 | private static LocalGridServicesConnector m_MainInstance; | ||
52 | |||
53 | private IGridService m_GridService; | ||
54 | private Dictionary<UUID, RegionCache> m_LocalCache = new Dictionary<UUID, RegionCache>(); | ||
55 | |||
56 | private bool m_Enabled = false; | ||
57 | |||
58 | public LocalGridServicesConnector() | ||
59 | { | ||
60 | } | ||
61 | |||
62 | public LocalGridServicesConnector(IConfigSource source) | ||
63 | { | ||
64 | m_log.Debug("[LOCAL GRID CONNECTOR]: LocalGridServicesConnector instantiated"); | ||
65 | m_MainInstance = this; | ||
66 | InitialiseService(source); | ||
67 | } | ||
68 | |||
69 | #region ISharedRegionModule | ||
70 | |||
71 | public Type ReplaceableInterface | ||
72 | { | ||
73 | get { return null; } | ||
74 | } | ||
75 | |||
76 | public string Name | ||
77 | { | ||
78 | get { return "LocalGridServicesConnector"; } | ||
79 | } | ||
80 | |||
81 | public void Initialise(IConfigSource source) | ||
82 | { | ||
83 | IConfig moduleConfig = source.Configs["Modules"]; | ||
84 | if (moduleConfig != null) | ||
85 | { | ||
86 | string name = moduleConfig.GetString("GridServices", ""); | ||
87 | if (name == Name) | ||
88 | { | ||
89 | InitialiseService(source); | ||
90 | m_MainInstance = this; | ||
91 | m_Enabled = true; | ||
92 | m_log.Info("[LOCAL GRID CONNECTOR]: Local grid connector enabled"); | ||
93 | } | ||
94 | } | ||
95 | } | ||
96 | |||
97 | private void InitialiseService(IConfigSource source) | ||
98 | { | ||
99 | IConfig assetConfig = source.Configs["GridService"]; | ||
100 | if (assetConfig == null) | ||
101 | { | ||
102 | m_log.Error("[LOCAL GRID CONNECTOR]: GridService missing from OpenSim.ini"); | ||
103 | return; | ||
104 | } | ||
105 | |||
106 | string serviceDll = assetConfig.GetString("LocalServiceModule", | ||
107 | String.Empty); | ||
108 | |||
109 | if (serviceDll == String.Empty) | ||
110 | { | ||
111 | m_log.Error("[LOCAL GRID CONNECTOR]: No LocalServiceModule named in section GridService"); | ||
112 | return; | ||
113 | } | ||
114 | |||
115 | Object[] args = new Object[] { source }; | ||
116 | m_GridService = | ||
117 | ServerUtils.LoadPlugin<IGridService>(serviceDll, | ||
118 | args); | ||
119 | |||
120 | if (m_GridService == null) | ||
121 | { | ||
122 | m_log.Error("[LOCAL GRID CONNECTOR]: Can't load grid service"); | ||
123 | return; | ||
124 | } | ||
125 | } | ||
126 | |||
127 | public void PostInitialise() | ||
128 | { | ||
129 | if (m_MainInstance == this) | ||
130 | { | ||
131 | MainConsole.Instance.Commands.AddCommand("LocalGridConnector", false, "show neighbours", | ||
132 | "show neighbours", | ||
133 | "Shows the local regions' neighbours", NeighboursCommand); | ||
134 | } | ||
135 | } | ||
136 | |||
137 | public void Close() | ||
138 | { | ||
139 | } | ||
140 | |||
141 | public void AddRegion(Scene scene) | ||
142 | { | ||
143 | if (m_Enabled) | ||
144 | scene.RegisterModuleInterface<IGridService>(this); | ||
145 | |||
146 | if (m_MainInstance == this) | ||
147 | { | ||
148 | if (m_LocalCache.ContainsKey(scene.RegionInfo.RegionID)) | ||
149 | m_log.ErrorFormat("[LOCAL GRID CONNECTOR]: simulator seems to have more than one region with the same UUID. Please correct this!"); | ||
150 | else | ||
151 | m_LocalCache.Add(scene.RegionInfo.RegionID, new RegionCache(scene)); | ||
152 | } | ||
153 | } | ||
154 | |||
155 | public void RemoveRegion(Scene scene) | ||
156 | { | ||
157 | if (m_MainInstance == this) | ||
158 | { | ||
159 | m_LocalCache[scene.RegionInfo.RegionID].Clear(); | ||
160 | m_LocalCache.Remove(scene.RegionInfo.RegionID); | ||
161 | } | ||
162 | } | ||
163 | |||
164 | public void RegionLoaded(Scene scene) | ||
165 | { | ||
166 | } | ||
167 | |||
168 | #endregion | ||
169 | |||
170 | #region IGridService | ||
171 | |||
172 | public bool RegisterRegion(UUID scopeID, GridRegion regionInfo) | ||
173 | { | ||
174 | return m_GridService.RegisterRegion(scopeID, regionInfo); | ||
175 | } | ||
176 | |||
177 | public bool DeregisterRegion(UUID regionID) | ||
178 | { | ||
179 | return m_GridService.DeregisterRegion(regionID); | ||
180 | } | ||
181 | |||
182 | public List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) | ||
183 | { | ||
184 | if (m_LocalCache.ContainsKey(regionID)) | ||
185 | { | ||
186 | List<GridRegion> neighbours = m_LocalCache[regionID].GetNeighbours(); | ||
187 | if (neighbours.Count == 0) | ||
188 | // try the DB | ||
189 | neighbours = m_GridService.GetNeighbours(scopeID, regionID); | ||
190 | return neighbours; | ||
191 | } | ||
192 | else | ||
193 | { | ||
194 | m_log.WarnFormat("[LOCAL GRID CONNECTOR]: GetNeighbours: Requested region {0} is not on this sim", regionID); | ||
195 | return new List<GridRegion>(); | ||
196 | } | ||
197 | |||
198 | // Don't go to the DB | ||
199 | //return m_GridService.GetNeighbours(scopeID, regionID); | ||
200 | } | ||
201 | |||
202 | public GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) | ||
203 | { | ||
204 | return m_GridService.GetRegionByUUID(scopeID, regionID); | ||
205 | } | ||
206 | |||
207 | public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) | ||
208 | { | ||
209 | return m_GridService.GetRegionByPosition(scopeID, x, y); | ||
210 | } | ||
211 | |||
212 | public GridRegion GetRegionByName(UUID scopeID, string regionName) | ||
213 | { | ||
214 | return m_GridService.GetRegionByName(scopeID, regionName); | ||
215 | } | ||
216 | |||
217 | public List<GridRegion> GetRegionsByName(UUID scopeID, string name, int maxNumber) | ||
218 | { | ||
219 | return m_GridService.GetRegionsByName(scopeID, name, maxNumber); | ||
220 | } | ||
221 | |||
222 | public List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax) | ||
223 | { | ||
224 | return m_GridService.GetRegionRange(scopeID, xmin, xmax, ymin, ymax); | ||
225 | } | ||
226 | |||
227 | #endregion | ||
228 | |||
229 | public void NeighboursCommand(string module, string[] cmdparams) | ||
230 | { | ||
231 | foreach (KeyValuePair<UUID, RegionCache> kvp in m_LocalCache) | ||
232 | { | ||
233 | m_log.InfoFormat("*** Neighbours of {0} {1} ***", kvp.Key, kvp.Value.RegionName); | ||
234 | List<GridRegion> regions = kvp.Value.GetNeighbours(); | ||
235 | foreach (GridRegion r in regions) | ||
236 | m_log.InfoFormat(" {0} @ {1}={2}", r.RegionName, r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize); | ||
237 | } | ||
238 | } | ||
239 | } | ||
240 | } | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionCache.cs new file mode 100644 index 0000000..2b336bb --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionCache.cs | |||
@@ -0,0 +1,79 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Reflection; | ||
31 | |||
32 | using OpenSim.Region.Framework.Scenes; | ||
33 | using OpenSim.Services.Interfaces; | ||
34 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
35 | |||
36 | using log4net; | ||
37 | |||
38 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | ||
39 | { | ||
40 | public class RegionCache | ||
41 | { | ||
42 | private static readonly ILog m_log = | ||
43 | LogManager.GetLogger( | ||
44 | MethodBase.GetCurrentMethod().DeclaringType); | ||
45 | |||
46 | private Scene m_scene; | ||
47 | private Dictionary<ulong, GridRegion> m_neighbours = new Dictionary<ulong, GridRegion>(); | ||
48 | |||
49 | public string RegionName | ||
50 | { | ||
51 | get { return m_scene.RegionInfo.RegionName; } | ||
52 | } | ||
53 | |||
54 | public RegionCache(Scene s) | ||
55 | { | ||
56 | m_scene = s; | ||
57 | m_scene.EventManager.OnRegionUp += OnRegionUp; | ||
58 | } | ||
59 | |||
60 | private void OnRegionUp(GridRegion otherRegion) | ||
61 | { | ||
62 | m_log.DebugFormat("[REGION CACHE]: (on region {0}) Region {1} is up @ {2}-{3}", | ||
63 | m_scene.RegionInfo.RegionName, otherRegion.RegionName, otherRegion.RegionLocX, otherRegion.RegionLocY); | ||
64 | |||
65 | m_neighbours[otherRegion.RegionHandle] = otherRegion; | ||
66 | } | ||
67 | |||
68 | public void Clear() | ||
69 | { | ||
70 | m_scene.EventManager.OnRegionUp -= OnRegionUp; | ||
71 | m_neighbours.Clear(); | ||
72 | } | ||
73 | |||
74 | public List<GridRegion> GetNeighbours() | ||
75 | { | ||
76 | return new List<GridRegion>(m_neighbours.Values); | ||
77 | } | ||
78 | } | ||
79 | } | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs new file mode 100644 index 0000000..72c00fc --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RemoteGridServiceConnector.cs | |||
@@ -0,0 +1,194 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using log4net; | ||
29 | using System; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Reflection; | ||
32 | using Nini.Config; | ||
33 | using OpenMetaverse; | ||
34 | |||
35 | using OpenSim.Framework; | ||
36 | using OpenSim.Services.Connectors; | ||
37 | using OpenSim.Region.Framework.Interfaces; | ||
38 | using OpenSim.Region.Framework.Scenes; | ||
39 | using OpenSim.Services.Interfaces; | ||
40 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
41 | |||
42 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | ||
43 | { | ||
44 | public class RemoteGridServicesConnector : | ||
45 | GridServicesConnector, ISharedRegionModule, IGridService | ||
46 | { | ||
47 | private static readonly ILog m_log = | ||
48 | LogManager.GetLogger( | ||
49 | MethodBase.GetCurrentMethod().DeclaringType); | ||
50 | |||
51 | private bool m_Enabled = false; | ||
52 | |||
53 | private IGridService m_LocalGridService; | ||
54 | |||
55 | public RemoteGridServicesConnector() | ||
56 | { | ||
57 | } | ||
58 | |||
59 | public RemoteGridServicesConnector(IConfigSource source) | ||
60 | { | ||
61 | InitialiseServices(source); | ||
62 | } | ||
63 | |||
64 | #region ISharedRegionmodule | ||
65 | |||
66 | public Type ReplaceableInterface | ||
67 | { | ||
68 | get { return null; } | ||
69 | } | ||
70 | |||
71 | public string Name | ||
72 | { | ||
73 | get { return "RemoteGridServicesConnector"; } | ||
74 | } | ||
75 | |||
76 | public override void Initialise(IConfigSource source) | ||
77 | { | ||
78 | IConfig moduleConfig = source.Configs["Modules"]; | ||
79 | if (moduleConfig != null) | ||
80 | { | ||
81 | string name = moduleConfig.GetString("GridServices", ""); | ||
82 | if (name == Name) | ||
83 | { | ||
84 | InitialiseServices(source); | ||
85 | m_Enabled = true; | ||
86 | m_log.Info("[REMOTE GRID CONNECTOR]: Remote grid enabled"); | ||
87 | } | ||
88 | } | ||
89 | } | ||
90 | |||
91 | private void InitialiseServices(IConfigSource source) | ||
92 | { | ||
93 | IConfig gridConfig = source.Configs["GridService"]; | ||
94 | if (gridConfig == null) | ||
95 | { | ||
96 | m_log.Error("[REMOTE GRID CONNECTOR]: GridService missing from OpenSim.ini"); | ||
97 | return; | ||
98 | } | ||
99 | |||
100 | base.Initialise(source); | ||
101 | |||
102 | m_LocalGridService = new LocalGridServicesConnector(source); | ||
103 | } | ||
104 | |||
105 | public void PostInitialise() | ||
106 | { | ||
107 | if (m_LocalGridService != null) | ||
108 | ((ISharedRegionModule)m_LocalGridService).PostInitialise(); | ||
109 | } | ||
110 | |||
111 | public void Close() | ||
112 | { | ||
113 | } | ||
114 | |||
115 | public void AddRegion(Scene scene) | ||
116 | { | ||
117 | if (m_Enabled) | ||
118 | scene.RegisterModuleInterface<IGridService>(this); | ||
119 | |||
120 | if (m_LocalGridService != null) | ||
121 | ((ISharedRegionModule)m_LocalGridService).AddRegion(scene); | ||
122 | } | ||
123 | |||
124 | public void RemoveRegion(Scene scene) | ||
125 | { | ||
126 | if (m_LocalGridService != null) | ||
127 | ((ISharedRegionModule)m_LocalGridService).RemoveRegion(scene); | ||
128 | } | ||
129 | |||
130 | public void RegionLoaded(Scene scene) | ||
131 | { | ||
132 | } | ||
133 | |||
134 | #endregion | ||
135 | |||
136 | #region IGridService | ||
137 | |||
138 | public override bool RegisterRegion(UUID scopeID, GridRegion regionInfo) | ||
139 | { | ||
140 | if (m_LocalGridService.RegisterRegion(scopeID, regionInfo)) | ||
141 | return base.RegisterRegion(scopeID, regionInfo); | ||
142 | |||
143 | return false; | ||
144 | } | ||
145 | |||
146 | public override bool DeregisterRegion(UUID regionID) | ||
147 | { | ||
148 | if (m_LocalGridService.DeregisterRegion(regionID)) | ||
149 | return base.DeregisterRegion(regionID); | ||
150 | |||
151 | return false; | ||
152 | } | ||
153 | |||
154 | // Let's override GetNeighbours completely -- never go to the grid server | ||
155 | // Neighbours are/should be cached locally | ||
156 | // For retrieval from the DB, caller should call GetRegionByPosition | ||
157 | public override List<GridRegion> GetNeighbours(UUID scopeID, UUID regionID) | ||
158 | { | ||
159 | return m_LocalGridService.GetNeighbours(scopeID, regionID); | ||
160 | } | ||
161 | |||
162 | public override GridRegion GetRegionByUUID(UUID scopeID, UUID regionID) | ||
163 | { | ||
164 | GridRegion rinfo = m_LocalGridService.GetRegionByUUID(scopeID, regionID); | ||
165 | if (rinfo == null) | ||
166 | rinfo = base.GetRegionByUUID(scopeID, regionID); | ||
167 | |||
168 | return rinfo; | ||
169 | } | ||
170 | |||
171 | public override GridRegion GetRegionByPosition(UUID scopeID, int x, int y) | ||
172 | { | ||
173 | GridRegion rinfo = m_LocalGridService.GetRegionByPosition(scopeID, x, y); | ||
174 | if (rinfo == null) | ||
175 | rinfo = base.GetRegionByPosition(scopeID, x, y); | ||
176 | |||
177 | return rinfo; | ||
178 | } | ||
179 | |||
180 | public override GridRegion GetRegionByName(UUID scopeID, string regionName) | ||
181 | { | ||
182 | GridRegion rinfo = m_LocalGridService.GetRegionByName(scopeID, regionName); | ||
183 | if (rinfo == null) | ||
184 | rinfo = base.GetRegionByName(scopeID, regionName); | ||
185 | |||
186 | return rinfo; | ||
187 | } | ||
188 | |||
189 | // Let's not override GetRegionsByName -- let's get them all from the grid server | ||
190 | // Let's not override GetRegionRange -- let's get them all from the grid server | ||
191 | |||
192 | #endregion | ||
193 | } | ||
194 | } | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs new file mode 100644 index 0000000..2ca90f8 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs | |||
@@ -0,0 +1,141 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Reflection; | ||
32 | using System.Threading; | ||
33 | using log4net.Config; | ||
34 | using NUnit.Framework; | ||
35 | using NUnit.Framework.SyntaxHelpers; | ||
36 | using OpenMetaverse; | ||
37 | using OpenSim.Framework; | ||
38 | using Nini.Config; | ||
39 | |||
40 | using OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid; | ||
41 | using OpenSim.Region.Framework.Scenes; | ||
42 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
43 | using OpenSim.Tests.Common; | ||
44 | using OpenSim.Tests.Common.Setup; | ||
45 | |||
46 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.Tests | ||
47 | { | ||
48 | [TestFixture] | ||
49 | public class GridConnectorsTests | ||
50 | { | ||
51 | LocalGridServicesConnector m_LocalConnector; | ||
52 | private void SetUp() | ||
53 | { | ||
54 | IConfigSource config = new IniConfigSource(); | ||
55 | config.AddConfig("Modules"); | ||
56 | config.AddConfig("GridService"); | ||
57 | config.Configs["Modules"].Set("GridServices", "LocalGridServicesConnector"); | ||
58 | config.Configs["GridService"].Set("LocalServiceModule", "OpenSim.Services.GridService.dll:GridService"); | ||
59 | config.Configs["GridService"].Set("StorageProvider", "OpenSim.Data.Null.dll:NullRegionData"); | ||
60 | |||
61 | m_LocalConnector = new LocalGridServicesConnector(config); | ||
62 | } | ||
63 | |||
64 | /// <summary> | ||
65 | /// Test saving a V0.2 OpenSim Region Archive. | ||
66 | /// </summary> | ||
67 | [Test] | ||
68 | public void TestRegisterRegionV0_2() | ||
69 | { | ||
70 | SetUp(); | ||
71 | |||
72 | // Create 3 regions | ||
73 | GridRegion r1 = new GridRegion(); | ||
74 | r1.RegionName = "Test Region 1"; | ||
75 | r1.RegionID = new UUID(1); | ||
76 | r1.RegionLocX = 1000 * (int)Constants.RegionSize; | ||
77 | r1.RegionLocY = 1000 * (int)Constants.RegionSize; | ||
78 | r1.ExternalHostName = "127.0.0.1"; | ||
79 | r1.HttpPort = 9001; | ||
80 | r1.InternalEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("0.0.0.0"), 0); | ||
81 | Scene s = new Scene(new RegionInfo()); | ||
82 | s.RegionInfo.RegionID = r1.RegionID; | ||
83 | m_LocalConnector.AddRegion(s); | ||
84 | |||
85 | |||
86 | GridRegion r2 = new GridRegion(); | ||
87 | r2.RegionName = "Test Region 2"; | ||
88 | r2.RegionID = new UUID(2); | ||
89 | r2.RegionLocX = 1001 * (int)Constants.RegionSize; | ||
90 | r2.RegionLocY = 1000 * (int)Constants.RegionSize; | ||
91 | r2.ExternalHostName = "127.0.0.1"; | ||
92 | r2.HttpPort = 9002; | ||
93 | r2.InternalEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("0.0.0.0"), 0); | ||
94 | s = new Scene(new RegionInfo()); | ||
95 | s.RegionInfo.RegionID = r1.RegionID; | ||
96 | m_LocalConnector.AddRegion(s); | ||
97 | |||
98 | GridRegion r3 = new GridRegion(); | ||
99 | r3.RegionName = "Test Region 3"; | ||
100 | r3.RegionID = new UUID(3); | ||
101 | r3.RegionLocX = 1005 * (int)Constants.RegionSize; | ||
102 | r3.RegionLocY = 1000 * (int)Constants.RegionSize; | ||
103 | r3.ExternalHostName = "127.0.0.1"; | ||
104 | r3.HttpPort = 9003; | ||
105 | r3.InternalEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("0.0.0.0"), 0); | ||
106 | s = new Scene(new RegionInfo()); | ||
107 | s.RegionInfo.RegionID = r1.RegionID; | ||
108 | m_LocalConnector.AddRegion(s); | ||
109 | |||
110 | m_LocalConnector.RegisterRegion(UUID.Zero, r1); | ||
111 | GridRegion result = m_LocalConnector.GetRegionByName(UUID.Zero, "Test"); | ||
112 | Assert.IsNotNull(result, "Retrieved GetRegionByName is null"); | ||
113 | Assert.That(result.RegionName, Is.EqualTo("Test Region 1"), "Retrieved region's name does not match"); | ||
114 | |||
115 | result = m_LocalConnector.GetRegionByUUID(UUID.Zero, new UUID(1)); | ||
116 | Assert.IsNotNull(result, "Retrieved GetRegionByUUID is null"); | ||
117 | Assert.That(result.RegionID, Is.EqualTo(new UUID(1)), "Retrieved region's UUID does not match"); | ||
118 | |||
119 | result = m_LocalConnector.GetRegionByPosition(UUID.Zero, 1000 * (int)Constants.RegionSize, 1000 * (int)Constants.RegionSize); | ||
120 | Assert.IsNotNull(result, "Retrieved GetRegionByPosition is null"); | ||
121 | Assert.That(result.RegionLocX, Is.EqualTo(1000 * (int)Constants.RegionSize), "Retrieved region's position does not match"); | ||
122 | |||
123 | m_LocalConnector.RegisterRegion(UUID.Zero, r2); | ||
124 | m_LocalConnector.RegisterRegion(UUID.Zero, r3); | ||
125 | |||
126 | List<GridRegion> results = m_LocalConnector.GetNeighbours(UUID.Zero, new UUID(1)); | ||
127 | Assert.IsNotNull(results, "Retrieved neighbours list is null"); | ||
128 | Assert.That(results.Count, Is.EqualTo(1), "Retrieved neighbour collection is greater than expected"); | ||
129 | Assert.That(results[0].RegionID, Is.EqualTo(new UUID(2)), "Retrieved region's UUID does not match"); | ||
130 | |||
131 | results = m_LocalConnector.GetRegionsByName(UUID.Zero, "Test", 10); | ||
132 | Assert.IsNotNull(results, "Retrieved GetRegionsByName list is null"); | ||
133 | Assert.That(results.Count, Is.EqualTo(3), "Retrieved neighbour collection is less than expected"); | ||
134 | |||
135 | results = m_LocalConnector.GetRegionRange(UUID.Zero, 900 * (int)Constants.RegionSize, 1002 * (int)Constants.RegionSize, | ||
136 | 900 * (int)Constants.RegionSize, 1100 * (int)Constants.RegionSize); | ||
137 | Assert.IsNotNull(results, "Retrieved GetRegionRange list is null"); | ||
138 | Assert.That(results.Count, Is.EqualTo(2), "Retrieved neighbour collection is not the number expected"); | ||
139 | } | ||
140 | } | ||
141 | } | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs index 9519e23..696225c 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs | |||
@@ -42,6 +42,8 @@ using OpenSim.Region.Framework.Interfaces; | |||
42 | using OpenSim.Region.Framework.Scenes; | 42 | using OpenSim.Region.Framework.Scenes; |
43 | using OpenSim.Region.Framework.Scenes.Hypergrid; | 43 | using OpenSim.Region.Framework.Scenes.Hypergrid; |
44 | using OpenSim.Region.Framework.Scenes.Serialization; | 44 | using OpenSim.Region.Framework.Scenes.Serialization; |
45 | using OpenSim.Services.Interfaces; | ||
46 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
45 | 47 | ||
46 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | 48 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion |
47 | { | 49 | { |
@@ -59,6 +61,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
59 | 61 | ||
60 | protected RegionToRegionClient m_regionClient; | 62 | protected RegionToRegionClient m_regionClient; |
61 | 63 | ||
64 | protected IHyperlinkService m_hyperlinkService; | ||
65 | |||
62 | protected bool m_safemode; | 66 | protected bool m_safemode; |
63 | protected IPAddress m_thisIP; | 67 | protected IPAddress m_thisIP; |
64 | 68 | ||
@@ -134,7 +138,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
134 | m_localBackend = new LocalInterregionComms(); | 138 | m_localBackend = new LocalInterregionComms(); |
135 | m_commsManager = scene.CommsManager; | 139 | m_commsManager = scene.CommsManager; |
136 | m_aScene = scene; | 140 | m_aScene = scene; |
137 | m_regionClient = new RegionToRegionClient(m_aScene); | 141 | m_hyperlinkService = m_aScene.RequestModuleInterface<IHyperlinkService>(); |
142 | m_regionClient = new RegionToRegionClient(m_aScene, m_hyperlinkService); | ||
138 | m_thisIP = Util.GetHostFromDNS(scene.RegionInfo.ExternalHostName); | 143 | m_thisIP = Util.GetHostFromDNS(scene.RegionInfo.ExternalHostName); |
139 | } | 144 | } |
140 | 145 | ||
@@ -161,7 +166,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
161 | // else do the remote thing | 166 | // else do the remote thing |
162 | if (!m_localBackend.IsLocalRegion(regionHandle)) | 167 | if (!m_localBackend.IsLocalRegion(regionHandle)) |
163 | { | 168 | { |
164 | RegionInfo regInfo = m_commsManager.GridService.RequestNeighbourInfo(regionHandle); | 169 | uint x = 0, y = 0; |
170 | Utils.LongToUInts(regionHandle, out x, out y); | ||
171 | GridRegion regInfo = m_aScene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
165 | if (regInfo != null) | 172 | if (regInfo != null) |
166 | { | 173 | { |
167 | m_regionClient.SendUserInformation(regInfo, aCircuit); | 174 | m_regionClient.SendUserInformation(regInfo, aCircuit); |
@@ -183,7 +190,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
183 | // else do the remote thing | 190 | // else do the remote thing |
184 | if (!m_localBackend.IsLocalRegion(regionHandle)) | 191 | if (!m_localBackend.IsLocalRegion(regionHandle)) |
185 | { | 192 | { |
186 | RegionInfo regInfo = m_commsManager.GridService.RequestNeighbourInfo(regionHandle); | 193 | uint x = 0, y = 0; |
194 | Utils.LongToUInts(regionHandle, out x, out y); | ||
195 | GridRegion regInfo = m_aScene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
187 | if (regInfo != null) | 196 | if (regInfo != null) |
188 | { | 197 | { |
189 | return m_regionClient.DoChildAgentUpdateCall(regInfo, cAgentData); | 198 | return m_regionClient.DoChildAgentUpdateCall(regInfo, cAgentData); |
@@ -204,7 +213,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
204 | // else do the remote thing | 213 | // else do the remote thing |
205 | if (!m_localBackend.IsLocalRegion(regionHandle)) | 214 | if (!m_localBackend.IsLocalRegion(regionHandle)) |
206 | { | 215 | { |
207 | RegionInfo regInfo = m_commsManager.GridService.RequestNeighbourInfo(regionHandle); | 216 | uint x = 0, y = 0; |
217 | Utils.LongToUInts(regionHandle, out x, out y); | ||
218 | GridRegion regInfo = m_aScene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
208 | if (regInfo != null) | 219 | if (regInfo != null) |
209 | { | 220 | { |
210 | return m_regionClient.DoChildAgentUpdateCall(regInfo, cAgentData); | 221 | return m_regionClient.DoChildAgentUpdateCall(regInfo, cAgentData); |
@@ -225,7 +236,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
225 | // else do the remote thing | 236 | // else do the remote thing |
226 | if (!m_localBackend.IsLocalRegion(regionHandle)) | 237 | if (!m_localBackend.IsLocalRegion(regionHandle)) |
227 | { | 238 | { |
228 | RegionInfo regInfo = m_commsManager.GridService.RequestNeighbourInfo(regionHandle); | 239 | uint x = 0, y = 0; |
240 | Utils.LongToUInts(regionHandle, out x, out y); | ||
241 | GridRegion regInfo = m_aScene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
229 | if (regInfo != null) | 242 | if (regInfo != null) |
230 | { | 243 | { |
231 | return m_regionClient.DoRetrieveRootAgentCall(regInfo, id, out agent); | 244 | return m_regionClient.DoRetrieveRootAgentCall(regInfo, id, out agent); |
@@ -257,7 +270,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
257 | // else do the remote thing | 270 | // else do the remote thing |
258 | if (!m_localBackend.IsLocalRegion(regionHandle)) | 271 | if (!m_localBackend.IsLocalRegion(regionHandle)) |
259 | { | 272 | { |
260 | RegionInfo regInfo = m_commsManager.GridService.RequestNeighbourInfo(regionHandle); | 273 | uint x = 0, y = 0; |
274 | Utils.LongToUInts(regionHandle, out x, out y); | ||
275 | GridRegion regInfo = m_aScene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
261 | if (regInfo != null) | 276 | if (regInfo != null) |
262 | { | 277 | { |
263 | return m_regionClient.DoCloseAgentCall(regInfo, id); | 278 | return m_regionClient.DoCloseAgentCall(regInfo, id); |
@@ -284,7 +299,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
284 | // else do the remote thing | 299 | // else do the remote thing |
285 | if (!m_localBackend.IsLocalRegion(regionHandle)) | 300 | if (!m_localBackend.IsLocalRegion(regionHandle)) |
286 | { | 301 | { |
287 | RegionInfo regInfo = m_commsManager.GridService.RequestNeighbourInfo(regionHandle); | 302 | uint x = 0, y = 0; |
303 | Utils.LongToUInts(regionHandle, out x, out y); | ||
304 | GridRegion regInfo = m_aScene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
288 | if (regInfo != null) | 305 | if (regInfo != null) |
289 | { | 306 | { |
290 | return m_regionClient.DoCreateObjectCall( | 307 | return m_regionClient.DoCreateObjectCall( |
@@ -776,16 +793,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
776 | protected class RegionToRegionClient : RegionClient | 793 | protected class RegionToRegionClient : RegionClient |
777 | { | 794 | { |
778 | Scene m_aScene = null; | 795 | Scene m_aScene = null; |
796 | IHyperlinkService m_hyperlinkService; | ||
779 | 797 | ||
780 | public RegionToRegionClient(Scene s) | 798 | public RegionToRegionClient(Scene s, IHyperlinkService hyperService) |
781 | { | 799 | { |
782 | m_aScene = s; | 800 | m_aScene = s; |
801 | m_hyperlinkService = hyperService; | ||
783 | } | 802 | } |
784 | 803 | ||
785 | public override ulong GetRegionHandle(ulong handle) | 804 | public override ulong GetRegionHandle(ulong handle) |
786 | { | 805 | { |
787 | if (m_aScene.SceneGridService is HGSceneCommunicationService) | 806 | if (m_aScene.SceneGridService is HGSceneCommunicationService) |
788 | return ((HGSceneCommunicationService)(m_aScene.SceneGridService)).m_hg.FindRegionHandle(handle); | 807 | { |
808 | if (m_hyperlinkService != null) | ||
809 | return m_hyperlinkService.FindRegionHandle(handle); | ||
810 | } | ||
789 | 811 | ||
790 | return handle; | 812 | return handle; |
791 | } | 813 | } |
@@ -793,29 +815,24 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion | |||
793 | public override bool IsHyperlink(ulong handle) | 815 | public override bool IsHyperlink(ulong handle) |
794 | { | 816 | { |
795 | if (m_aScene.SceneGridService is HGSceneCommunicationService) | 817 | if (m_aScene.SceneGridService is HGSceneCommunicationService) |
796 | return ((HGSceneCommunicationService)(m_aScene.SceneGridService)).m_hg.IsHyperlinkRegion(handle); | 818 | { |
797 | 819 | if ((m_hyperlinkService != null) && (m_hyperlinkService.GetHyperlinkRegion(handle) != null)) | |
820 | return true; | ||
821 | } | ||
798 | return false; | 822 | return false; |
799 | } | 823 | } |
800 | 824 | ||
801 | public override void SendUserInformation(RegionInfo regInfo, AgentCircuitData aCircuit) | 825 | public override void SendUserInformation(GridRegion regInfo, AgentCircuitData aCircuit) |
802 | { | 826 | { |
803 | try | 827 | if (m_hyperlinkService != null) |
804 | { | 828 | m_hyperlinkService.SendUserInformation(regInfo, aCircuit); |
805 | if (m_aScene.SceneGridService is HGSceneCommunicationService) | ||
806 | { | ||
807 | ((HGSceneCommunicationService)(m_aScene.SceneGridService)).m_hg.SendUserInformation(regInfo, aCircuit); | ||
808 | } | ||
809 | } | ||
810 | catch // Bad cast | ||
811 | { } | ||
812 | 829 | ||
813 | } | 830 | } |
814 | 831 | ||
815 | public override void AdjustUserInformation(AgentCircuitData aCircuit) | 832 | public override void AdjustUserInformation(AgentCircuitData aCircuit) |
816 | { | 833 | { |
817 | if (m_aScene.SceneGridService is HGSceneCommunicationService) | 834 | if (m_hyperlinkService != null) |
818 | ((HGSceneCommunicationService)(m_aScene.SceneGridService)).m_hg.AdjustUserInformation(aCircuit); | 835 | m_hyperlinkService.AdjustUserInformation(aCircuit); |
819 | } | 836 | } |
820 | } | 837 | } |
821 | 838 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 1c66254..fd1a759 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | |||
@@ -525,7 +525,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
525 | return true; | 525 | return true; |
526 | } | 526 | } |
527 | 527 | ||
528 | string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI); | 528 | if ((uinfo.UserProfile.UserInventoryURI == null) || (uinfo.UserProfile.UserInventoryURI == "")) |
529 | // this happens in standalone profiles, apparently | ||
530 | return true; | ||
531 | |||
532 | string userInventoryServerURI = Util.ServerURI(uinfo.UserProfile.UserInventoryURI); | ||
533 | |||
529 | string uri = m_LocalGridInventoryURI.TrimEnd('/'); | 534 | string uri = m_LocalGridInventoryURI.TrimEnd('/'); |
530 | 535 | ||
531 | if ((userInventoryServerURI == uri) || (userInventoryServerURI == "")) | 536 | if ((userInventoryServerURI == uri) || (userInventoryServerURI == "")) |
@@ -544,7 +549,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
544 | if ((uinfo == null) || (uinfo.UserProfile == null)) | 549 | if ((uinfo == null) || (uinfo.UserProfile == null)) |
545 | return invURI; | 550 | return invURI; |
546 | 551 | ||
547 | string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI); | 552 | string userInventoryServerURI = Util.ServerURI(uinfo.UserProfile.UserInventoryURI); |
548 | 553 | ||
549 | if ((userInventoryServerURI != null) && | 554 | if ((userInventoryServerURI != null) && |
550 | (userInventoryServerURI != "")) | 555 | (userInventoryServerURI != "")) |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 0d32c77..69504df 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs | |||
@@ -107,7 +107,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory | |||
107 | public void AddRegion(Scene scene) | 107 | public void AddRegion(Scene scene) |
108 | { | 108 | { |
109 | m_Scene = scene; | 109 | m_Scene = scene; |
110 | m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName); | 110 | //m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName); |
111 | 111 | ||
112 | if (!m_Enabled) | 112 | if (!m_Enabled) |
113 | return; | 113 | return; |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs index a52c70b..b0ace39 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs | |||
@@ -37,6 +37,7 @@ using OpenSim.Region.Framework.Scenes; | |||
37 | using OpenSim.Services.Interfaces; | 37 | using OpenSim.Services.Interfaces; |
38 | using OpenSim.Server.Base; | 38 | using OpenSim.Server.Base; |
39 | 39 | ||
40 | |||
40 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land | 41 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land |
41 | { | 42 | { |
42 | public class RemoteLandServicesConnector : | 43 | public class RemoteLandServicesConnector : |
@@ -89,7 +90,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land | |||
89 | if (!m_Enabled) | 90 | if (!m_Enabled) |
90 | return; | 91 | return; |
91 | 92 | ||
92 | m_MapService = scene.CommsManager.GridService; | 93 | m_GridService = scene.GridService; |
93 | m_LocalService.AddRegion(scene); | 94 | m_LocalService.AddRegion(scene); |
94 | scene.RegisterModuleInterface<ILandService>(this); | 95 | scene.RegisterModuleInterface<ILandService>(this); |
95 | } | 96 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs index 61bf481..daba0b3 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/LocalNeighbourServiceConnector.cs | |||
@@ -119,7 +119,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour | |||
119 | 119 | ||
120 | #region INeighbourService | 120 | #region INeighbourService |
121 | 121 | ||
122 | public bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) | 122 | public GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) |
123 | { | 123 | { |
124 | m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", | 124 | m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}", |
125 | thisRegion.RegionName, regionHandle, m_Scenes.Count); | 125 | thisRegion.RegionName, regionHandle, m_Scenes.Count); |
@@ -132,7 +132,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour | |||
132 | } | 132 | } |
133 | } | 133 | } |
134 | m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle); | 134 | m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle); |
135 | return false; | 135 | return null; |
136 | } | 136 | } |
137 | 137 | ||
138 | #endregion INeighbourService | 138 | #endregion INeighbourService |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs index c5bc03b..c6fc2a1 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Neighbour/RemoteNeighourServiceConnector.cs | |||
@@ -118,7 +118,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour | |||
118 | if (!m_Enabled) | 118 | if (!m_Enabled) |
119 | return; | 119 | return; |
120 | 120 | ||
121 | m_MapService = scene.CommsManager.GridService; | ||
122 | m_LocalService.AddRegion(scene); | 121 | m_LocalService.AddRegion(scene); |
123 | scene.RegisterModuleInterface<INeighbourService>(this); | 122 | scene.RegisterModuleInterface<INeighbourService>(this); |
124 | } | 123 | } |
@@ -134,16 +133,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Neighbour | |||
134 | if (!m_Enabled) | 133 | if (!m_Enabled) |
135 | return; | 134 | return; |
136 | 135 | ||
136 | m_GridService = scene.GridService; | ||
137 | |||
137 | m_log.InfoFormat("[NEIGHBOUR CONNECTOR]: Enabled remote neighbours for region {0}", scene.RegionInfo.RegionName); | 138 | m_log.InfoFormat("[NEIGHBOUR CONNECTOR]: Enabled remote neighbours for region {0}", scene.RegionInfo.RegionName); |
138 | 139 | ||
139 | } | 140 | } |
140 | 141 | ||
141 | #region INeighbourService | 142 | #region INeighbourService |
142 | 143 | ||
143 | public override bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) | 144 | public override GridRegion HelloNeighbour(ulong regionHandle, RegionInfo thisRegion) |
144 | { | 145 | { |
145 | if (m_LocalService.HelloNeighbour(regionHandle, thisRegion)) | 146 | GridRegion region = m_LocalService.HelloNeighbour(regionHandle, thisRegion); |
146 | return true; | 147 | if (region != null) |
148 | return region; | ||
147 | 149 | ||
148 | return base.HelloNeighbour(regionHandle, thisRegion); | 150 | return base.HelloNeighbour(regionHandle, thisRegion); |
149 | } | 151 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index 376ea8a..54acbc4 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | |||
@@ -53,6 +53,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
53 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 53 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
54 | 54 | ||
55 | private static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding(); | 55 | private static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding(); |
56 | private static UTF8Encoding m_utf8Encoding = new UTF8Encoding(); | ||
56 | 57 | ||
57 | private Scene m_scene; | 58 | private Scene m_scene; |
58 | private Stream m_loadStream; | 59 | private Stream m_loadStream; |
@@ -100,6 +101,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
100 | int successfulAssetRestores = 0; | 101 | int successfulAssetRestores = 0; |
101 | int failedAssetRestores = 0; | 102 | int failedAssetRestores = 0; |
102 | List<string> serialisedSceneObjects = new List<string>(); | 103 | List<string> serialisedSceneObjects = new List<string>(); |
104 | List<string> serialisedParcels = new List<string>(); | ||
103 | string filePath = "NONE"; | 105 | string filePath = "NONE"; |
104 | 106 | ||
105 | try | 107 | try |
@@ -110,16 +112,16 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
110 | TarArchiveReader.TarEntryType entryType; | 112 | TarArchiveReader.TarEntryType entryType; |
111 | 113 | ||
112 | while ((data = archive.ReadEntry(out filePath, out entryType)) != null) | 114 | while ((data = archive.ReadEntry(out filePath, out entryType)) != null) |
113 | { | 115 | { |
114 | //m_log.DebugFormat( | 116 | //m_log.DebugFormat( |
115 | // "[ARCHIVER]: Successfully read {0} ({1} bytes)", filePath, data.Length); | 117 | // "[ARCHIVER]: Successfully read {0} ({1} bytes)", filePath, data.Length); |
116 | 118 | ||
117 | if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType) | 119 | if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType) |
118 | continue; | 120 | continue; |
119 | 121 | ||
120 | if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH)) | 122 | if (filePath.StartsWith(ArchiveConstants.OBJECTS_PATH)) |
121 | { | 123 | { |
122 | serialisedSceneObjects.Add(m_asciiEncoding.GetString(data)); | 124 | serialisedSceneObjects.Add(m_utf8Encoding.GetString(data)); |
123 | } | 125 | } |
124 | else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) | 126 | else if (filePath.StartsWith(ArchiveConstants.ASSETS_PATH)) |
125 | { | 127 | { |
@@ -136,6 +138,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
136 | { | 138 | { |
137 | LoadRegionSettings(filePath, data); | 139 | LoadRegionSettings(filePath, data); |
138 | } | 140 | } |
141 | else if (!m_merge && filePath.StartsWith(ArchiveConstants.LANDDATA_PATH)) | ||
142 | { | ||
143 | serialisedParcels.Add(m_utf8Encoding.GetString(data)); | ||
144 | } | ||
139 | else if (filePath == ArchiveConstants.CONTROL_FILE_PATH) | 145 | else if (filePath == ArchiveConstants.CONTROL_FILE_PATH) |
140 | { | 146 | { |
141 | LoadControlFile(filePath, data); | 147 | LoadControlFile(filePath, data); |
@@ -169,11 +175,31 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
169 | m_scene.DeleteAllSceneObjects(); | 175 | m_scene.DeleteAllSceneObjects(); |
170 | } | 176 | } |
171 | 177 | ||
178 | // Try to retain the original creator/owner/lastowner if their uuid is present on this grid | ||
179 | // otherwise, use the master avatar uuid instead | ||
180 | UUID masterAvatarId = m_scene.RegionInfo.MasterAvatarAssignedUUID; | ||
181 | |||
182 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) | ||
183 | masterAvatarId = m_scene.RegionInfo.EstateSettings.EstateOwner; | ||
184 | |||
185 | // Reload serialized parcels | ||
186 | m_log.InfoFormat("[ARCHIVER]: Loading {0} parcels. Please wait.", serialisedParcels.Count); | ||
187 | List<LandData> landData = new List<LandData>(); | ||
188 | foreach (string serialisedParcel in serialisedParcels) | ||
189 | { | ||
190 | LandData parcel = LandDataSerializer.Deserialize(serialisedParcel); | ||
191 | if (!ResolveUserUuid(parcel.OwnerID)) | ||
192 | parcel.OwnerID = masterAvatarId; | ||
193 | landData.Add(parcel); | ||
194 | } | ||
195 | m_scene.EventManager.TriggerIncomingLandDataFromStorage(landData); | ||
196 | m_log.InfoFormat("[ARCHIVER]: Restored {0} parcels.", landData.Count); | ||
197 | |||
172 | // Reload serialized prims | 198 | // Reload serialized prims |
173 | m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count); | 199 | m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count); |
174 | 200 | ||
175 | IRegionSerialiserModule serialiser = m_scene.RequestModuleInterface<IRegionSerialiserModule>(); | 201 | IRegionSerialiserModule serialiser = m_scene.RequestModuleInterface<IRegionSerialiserModule>(); |
176 | int sceneObjectsLoadedCount = 0; | 202 | int sceneObjectsLoadedCount = 0; |
177 | 203 | ||
178 | foreach (string serialisedSceneObject in serialisedSceneObjects) | 204 | foreach (string serialisedSceneObject in serialisedSceneObjects) |
179 | { | 205 | { |
@@ -198,12 +224,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
198 | // to the same scene (when this is possible). | 224 | // to the same scene (when this is possible). |
199 | sceneObject.ResetIDs(); | 225 | sceneObject.ResetIDs(); |
200 | 226 | ||
201 | // Try to retain the original creator/owner/lastowner if their uuid is present on this grid | ||
202 | // otherwise, use the master avatar uuid instead | ||
203 | UUID masterAvatarId = m_scene.RegionInfo.MasterAvatarAssignedUUID; | ||
204 | |||
205 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) | ||
206 | masterAvatarId = m_scene.RegionInfo.EstateSettings.EstateOwner; | ||
207 | 227 | ||
208 | foreach (SceneObjectPart part in sceneObject.Children.Values) | 228 | foreach (SceneObjectPart part in sceneObject.Children.Values) |
209 | { | 229 | { |
@@ -499,7 +519,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
499 | XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None); | 519 | XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None); |
500 | 520 | ||
501 | XmlTextReader xtr | 521 | XmlTextReader xtr |
502 | = new XmlTextReader(m_asciiEncoding.GetString(data), XmlNodeType.Document, context); | 522 | = new XmlTextReader(m_asciiEncoding.GetString(data), XmlNodeType.Document, context); |
503 | 523 | ||
504 | RegionSettings currentRegionSettings = m_scene.RegionInfo.RegionSettings; | 524 | RegionSettings currentRegionSettings = m_scene.RegionInfo.RegionSettings; |
505 | 525 | ||
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs index a62c5b3..f039be8 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestExecution.cs | |||
@@ -102,6 +102,17 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
102 | 102 | ||
103 | m_log.InfoFormat("[ARCHIVER]: Added region settings to archive."); | 103 | m_log.InfoFormat("[ARCHIVER]: Added region settings to archive."); |
104 | 104 | ||
105 | // Write out land data (aka parcel) settings | ||
106 | List<ILandObject>landObjects = m_scene.LandChannel.AllParcels(); | ||
107 | foreach (ILandObject lo in landObjects) | ||
108 | { | ||
109 | LandData landData = lo.LandData; | ||
110 | string landDataPath = String.Format("{0}{1}.xml", ArchiveConstants.LANDDATA_PATH, | ||
111 | landData.GlobalID.ToString()); | ||
112 | m_archiveWriter.WriteFile(landDataPath, LandDataSerializer.Serialize(landData)); | ||
113 | } | ||
114 | m_log.InfoFormat("[ARCHIVER]: Added parcel settings to archive."); | ||
115 | |||
105 | // Write out terrain | 116 | // Write out terrain |
106 | string terrainPath | 117 | string terrainPath |
107 | = String.Format("{0}{1}.r32", ArchiveConstants.TERRAINS_PATH, m_scene.RegionInfo.RegionName); | 118 | = String.Format("{0}{1}.r32", ArchiveConstants.TERRAINS_PATH, m_scene.RegionInfo.RegionName); |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs index 63608a8..9e4fbbe 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs | |||
@@ -74,14 +74,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
74 | m_scene = scene; | 74 | m_scene = scene; |
75 | m_saveStream = saveStream; | 75 | m_saveStream = saveStream; |
76 | m_requestId = requestId; | 76 | m_requestId = requestId; |
77 | } | 77 | } |
78 | 78 | ||
79 | /// <summary> | 79 | /// <summary> |
80 | /// Archive the region requested. | 80 | /// Archive the region requested. |
81 | /// </summary> | 81 | /// </summary> |
82 | /// <exception cref="System.IO.IOException">if there was an io problem with creating the file</exception> | 82 | /// <exception cref="System.IO.IOException">if there was an io problem with creating the file</exception> |
83 | public void ArchiveRegion() | 83 | public void ArchiveRegion() |
84 | { | 84 | { |
85 | Dictionary<UUID, int> assetUuids = new Dictionary<UUID, int>(); | 85 | Dictionary<UUID, int> assetUuids = new Dictionary<UUID, int>(); |
86 | 86 | ||
87 | List<EntityBase> entities = m_scene.GetEntities(); | 87 | List<EntityBase> entities = m_scene.GetEntities(); |
@@ -137,7 +137,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
137 | m_scene.RequestModuleInterface<IRegionSerialiserModule>(), | 137 | m_scene.RequestModuleInterface<IRegionSerialiserModule>(), |
138 | m_scene, | 138 | m_scene, |
139 | archiveWriter, | 139 | archiveWriter, |
140 | m_requestId); | 140 | m_requestId); |
141 | 141 | ||
142 | new AssetsRequest( | 142 | new AssetsRequest( |
143 | new AssetsArchiver(archiveWriter), assetUuids.Keys, | 143 | new AssetsArchiver(archiveWriter), assetUuids.Keys, |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs index 5c58b69..8d4f91b 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs | |||
@@ -78,7 +78,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
78 | 78 | ||
79 | public void Close() | 79 | public void Close() |
80 | { | 80 | { |
81 | } | 81 | } |
82 | 82 | ||
83 | public void ArchiveRegion(string savePath) | 83 | public void ArchiveRegion(string savePath) |
84 | { | 84 | { |
@@ -90,7 +90,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
90 | m_log.InfoFormat( | 90 | m_log.InfoFormat( |
91 | "[ARCHIVER]: Writing archive for region {0} to {1}", m_scene.RegionInfo.RegionName, savePath); | 91 | "[ARCHIVER]: Writing archive for region {0} to {1}", m_scene.RegionInfo.RegionName, savePath); |
92 | 92 | ||
93 | new ArchiveWriteRequestPreparation(m_scene, savePath, requestId).ArchiveRegion(); | 93 | new ArchiveWriteRequestPreparation(m_scene, savePath, requestId).ArchiveRegion(); |
94 | } | 94 | } |
95 | 95 | ||
96 | public void ArchiveRegion(Stream saveStream) | 96 | public void ArchiveRegion(Stream saveStream) |
@@ -101,7 +101,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
101 | public void ArchiveRegion(Stream saveStream, Guid requestId) | 101 | public void ArchiveRegion(Stream saveStream, Guid requestId) |
102 | { | 102 | { |
103 | new ArchiveWriteRequestPreparation(m_scene, saveStream, requestId).ArchiveRegion(); | 103 | new ArchiveWriteRequestPreparation(m_scene, saveStream, requestId).ArchiveRegion(); |
104 | } | 104 | } |
105 | 105 | ||
106 | public void DearchiveRegion(string loadPath) | 106 | public void DearchiveRegion(string loadPath) |
107 | { | 107 | { |
@@ -114,7 +114,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
114 | "[ARCHIVER]: Loading archive to region {0} from {1}", m_scene.RegionInfo.RegionName, loadPath); | 114 | "[ARCHIVER]: Loading archive to region {0} from {1}", m_scene.RegionInfo.RegionName, loadPath); |
115 | 115 | ||
116 | new ArchiveReadRequest(m_scene, loadPath, merge, requestId).DearchiveRegion(); | 116 | new ArchiveReadRequest(m_scene, loadPath, merge, requestId).DearchiveRegion(); |
117 | } | 117 | } |
118 | 118 | ||
119 | public void DearchiveRegion(Stream loadStream) | 119 | public void DearchiveRegion(Stream loadStream) |
120 | { | 120 | { |
@@ -124,6 +124,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
124 | public void DearchiveRegion(Stream loadStream, bool merge, Guid requestId) | 124 | public void DearchiveRegion(Stream loadStream, bool merge, Guid requestId) |
125 | { | 125 | { |
126 | new ArchiveReadRequest(m_scene, loadStream, merge, requestId).DearchiveRegion(); | 126 | new ArchiveReadRequest(m_scene, loadStream, merge, requestId).DearchiveRegion(); |
127 | } | 127 | } |
128 | } | 128 | } |
129 | } | 129 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs index 330fa3f..95d109c 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsArchiver.cs | |||
@@ -65,7 +65,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
65 | /// </summary> | 65 | /// </summary> |
66 | /// <param name="archive"></param> | 66 | /// <param name="archive"></param> |
67 | public void WriteAsset(AssetBase asset) | 67 | public void WriteAsset(AssetBase asset) |
68 | { | 68 | { |
69 | //WriteMetadata(archive); | 69 | //WriteMetadata(archive); |
70 | WriteData(asset); | 70 | WriteData(asset); |
71 | } | 71 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs index 82803bf..fe9c8d9 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs | |||
@@ -115,7 +115,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
115 | 115 | ||
116 | m_requestCallbackTimer = new System.Timers.Timer(TIMEOUT); | 116 | m_requestCallbackTimer = new System.Timers.Timer(TIMEOUT); |
117 | m_requestCallbackTimer.AutoReset = false; | 117 | m_requestCallbackTimer.AutoReset = false; |
118 | m_requestCallbackTimer.Elapsed += new ElapsedEventHandler(OnRequestCallbackTimeout); | 118 | m_requestCallbackTimer.Elapsed += new ElapsedEventHandler(OnRequestCallbackTimeout); |
119 | } | 119 | } |
120 | 120 | ||
121 | protected internal void Execute() | 121 | protected internal void Execute() |
@@ -143,7 +143,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
143 | protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args) | 143 | protected void OnRequestCallbackTimeout(object source, ElapsedEventArgs args) |
144 | { | 144 | { |
145 | try | 145 | try |
146 | { | 146 | { |
147 | lock (this) | 147 | lock (this) |
148 | { | 148 | { |
149 | // Take care of the possibilty that this thread started but was paused just outside the lock before | 149 | // Take care of the possibilty that this thread started but was paused just outside the lock before |
@@ -155,7 +155,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
155 | } | 155 | } |
156 | 156 | ||
157 | // Calculate which uuids were not found. This is an expensive way of doing it, but this is a failure | 157 | // Calculate which uuids were not found. This is an expensive way of doing it, but this is a failure |
158 | // case anyway. | 158 | // case anyway. |
159 | List<UUID> uuids = new List<UUID>(); | 159 | List<UUID> uuids = new List<UUID>(); |
160 | foreach (UUID uuid in m_uuids) | 160 | foreach (UUID uuid in m_uuids) |
161 | { | 161 | { |
@@ -188,7 +188,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
188 | m_log.ErrorFormat( | 188 | m_log.ErrorFormat( |
189 | "[ARCHIVER]: (... {0} more not shown)", uuids.Count - MAX_UUID_DISPLAY_ON_TIMEOUT); | 189 | "[ARCHIVER]: (... {0} more not shown)", uuids.Count - MAX_UUID_DISPLAY_ON_TIMEOUT); |
190 | 190 | ||
191 | m_log.Error("[ARCHIVER]: OAR save aborted."); | 191 | m_log.Error("[ARCHIVER]: OAR save aborted."); |
192 | } | 192 | } |
193 | catch (Exception e) | 193 | catch (Exception e) |
194 | { | 194 | { |
@@ -213,7 +213,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
213 | { | 213 | { |
214 | //m_log.DebugFormat("[ARCHIVER]: Received callback for asset {0}", id); | 214 | //m_log.DebugFormat("[ARCHIVER]: Received callback for asset {0}", id); |
215 | 215 | ||
216 | m_requestCallbackTimer.Stop(); | 216 | m_requestCallbackTimer.Stop(); |
217 | 217 | ||
218 | if (m_requestState == RequestState.Aborted) | 218 | if (m_requestState == RequestState.Aborted) |
219 | { | 219 | { |
@@ -258,7 +258,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
258 | } | 258 | } |
259 | catch (Exception e) | 259 | catch (Exception e) |
260 | { | 260 | { |
261 | m_log.ErrorFormat("[ARCHIVER]: AssetRequestCallback failed with {0}", e); | 261 | m_log.ErrorFormat("[ARCHIVER]: AssetRequestCallback failed with {0}", e); |
262 | } | 262 | } |
263 | } | 263 | } |
264 | 264 | ||
diff --git a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs index 5c42e94..edac4a4 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/Tests/ArchiverTests.cs | |||
@@ -59,7 +59,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
59 | m_lastErrorMessage = errorMessage; | 59 | m_lastErrorMessage = errorMessage; |
60 | Console.WriteLine("About to pulse ArchiverTests on LoadCompleted"); | 60 | Console.WriteLine("About to pulse ArchiverTests on LoadCompleted"); |
61 | 61 | ||
62 | Monitor.PulseAll(this); | 62 | Monitor.PulseAll(this); |
63 | } | 63 | } |
64 | } | 64 | } |
65 | 65 | ||
@@ -138,7 +138,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
138 | archiverModule.ArchiveRegion(archiveWriteStream, requestId); | 138 | archiverModule.ArchiveRegion(archiveWriteStream, requestId); |
139 | //AssetServerBase assetServer = (AssetServerBase)scene.CommsManager.AssetCache.AssetServer; | 139 | //AssetServerBase assetServer = (AssetServerBase)scene.CommsManager.AssetCache.AssetServer; |
140 | //while (assetServer.HasWaitingRequests()) | 140 | //while (assetServer.HasWaitingRequests()) |
141 | // assetServer.ProcessNextRequest(); | 141 | // assetServer.ProcessNextRequest(); |
142 | 142 | ||
143 | Monitor.Wait(this, 60000); | 143 | Monitor.Wait(this, 60000); |
144 | } | 144 | } |
@@ -213,7 +213,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
213 | 213 | ||
214 | // Also check that direct entries which will also have a file entry containing that directory doesn't | 214 | // Also check that direct entries which will also have a file entry containing that directory doesn't |
215 | // upset load | 215 | // upset load |
216 | tar.WriteDir(ArchiveConstants.TERRAINS_PATH); | 216 | tar.WriteDir(ArchiveConstants.TERRAINS_PATH); |
217 | 217 | ||
218 | tar.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile()); | 218 | tar.WriteFile(ArchiveConstants.CONTROL_FILE_PATH, ArchiveWriteRequestExecution.Create0p2ControlFile()); |
219 | 219 | ||
@@ -251,7 +251,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
251 | { | 251 | { |
252 | scene.EventManager.OnOarFileLoaded += LoadCompleted; | 252 | scene.EventManager.OnOarFileLoaded += LoadCompleted; |
253 | archiverModule.DearchiveRegion(archiveReadStream); | 253 | archiverModule.DearchiveRegion(archiveReadStream); |
254 | } | 254 | } |
255 | 255 | ||
256 | Assert.That(m_lastErrorMessage, Is.Null); | 256 | Assert.That(m_lastErrorMessage, Is.Null); |
257 | 257 | ||
@@ -271,7 +271,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests | |||
271 | 271 | ||
272 | /// <summary> | 272 | /// <summary> |
273 | /// Test merging a V0.2 OpenSim Region Archive into an existing scene | 273 | /// Test merging a V0.2 OpenSim Region Archive into an existing scene |
274 | /// </summary> | 274 | /// </summary> |
275 | //[Test] | 275 | //[Test] |
276 | public void TestMergeOarV0_2() | 276 | public void TestMergeOarV0_2() |
277 | { | 277 | { |
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 75b3fe6..4896edf 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -33,7 +33,6 @@ using log4net; | |||
33 | using Nini.Config; | 33 | using Nini.Config; |
34 | using OpenMetaverse; | 34 | using OpenMetaverse; |
35 | using OpenSim.Framework; | 35 | using OpenSim.Framework; |
36 | using OpenSim.Region.CoreModules.World.Terrain; | ||
37 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
38 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
39 | 38 | ||
@@ -47,7 +46,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
47 | 46 | ||
48 | private Scene m_scene; | 47 | private Scene m_scene; |
49 | 48 | ||
50 | private EstateTerrainXferHandler TerrainUploader = null; | 49 | private EstateTerrainXferHandler TerrainUploader; |
51 | 50 | ||
52 | #region Packet Data Responders | 51 | #region Packet Data Responders |
53 | 52 | ||
@@ -155,6 +154,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
155 | break; | 154 | break; |
156 | } | 155 | } |
157 | m_scene.RegionInfo.RegionSettings.Save(); | 156 | m_scene.RegionInfo.RegionSettings.Save(); |
157 | sendRegionInfoPacketToAll(); | ||
158 | } | 158 | } |
159 | 159 | ||
160 | public void setEstateTerrainTextureHeights(IClientAPI client, int corner, float lowValue, float highValue) | 160 | public void setEstateTerrainTextureHeights(IClientAPI client, int corner, float lowValue, float highValue) |
@@ -179,6 +179,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
179 | break; | 179 | break; |
180 | } | 180 | } |
181 | m_scene.RegionInfo.RegionSettings.Save(); | 181 | m_scene.RegionInfo.RegionSettings.Save(); |
182 | sendRegionInfoPacketToAll(); | ||
182 | } | 183 | } |
183 | 184 | ||
184 | private void handleCommitEstateTerrainTextureRequest(IClientAPI remoteClient) | 185 | private void handleCommitEstateTerrainTextureRequest(IClientAPI remoteClient) |
@@ -668,7 +669,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
668 | LookupUUID(uuidNameLookupList); | 669 | LookupUUID(uuidNameLookupList); |
669 | } | 670 | } |
670 | 671 | ||
671 | private void LookupUUIDSCompleted(IAsyncResult iar) | 672 | private static void LookupUUIDSCompleted(IAsyncResult iar) |
672 | { | 673 | { |
673 | LookupUUIDS icon = (LookupUUIDS)iar.AsyncState; | 674 | LookupUUIDS icon = (LookupUUIDS)iar.AsyncState; |
674 | icon.EndInvoke(iar); | 675 | icon.EndInvoke(iar); |
@@ -683,7 +684,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
683 | } | 684 | } |
684 | private void LookupUUIDsAsync(List<UUID> uuidLst) | 685 | private void LookupUUIDsAsync(List<UUID> uuidLst) |
685 | { | 686 | { |
686 | UUID[] uuidarr = new UUID[0]; | 687 | UUID[] uuidarr; |
687 | 688 | ||
688 | lock (uuidLst) | 689 | lock (uuidLst) |
689 | { | 690 | { |
@@ -707,7 +708,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
707 | 708 | ||
708 | for (int i = 0; i < avatars.Count; i++) | 709 | for (int i = 0; i < avatars.Count; i++) |
709 | { | 710 | { |
710 | HandleRegionInfoRequest(avatars[i].ControllingClient); ; | 711 | HandleRegionInfoRequest(avatars[i].ControllingClient); |
711 | } | 712 | } |
712 | } | 713 | } |
713 | 714 | ||
@@ -768,7 +769,7 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
768 | else | 769 | else |
769 | { | 770 | { |
770 | m_scene.RegionInfo.EstateSettings.UseGlobalTime = false; | 771 | m_scene.RegionInfo.EstateSettings.UseGlobalTime = false; |
771 | m_scene.RegionInfo.EstateSettings.SunPosition = (double)(parms2 - 0x1800)/1024.0; | 772 | m_scene.RegionInfo.EstateSettings.SunPosition = (parms2 - 0x1800)/1024.0; |
772 | } | 773 | } |
773 | 774 | ||
774 | if ((parms1 & 0x00000010) != 0) | 775 | if ((parms1 & 0x00000010) != 0) |
@@ -828,8 +829,108 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
828 | m_scene.RegisterModuleInterface<IEstateModule>(this); | 829 | m_scene.RegisterModuleInterface<IEstateModule>(this); |
829 | m_scene.EventManager.OnNewClient += EventManager_OnNewClient; | 830 | m_scene.EventManager.OnNewClient += EventManager_OnNewClient; |
830 | m_scene.EventManager.OnRequestChangeWaterHeight += changeWaterHeight; | 831 | m_scene.EventManager.OnRequestChangeWaterHeight += changeWaterHeight; |
832 | |||
833 | m_scene.AddCommand(this, "set terrain texture", | ||
834 | "set terrain texture <number> <uuid> [<x>] [<y>]", | ||
835 | "Sets the terrain <number> to <uuid>, if <x> or <y> are specified, it will only " + | ||
836 | "set it on regions with a matching coordinate. Specify -1 in <x> or <y> to wildcard" + | ||
837 | " that coordinate.", | ||
838 | consoleSetTerrainTexture); | ||
839 | |||
840 | m_scene.AddCommand(this, "set terrain heights", | ||
841 | "set terrain heights <corner> <min> <max> [<x>] [<y>]", | ||
842 | "Sets the terrain texture heights on corner #<corner> to <min>/<max>, if <x> or <y> are specified, it will only " + | ||
843 | "set it on regions with a matching coordinate. Specify -1 in <x> or <y> to wildcard" + | ||
844 | " that coordinate. Corner # SW = 0, NW = 1, SE = 2, NE = 3.", | ||
845 | consoleSetTerrainHeights); | ||
846 | } | ||
847 | |||
848 | #region Console Commands | ||
849 | |||
850 | public void consoleSetTerrainTexture(string module, string[] args) | ||
851 | { | ||
852 | string num = args[3]; | ||
853 | string uuid = args[4]; | ||
854 | int x = (args.Length > 5 ? int.Parse(args[5]) : -1); | ||
855 | int y = (args.Length > 6 ? int.Parse(args[6]) : -1); | ||
856 | |||
857 | if (x == -1 || m_scene.RegionInfo.RegionLocX == x) | ||
858 | { | ||
859 | if (y == -1 || m_scene.RegionInfo.RegionLocY == y) | ||
860 | { | ||
861 | int corner = int.Parse(num); | ||
862 | UUID texture = UUID.Parse(uuid); | ||
863 | |||
864 | m_log.Debug("[ESTATEMODULE] Setting terrain textures for " + m_scene.RegionInfo.RegionName + | ||
865 | string.Format(" (C#{0} = {1})", corner, texture)); | ||
866 | |||
867 | switch (corner) | ||
868 | { | ||
869 | case 0: | ||
870 | m_scene.RegionInfo.RegionSettings.TerrainTexture1 = texture; | ||
871 | break; | ||
872 | case 1: | ||
873 | m_scene.RegionInfo.RegionSettings.TerrainTexture2 = texture; | ||
874 | break; | ||
875 | case 2: | ||
876 | m_scene.RegionInfo.RegionSettings.TerrainTexture3 = texture; | ||
877 | break; | ||
878 | case 3: | ||
879 | m_scene.RegionInfo.RegionSettings.TerrainTexture4 = texture; | ||
880 | break; | ||
881 | } | ||
882 | m_scene.RegionInfo.RegionSettings.Save(); | ||
883 | sendRegionInfoPacketToAll(); | ||
884 | |||
885 | } | ||
886 | } | ||
887 | } | ||
888 | |||
889 | public void consoleSetTerrainHeights(string module, string[] args) | ||
890 | { | ||
891 | string num = args[3]; | ||
892 | string min = args[4]; | ||
893 | string max = args[5]; | ||
894 | int x = (args.Length > 6 ? int.Parse(args[6]) : -1); | ||
895 | int y = (args.Length > 7 ? int.Parse(args[7]) : -1); | ||
896 | |||
897 | if (x == -1 || m_scene.RegionInfo.RegionLocX == x) | ||
898 | { | ||
899 | if (y == -1 || m_scene.RegionInfo.RegionLocY == y) | ||
900 | { | ||
901 | int corner = int.Parse(num); | ||
902 | float lowValue = float.Parse(min); | ||
903 | float highValue = float.Parse(max); | ||
904 | |||
905 | m_log.Debug("[ESTATEMODULE] Setting terrain heights " + m_scene.RegionInfo.RegionName + | ||
906 | string.Format(" (C{0}, {1}-{2}", corner, lowValue, highValue)); | ||
907 | |||
908 | switch (corner) | ||
909 | { | ||
910 | case 0: | ||
911 | m_scene.RegionInfo.RegionSettings.Elevation1SW = lowValue; | ||
912 | m_scene.RegionInfo.RegionSettings.Elevation2SW = highValue; | ||
913 | break; | ||
914 | case 1: | ||
915 | m_scene.RegionInfo.RegionSettings.Elevation1NW = lowValue; | ||
916 | m_scene.RegionInfo.RegionSettings.Elevation2NW = highValue; | ||
917 | break; | ||
918 | case 2: | ||
919 | m_scene.RegionInfo.RegionSettings.Elevation1SE = lowValue; | ||
920 | m_scene.RegionInfo.RegionSettings.Elevation2SE = highValue; | ||
921 | break; | ||
922 | case 3: | ||
923 | m_scene.RegionInfo.RegionSettings.Elevation1NE = lowValue; | ||
924 | m_scene.RegionInfo.RegionSettings.Elevation2NE = highValue; | ||
925 | break; | ||
926 | } | ||
927 | m_scene.RegionInfo.RegionSettings.Save(); | ||
928 | sendRegionHandshakeToAll(); | ||
929 | } | ||
930 | } | ||
831 | } | 931 | } |
832 | 932 | ||
933 | #endregion | ||
833 | 934 | ||
834 | public void PostInitialise() | 935 | public void PostInitialise() |
835 | { | 936 | { |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandChannel.cs b/OpenSim/Region/CoreModules/World/Land/LandChannel.cs index 8767332..4ed23bb 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandChannel.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandChannel.cs | |||
@@ -82,7 +82,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
82 | } | 82 | } |
83 | 83 | ||
84 | ILandObject obj = new LandObject(UUID.Zero, false, m_scene); | 84 | ILandObject obj = new LandObject(UUID.Zero, false, m_scene); |
85 | obj.landData.Name = "NO LAND"; | 85 | obj.LandData.Name = "NO LAND"; |
86 | return obj; | 86 | return obj; |
87 | } | 87 | } |
88 | 88 | ||
@@ -103,7 +103,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
103 | } | 103 | } |
104 | 104 | ||
105 | ILandObject obj = new LandObject(UUID.Zero, false, m_scene); | 105 | ILandObject obj = new LandObject(UUID.Zero, false, m_scene); |
106 | obj.landData.Name = "NO LAND"; | 106 | obj.LandData.Name = "NO LAND"; |
107 | return obj; | 107 | return obj; |
108 | } | 108 | } |
109 | 109 | ||
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 76ff6da..d2b5cb1 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -36,18 +36,20 @@ using OpenSim.Framework; | |||
36 | using OpenSim.Framework.Capabilities; | 36 | using OpenSim.Framework.Capabilities; |
37 | using OpenSim.Framework.Servers; | 37 | using OpenSim.Framework.Servers; |
38 | using OpenSim.Framework.Servers.HttpServer; | 38 | using OpenSim.Framework.Servers.HttpServer; |
39 | using OpenSim.Services.Interfaces; | ||
39 | using OpenSim.Region.Framework.Interfaces; | 40 | using OpenSim.Region.Framework.Interfaces; |
40 | using OpenSim.Region.Framework.Scenes; | 41 | using OpenSim.Region.Framework.Scenes; |
41 | using OpenSim.Region.Physics.Manager; | 42 | using OpenSim.Region.Physics.Manager; |
42 | using Caps=OpenSim.Framework.Capabilities.Caps; | 43 | using Caps=OpenSim.Framework.Capabilities.Caps; |
44 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
43 | 45 | ||
44 | namespace OpenSim.Region.CoreModules.World.Land | 46 | namespace OpenSim.Region.CoreModules.World.Land |
45 | { | 47 | { |
46 | // used for caching | 48 | // used for caching |
47 | internal class ExtendedLandData { | 49 | internal class ExtendedLandData { |
48 | public LandData landData; | 50 | public LandData LandData; |
49 | public ulong regionHandle; | 51 | public ulong RegionHandle; |
50 | public uint x, y; | 52 | public uint X, Y; |
51 | } | 53 | } |
52 | 54 | ||
53 | public class LandManagementModule : INonSharedRegionModule | 55 | public class LandManagementModule : INonSharedRegionModule |
@@ -189,7 +191,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
189 | { | 191 | { |
190 | if (m_landList.ContainsKey(local_id)) | 192 | if (m_landList.ContainsKey(local_id)) |
191 | { | 193 | { |
192 | m_landList[local_id].landData = newData; | 194 | m_landList[local_id].LandData = newData; |
193 | m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, m_landList[local_id]); | 195 | m_scene.EventManager.TriggerLandObjectUpdated((uint)local_id, m_landList[local_id]); |
194 | } | 196 | } |
195 | } | 197 | } |
@@ -216,12 +218,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
216 | 218 | ||
217 | ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); | 219 | ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); |
218 | 220 | ||
219 | fullSimParcel.setLandBitmap(fullSimParcel.getSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); | 221 | fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize)); |
220 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) | 222 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) |
221 | fullSimParcel.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; | 223 | fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; |
222 | else | 224 | else |
223 | fullSimParcel.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; | 225 | fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; |
224 | fullSimParcel.landData.ClaimDate = Util.UnixTimeSinceEpoch(); | 226 | fullSimParcel.LandData.ClaimDate = Util.UnixTimeSinceEpoch(); |
225 | AddLandObject(fullSimParcel); | 227 | AddLandObject(fullSimParcel); |
226 | } | 228 | } |
227 | 229 | ||
@@ -287,11 +289,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
287 | { | 289 | { |
288 | if (avatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT) | 290 | if (avatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT) |
289 | { | 291 | { |
290 | if (parcelAvatarIsEntering.isBannedFromLand(avatar.UUID)) | 292 | if (parcelAvatarIsEntering.IsBannedFromLand(avatar.UUID)) |
291 | { | 293 | { |
292 | SendYouAreBannedNotice(avatar); | 294 | SendYouAreBannedNotice(avatar); |
293 | } | 295 | } |
294 | else if (parcelAvatarIsEntering.isRestrictedFromLand(avatar.UUID)) | 296 | else if (parcelAvatarIsEntering.IsRestrictedFromLand(avatar.UUID)) |
295 | { | 297 | { |
296 | avatar.ControllingClient.SendAlertMessage( | 298 | avatar.ControllingClient.SendAlertMessage( |
297 | "You are not allowed on this parcel because the land owner has restricted access. For now, you can enter, but please respect the land owner's decisions (or he can ban you!)."); | 299 | "You are not allowed on this parcel because the land owner has restricted access. For now, you can enter, but please respect the land owner's decisions (or he can ban you!)."); |
@@ -319,14 +321,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
319 | List<ILandObject> checkLandParcels = ParcelsNearPoint(presence.AbsolutePosition); | 321 | List<ILandObject> checkLandParcels = ParcelsNearPoint(presence.AbsolutePosition); |
320 | foreach (ILandObject checkBan in checkLandParcels) | 322 | foreach (ILandObject checkBan in checkLandParcels) |
321 | { | 323 | { |
322 | if (checkBan.isBannedFromLand(avatar.AgentId)) | 324 | if (checkBan.IsBannedFromLand(avatar.AgentId)) |
323 | { | 325 | { |
324 | checkBan.sendLandProperties((int)ParcelPropertiesStatus.CollisionBanned, false, (int)ParcelResult.Single, avatar); | 326 | checkBan.SendLandProperties((int)ParcelPropertiesStatus.CollisionBanned, false, (int)ParcelResult.Single, avatar); |
325 | return; //Only send one | 327 | return; //Only send one |
326 | } | 328 | } |
327 | if (checkBan.isRestrictedFromLand(avatar.AgentId)) | 329 | if (checkBan.IsRestrictedFromLand(avatar.AgentId)) |
328 | { | 330 | { |
329 | checkBan.sendLandProperties((int)ParcelPropertiesStatus.CollisionNotOnAccessList, false, (int)ParcelResult.Single, avatar); | 331 | checkBan.SendLandProperties((int)ParcelPropertiesStatus.CollisionNotOnAccessList, false, (int)ParcelResult.Single, avatar); |
330 | return; //Only send one | 332 | return; //Only send one |
331 | } | 333 | } |
332 | } | 334 | } |
@@ -346,19 +348,19 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
346 | { | 348 | { |
347 | if (!avatar.IsChildAgent) | 349 | if (!avatar.IsChildAgent) |
348 | { | 350 | { |
349 | over.sendLandUpdateToClient(avatar.ControllingClient); | 351 | over.SendLandUpdateToClient(avatar.ControllingClient); |
350 | m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.LocalID, | 352 | m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.LandData.LocalID, |
351 | m_scene.RegionInfo.RegionID); | 353 | m_scene.RegionInfo.RegionID); |
352 | } | 354 | } |
353 | } | 355 | } |
354 | 356 | ||
355 | if (avatar.currentParcelUUID != over.landData.GlobalID) | 357 | if (avatar.currentParcelUUID != over.LandData.GlobalID) |
356 | { | 358 | { |
357 | if (!avatar.IsChildAgent) | 359 | if (!avatar.IsChildAgent) |
358 | { | 360 | { |
359 | over.sendLandUpdateToClient(avatar.ControllingClient); | 361 | over.SendLandUpdateToClient(avatar.ControllingClient); |
360 | avatar.currentParcelUUID = over.landData.GlobalID; | 362 | avatar.currentParcelUUID = over.LandData.GlobalID; |
361 | m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.landData.LocalID, | 363 | m_scene.EventManager.TriggerAvatarEnteringNewParcel(avatar, over.LandData.LocalID, |
362 | m_scene.RegionInfo.RegionID); | 364 | m_scene.RegionInfo.RegionID); |
363 | } | 365 | } |
364 | } | 366 | } |
@@ -384,16 +386,16 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
384 | if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && | 386 | if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && |
385 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) | 387 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown) |
386 | { | 388 | { |
387 | EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.landData.LocalID, | 389 | EventManagerOnAvatarEnteringNewParcel(clientAvatar, parcel.LandData.LocalID, |
388 | m_scene.RegionInfo.RegionID); | 390 | m_scene.RegionInfo.RegionID); |
389 | //They are going under the safety line! | 391 | //They are going under the safety line! |
390 | if (!parcel.isBannedFromLand(clientAvatar.UUID)) | 392 | if (!parcel.IsBannedFromLand(clientAvatar.UUID)) |
391 | { | 393 | { |
392 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false; | 394 | clientAvatar.sentMessageAboutRestrictedParcelFlyingDown = false; |
393 | } | 395 | } |
394 | } | 396 | } |
395 | else if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && | 397 | else if (clientAvatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT && |
396 | parcel.isBannedFromLand(clientAvatar.UUID)) | 398 | parcel.IsBannedFromLand(clientAvatar.UUID)) |
397 | { | 399 | { |
398 | SendYouAreBannedNotice(clientAvatar); | 400 | SendYouAreBannedNotice(clientAvatar); |
399 | } | 401 | } |
@@ -407,7 +409,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
407 | ILandObject over = GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | 409 | ILandObject over = GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); |
408 | if (over != null) | 410 | if (over != null) |
409 | { | 411 | { |
410 | if (!over.isBannedFromLand(avatar.UUID) || avatar.AbsolutePosition.Z >= LandChannel.BAN_LINE_SAFETY_HIEGHT) | 412 | if (!over.IsBannedFromLand(avatar.UUID) || avatar.AbsolutePosition.Z >= LandChannel.BAN_LINE_SAFETY_HIEGHT) |
411 | { | 413 | { |
412 | avatar.lastKnownAllowedPosition = | 414 | avatar.lastKnownAllowedPosition = |
413 | new Vector3(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, avatar.AbsolutePosition.Z); | 415 | new Vector3(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, avatar.AbsolutePosition.Z); |
@@ -427,7 +429,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
427 | 429 | ||
428 | if (land != null) | 430 | if (land != null) |
429 | { | 431 | { |
430 | m_landList[landLocalID].sendAccessList(agentID, sessionID, flags, sequenceID, remote_client); | 432 | m_landList[landLocalID].SendAccessList(agentID, sessionID, flags, sequenceID, remote_client); |
431 | } | 433 | } |
432 | } | 434 | } |
433 | 435 | ||
@@ -443,9 +445,9 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
443 | 445 | ||
444 | if (land != null) | 446 | if (land != null) |
445 | { | 447 | { |
446 | if (agentID == land.landData.OwnerID) | 448 | if (agentID == land.LandData.OwnerID) |
447 | { | 449 | { |
448 | land.updateAccessList(flags, entries, remote_client); | 450 | land.UpdateAccessList(flags, entries, remote_client); |
449 | } | 451 | } |
450 | } | 452 | } |
451 | else | 453 | else |
@@ -474,9 +476,9 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
474 | lock (m_landList) | 476 | lock (m_landList) |
475 | { | 477 | { |
476 | int newLandLocalID = ++m_lastLandLocalID; | 478 | int newLandLocalID = ++m_lastLandLocalID; |
477 | new_land.landData.LocalID = newLandLocalID; | 479 | new_land.LandData.LocalID = newLandLocalID; |
478 | 480 | ||
479 | bool[,] landBitmap = new_land.getLandBitmap(); | 481 | bool[,] landBitmap = new_land.GetLandBitmap(); |
480 | for (int x = 0; x < landArrayMax; x++) | 482 | for (int x = 0; x < landArrayMax; x++) |
481 | { | 483 | { |
482 | for (int y = 0; y < landArrayMax; y++) | 484 | for (int y = 0; y < landArrayMax; y++) |
@@ -491,7 +493,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
491 | m_landList.Add(newLandLocalID, new_land); | 493 | m_landList.Add(newLandLocalID, new_land); |
492 | } | 494 | } |
493 | 495 | ||
494 | new_land.forceUpdateLandInfo(); | 496 | new_land.ForceUpdateLandInfo(); |
495 | m_scene.EventManager.TriggerLandObjectAdded(new_land); | 497 | m_scene.EventManager.TriggerLandObjectAdded(new_land); |
496 | return new_land; | 498 | return new_land; |
497 | } | 499 | } |
@@ -518,14 +520,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
518 | } | 520 | } |
519 | } | 521 | } |
520 | 522 | ||
521 | m_scene.EventManager.TriggerLandObjectRemoved(m_landList[local_id].landData.GlobalID); | 523 | m_scene.EventManager.TriggerLandObjectRemoved(m_landList[local_id].LandData.GlobalID); |
522 | m_landList.Remove(local_id); | 524 | m_landList.Remove(local_id); |
523 | } | 525 | } |
524 | } | 526 | } |
525 | 527 | ||
526 | private void performFinalLandJoin(ILandObject master, ILandObject slave) | 528 | private void performFinalLandJoin(ILandObject master, ILandObject slave) |
527 | { | 529 | { |
528 | bool[,] landBitmapSlave = slave.getLandBitmap(); | 530 | bool[,] landBitmapSlave = slave.GetLandBitmap(); |
529 | lock (m_landList) | 531 | lock (m_landList) |
530 | { | 532 | { |
531 | for (int x = 0; x < 64; x++) | 533 | for (int x = 0; x < 64; x++) |
@@ -534,14 +536,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
534 | { | 536 | { |
535 | if (landBitmapSlave[x, y]) | 537 | if (landBitmapSlave[x, y]) |
536 | { | 538 | { |
537 | m_landIDList[x, y] = master.landData.LocalID; | 539 | m_landIDList[x, y] = master.LandData.LocalID; |
538 | } | 540 | } |
539 | } | 541 | } |
540 | } | 542 | } |
541 | } | 543 | } |
542 | 544 | ||
543 | removeLandObject(slave.landData.LocalID); | 545 | removeLandObject(slave.LandData.LocalID); |
544 | UpdateLandObject(master.landData.LocalID, master.landData); | 546 | UpdateLandObject(master.LandData.LocalID, master.LandData); |
545 | } | 547 | } |
546 | 548 | ||
547 | public ILandObject GetLandObject(int parcelLocalID) | 549 | public ILandObject GetLandObject(int parcelLocalID) |
@@ -628,7 +630,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
628 | { | 630 | { |
629 | foreach (LandObject p in m_landList.Values) | 631 | foreach (LandObject p in m_landList.Values) |
630 | { | 632 | { |
631 | p.resetLandPrimCounts(); | 633 | p.ResetLandPrimCounts(); |
632 | } | 634 | } |
633 | } | 635 | } |
634 | } | 636 | } |
@@ -649,7 +651,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
649 | ILandObject landUnderPrim = GetLandObject(position.X, position.Y); | 651 | ILandObject landUnderPrim = GetLandObject(position.X, position.Y); |
650 | if (landUnderPrim != null) | 652 | if (landUnderPrim != null) |
651 | { | 653 | { |
652 | landUnderPrim.addPrimToCount(obj); | 654 | landUnderPrim.AddPrimToCount(obj); |
653 | } | 655 | } |
654 | } | 656 | } |
655 | 657 | ||
@@ -660,7 +662,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
660 | { | 662 | { |
661 | foreach (LandObject p in m_landList.Values) | 663 | foreach (LandObject p in m_landList.Values) |
662 | { | 664 | { |
663 | p.removePrimFromCount(obj); | 665 | p.RemovePrimFromCount(obj); |
664 | } | 666 | } |
665 | } | 667 | } |
666 | } | 668 | } |
@@ -673,15 +675,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
673 | { | 675 | { |
674 | foreach (LandObject p in m_landList.Values) | 676 | foreach (LandObject p in m_landList.Values) |
675 | { | 677 | { |
676 | if (!landOwnersAndParcels.ContainsKey(p.landData.OwnerID)) | 678 | if (!landOwnersAndParcels.ContainsKey(p.LandData.OwnerID)) |
677 | { | 679 | { |
678 | List<LandObject> tempList = new List<LandObject>(); | 680 | List<LandObject> tempList = new List<LandObject>(); |
679 | tempList.Add(p); | 681 | tempList.Add(p); |
680 | landOwnersAndParcels.Add(p.landData.OwnerID, tempList); | 682 | landOwnersAndParcels.Add(p.LandData.OwnerID, tempList); |
681 | } | 683 | } |
682 | else | 684 | else |
683 | { | 685 | { |
684 | landOwnersAndParcels[p.landData.OwnerID].Add(p); | 686 | landOwnersAndParcels[p.LandData.OwnerID].Add(p); |
685 | } | 687 | } |
686 | } | 688 | } |
687 | } | 689 | } |
@@ -692,15 +694,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
692 | int simPrims = 0; | 694 | int simPrims = 0; |
693 | foreach (LandObject p in landOwnersAndParcels[owner]) | 695 | foreach (LandObject p in landOwnersAndParcels[owner]) |
694 | { | 696 | { |
695 | simArea += p.landData.Area; | 697 | simArea += p.LandData.Area; |
696 | simPrims += p.landData.OwnerPrims + p.landData.OtherPrims + p.landData.GroupPrims + | 698 | simPrims += p.LandData.OwnerPrims + p.LandData.OtherPrims + p.LandData.GroupPrims + |
697 | p.landData.SelectedPrims; | 699 | p.LandData.SelectedPrims; |
698 | } | 700 | } |
699 | 701 | ||
700 | foreach (LandObject p in landOwnersAndParcels[owner]) | 702 | foreach (LandObject p in landOwnersAndParcels[owner]) |
701 | { | 703 | { |
702 | p.landData.SimwideArea = simArea; | 704 | p.LandData.SimwideArea = simArea; |
703 | p.landData.SimwidePrims = simPrims; | 705 | p.LandData.SimwidePrims = simPrims; |
704 | } | 706 | } |
705 | } | 707 | } |
706 | } | 708 | } |
@@ -777,26 +779,26 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
777 | 779 | ||
778 | //Lets create a new land object with bitmap activated at that point (keeping the old land objects info) | 780 | //Lets create a new land object with bitmap activated at that point (keeping the old land objects info) |
779 | ILandObject newLand = startLandObject.Copy(); | 781 | ILandObject newLand = startLandObject.Copy(); |
780 | newLand.landData.Name = newLand.landData.Name; | 782 | newLand.LandData.Name = newLand.LandData.Name; |
781 | newLand.landData.GlobalID = UUID.Random(); | 783 | newLand.LandData.GlobalID = UUID.Random(); |
782 | 784 | ||
783 | newLand.setLandBitmap(newLand.getSquareLandBitmap(start_x, start_y, end_x, end_y)); | 785 | newLand.SetLandBitmap(newLand.GetSquareLandBitmap(start_x, start_y, end_x, end_y)); |
784 | 786 | ||
785 | //Now, lets set the subdivision area of the original to false | 787 | //Now, lets set the subdivision area of the original to false |
786 | int startLandObjectIndex = startLandObject.landData.LocalID; | 788 | int startLandObjectIndex = startLandObject.LandData.LocalID; |
787 | lock (m_landList) | 789 | lock (m_landList) |
788 | { | 790 | { |
789 | m_landList[startLandObjectIndex].setLandBitmap( | 791 | m_landList[startLandObjectIndex].SetLandBitmap( |
790 | newLand.modifyLandBitmapSquare(startLandObject.getLandBitmap(), start_x, start_y, end_x, end_y, false)); | 792 | newLand.ModifyLandBitmapSquare(startLandObject.GetLandBitmap(), start_x, start_y, end_x, end_y, false)); |
791 | m_landList[startLandObjectIndex].forceUpdateLandInfo(); | 793 | m_landList[startLandObjectIndex].ForceUpdateLandInfo(); |
792 | } | 794 | } |
793 | 795 | ||
794 | EventManagerOnParcelPrimCountTainted(); | 796 | EventManagerOnParcelPrimCountTainted(); |
795 | 797 | ||
796 | //Now add the new land object | 798 | //Now add the new land object |
797 | ILandObject result = AddLandObject(newLand); | 799 | ILandObject result = AddLandObject(newLand); |
798 | UpdateLandObject(startLandObject.landData.LocalID, startLandObject.landData); | 800 | UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData); |
799 | result.sendLandUpdateToAvatarsOverMe(); | 801 | result.SendLandUpdateToAvatarsOverMe(); |
800 | } | 802 | } |
801 | 803 | ||
802 | /// <summary> | 804 | /// <summary> |
@@ -844,7 +846,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
844 | } | 846 | } |
845 | foreach (ILandObject p in selectedLandObjects) | 847 | foreach (ILandObject p in selectedLandObjects) |
846 | { | 848 | { |
847 | if (p.landData.OwnerID != masterLandObject.landData.OwnerID) | 849 | if (p.LandData.OwnerID != masterLandObject.LandData.OwnerID) |
848 | { | 850 | { |
849 | return; | 851 | return; |
850 | } | 852 | } |
@@ -854,14 +856,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
854 | { | 856 | { |
855 | foreach (ILandObject slaveLandObject in selectedLandObjects) | 857 | foreach (ILandObject slaveLandObject in selectedLandObjects) |
856 | { | 858 | { |
857 | m_landList[masterLandObject.landData.LocalID].setLandBitmap( | 859 | m_landList[masterLandObject.LandData.LocalID].SetLandBitmap( |
858 | slaveLandObject.mergeLandBitmaps(masterLandObject.getLandBitmap(), slaveLandObject.getLandBitmap())); | 860 | slaveLandObject.MergeLandBitmaps(masterLandObject.GetLandBitmap(), slaveLandObject.GetLandBitmap())); |
859 | performFinalLandJoin(masterLandObject, slaveLandObject); | 861 | performFinalLandJoin(masterLandObject, slaveLandObject); |
860 | } | 862 | } |
861 | } | 863 | } |
862 | EventManagerOnParcelPrimCountTainted(); | 864 | EventManagerOnParcelPrimCountTainted(); |
863 | 865 | ||
864 | masterLandObject.sendLandUpdateToAvatarsOverMe(); | 866 | masterLandObject.SendLandUpdateToAvatarsOverMe(); |
865 | } | 867 | } |
866 | 868 | ||
867 | #endregion | 869 | #endregion |
@@ -892,19 +894,19 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
892 | 894 | ||
893 | if (currentParcelBlock != null) | 895 | if (currentParcelBlock != null) |
894 | { | 896 | { |
895 | if (currentParcelBlock.landData.OwnerID == remote_client.AgentId) | 897 | if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId) |
896 | { | 898 | { |
897 | //Owner Flag | 899 | //Owner Flag |
898 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_REQUESTER); | 900 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_REQUESTER); |
899 | } | 901 | } |
900 | else if (currentParcelBlock.landData.SalePrice > 0 && | 902 | else if (currentParcelBlock.LandData.SalePrice > 0 && |
901 | (currentParcelBlock.landData.AuthBuyerID == UUID.Zero || | 903 | (currentParcelBlock.LandData.AuthBuyerID == UUID.Zero || |
902 | currentParcelBlock.landData.AuthBuyerID == remote_client.AgentId)) | 904 | currentParcelBlock.LandData.AuthBuyerID == remote_client.AgentId)) |
903 | { | 905 | { |
904 | //Sale Flag | 906 | //Sale Flag |
905 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_IS_FOR_SALE); | 907 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_IS_FOR_SALE); |
906 | } | 908 | } |
907 | else if (currentParcelBlock.landData.OwnerID == UUID.Zero) | 909 | else if (currentParcelBlock.LandData.OwnerID == UUID.Zero) |
908 | { | 910 | { |
909 | //Public Flag | 911 | //Public Flag |
910 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_PUBLIC); | 912 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_PUBLIC); |
@@ -978,7 +980,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
978 | { | 980 | { |
979 | if (!temp.Contains(currentParcel)) | 981 | if (!temp.Contains(currentParcel)) |
980 | { | 982 | { |
981 | currentParcel.forceUpdateLandInfo(); | 983 | currentParcel.ForceUpdateLandInfo(); |
982 | temp.Add(currentParcel); | 984 | temp.Add(currentParcel); |
983 | } | 985 | } |
984 | } | 986 | } |
@@ -994,7 +996,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
994 | 996 | ||
995 | for (int i = 0; i < temp.Count; i++) | 997 | for (int i = 0; i < temp.Count; i++) |
996 | { | 998 | { |
997 | temp[i].sendLandProperties(sequence_id, snap_selection, requestResult, remote_client); | 999 | temp[i].SendLandProperties(sequence_id, snap_selection, requestResult, remote_client); |
998 | } | 1000 | } |
999 | 1001 | ||
1000 | SendParcelOverlay(remote_client); | 1002 | SendParcelOverlay(remote_client); |
@@ -1008,7 +1010,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1008 | m_landList.TryGetValue(localID, out land); | 1010 | m_landList.TryGetValue(localID, out land); |
1009 | } | 1011 | } |
1010 | 1012 | ||
1011 | if (land != null) land.updateLandProperties(args, remote_client); | 1013 | if (land != null) land.UpdateLandProperties(args, remote_client); |
1012 | } | 1014 | } |
1013 | 1015 | ||
1014 | public void ClientOnParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client) | 1016 | public void ClientOnParcelDivideRequest(int west, int south, int east, int north, IClientAPI remote_client) |
@@ -1024,7 +1026,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1024 | public void ClientOnParcelSelectObjects(int local_id, int request_type, | 1026 | public void ClientOnParcelSelectObjects(int local_id, int request_type, |
1025 | List<UUID> returnIDs, IClientAPI remote_client) | 1027 | List<UUID> returnIDs, IClientAPI remote_client) |
1026 | { | 1028 | { |
1027 | m_landList[local_id].sendForceObjectSelect(local_id, request_type, returnIDs, remote_client); | 1029 | m_landList[local_id].SendForceObjectSelect(local_id, request_type, returnIDs, remote_client); |
1028 | } | 1030 | } |
1029 | 1031 | ||
1030 | public void ClientOnParcelObjectOwnerRequest(int local_id, IClientAPI remote_client) | 1032 | public void ClientOnParcelObjectOwnerRequest(int local_id, IClientAPI remote_client) |
@@ -1037,7 +1039,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1037 | 1039 | ||
1038 | if (land != null) | 1040 | if (land != null) |
1039 | { | 1041 | { |
1040 | m_landList[local_id].sendLandObjectOwners(remote_client); | 1042 | m_landList[local_id].SendLandObjectOwners(remote_client); |
1041 | } | 1043 | } |
1042 | else | 1044 | else |
1043 | { | 1045 | { |
@@ -1057,10 +1059,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1057 | { | 1059 | { |
1058 | if (m_scene.Permissions.IsGod(remote_client.AgentId)) | 1060 | if (m_scene.Permissions.IsGod(remote_client.AgentId)) |
1059 | { | 1061 | { |
1060 | land.landData.OwnerID = ownerID; | 1062 | land.LandData.OwnerID = ownerID; |
1061 | 1063 | ||
1062 | m_scene.Broadcast(SendParcelOverlay); | 1064 | m_scene.Broadcast(SendParcelOverlay); |
1063 | land.sendLandUpdateToClient(remote_client); | 1065 | land.SendLandUpdateToClient(remote_client); |
1064 | } | 1066 | } |
1065 | } | 1067 | } |
1066 | } | 1068 | } |
@@ -1078,11 +1080,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1078 | if (m_scene.Permissions.CanAbandonParcel(remote_client.AgentId, land)) | 1080 | if (m_scene.Permissions.CanAbandonParcel(remote_client.AgentId, land)) |
1079 | { | 1081 | { |
1080 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) | 1082 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) |
1081 | land.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; | 1083 | land.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; |
1082 | else | 1084 | else |
1083 | land.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; | 1085 | land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; |
1084 | m_scene.Broadcast(SendParcelOverlay); | 1086 | m_scene.Broadcast(SendParcelOverlay); |
1085 | land.sendLandUpdateToClient(remote_client); | 1087 | land.SendLandUpdateToClient(remote_client); |
1086 | } | 1088 | } |
1087 | } | 1089 | } |
1088 | } | 1090 | } |
@@ -1100,13 +1102,13 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1100 | if (m_scene.Permissions.CanReclaimParcel(remote_client.AgentId, land)) | 1102 | if (m_scene.Permissions.CanReclaimParcel(remote_client.AgentId, land)) |
1101 | { | 1103 | { |
1102 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) | 1104 | if (m_scene.RegionInfo.EstateSettings.EstateOwner != UUID.Zero) |
1103 | land.landData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; | 1105 | land.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; |
1104 | else | 1106 | else |
1105 | land.landData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; | 1107 | land.LandData.OwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; |
1106 | land.landData.ClaimDate = Util.UnixTimeSinceEpoch(); | 1108 | land.LandData.ClaimDate = Util.UnixTimeSinceEpoch(); |
1107 | land.landData.IsGroupOwned = false; | 1109 | land.LandData.IsGroupOwned = false; |
1108 | m_scene.Broadcast(SendParcelOverlay); | 1110 | m_scene.Broadcast(SendParcelOverlay); |
1109 | land.sendLandUpdateToClient(remote_client); | 1111 | land.SendLandUpdateToClient(remote_client); |
1110 | } | 1112 | } |
1111 | } | 1113 | } |
1112 | } | 1114 | } |
@@ -1128,7 +1130,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1128 | 1130 | ||
1129 | if (land != null) | 1131 | if (land != null) |
1130 | { | 1132 | { |
1131 | land.updateLandSold(e.agentId, e.groupId, e.groupOwned, (uint)e.transactionID, e.parcelPrice, e.parcelArea); | 1133 | land.UpdateLandSold(e.agentId, e.groupId, e.groupOwned, (uint)e.transactionID, e.parcelPrice, e.parcelArea); |
1132 | } | 1134 | } |
1133 | } | 1135 | } |
1134 | } | 1136 | } |
@@ -1149,11 +1151,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1149 | 1151 | ||
1150 | if (lob != null) | 1152 | if (lob != null) |
1151 | { | 1153 | { |
1152 | UUID AuthorizedID = lob.landData.AuthBuyerID; | 1154 | UUID AuthorizedID = lob.LandData.AuthBuyerID; |
1153 | int saleprice = lob.landData.SalePrice; | 1155 | int saleprice = lob.LandData.SalePrice; |
1154 | UUID pOwnerID = lob.landData.OwnerID; | 1156 | UUID pOwnerID = lob.LandData.OwnerID; |
1155 | 1157 | ||
1156 | bool landforsale = ((lob.landData.Flags & | 1158 | bool landforsale = ((lob.LandData.Flags & |
1157 | (uint)(ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects)) != 0); | 1159 | (uint)(ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects)) != 0); |
1158 | if ((AuthorizedID == UUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice && landforsale) | 1160 | if ((AuthorizedID == UUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice && landforsale) |
1159 | { | 1161 | { |
@@ -1182,7 +1184,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1182 | 1184 | ||
1183 | if (land != null) | 1185 | if (land != null) |
1184 | { | 1186 | { |
1185 | land.deedToGroup(groupID); | 1187 | land.DeedToGroup(groupID); |
1186 | } | 1188 | } |
1187 | 1189 | ||
1188 | } | 1190 | } |
@@ -1201,8 +1203,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1201 | public void IncomingLandObjectFromStorage(LandData data) | 1203 | public void IncomingLandObjectFromStorage(LandData data) |
1202 | { | 1204 | { |
1203 | ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene); | 1205 | ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene); |
1204 | new_land.landData = data.Copy(); | 1206 | new_land.LandData = data.Copy(); |
1205 | new_land.setLandBitmapFromByteArray(); | 1207 | new_land.SetLandBitmapFromByteArray(); |
1206 | AddLandObject(new_land); | 1208 | AddLandObject(new_land); |
1207 | } | 1209 | } |
1208 | 1210 | ||
@@ -1216,7 +1218,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1216 | 1218 | ||
1217 | if (selectedParcel == null) return; | 1219 | if (selectedParcel == null) return; |
1218 | 1220 | ||
1219 | selectedParcel.returnLandObjects(returnType, agentIDs, taskIDs, remoteClient); | 1221 | selectedParcel.ReturnLandObjects(returnType, agentIDs, taskIDs, remoteClient); |
1220 | } | 1222 | } |
1221 | 1223 | ||
1222 | public void EventManagerOnNoLandDataFromStorage() | 1224 | public void EventManagerOnNoLandDataFromStorage() |
@@ -1232,7 +1234,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1232 | { | 1234 | { |
1233 | foreach (LandObject obj in m_landList.Values) | 1235 | foreach (LandObject obj in m_landList.Values) |
1234 | { | 1236 | { |
1235 | obj.setParcelObjectMaxOverride(overrideDel); | 1237 | obj.SetParcelObjectMaxOverride(overrideDel); |
1236 | } | 1238 | } |
1237 | } | 1239 | } |
1238 | } | 1240 | } |
@@ -1301,7 +1303,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1301 | else | 1303 | else |
1302 | { | 1304 | { |
1303 | // a parcel request for a parcel in another region. Ask the grid about the region | 1305 | // a parcel request for a parcel in another region. Ask the grid about the region |
1304 | RegionInfo info = m_scene.CommsManager.GridService.RequestNeighbourInfo(regionID); | 1306 | GridRegion info = m_scene.GridService.GetRegionByUUID(UUID.Zero, regionID); |
1305 | if (info != null) | 1307 | if (info != null) |
1306 | parcelID = Util.BuildFakeParcelID(info.RegionHandle, x, y); | 1308 | parcelID = Util.BuildFakeParcelID(info.RegionHandle, x, y); |
1307 | } | 1309 | } |
@@ -1335,7 +1337,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1335 | return; | 1337 | return; |
1336 | } | 1338 | } |
1337 | 1339 | ||
1338 | remoteClient.SendParcelDwellReply(localID, selectedParcel.landData.GlobalID, selectedParcel.landData.Dwell); | 1340 | remoteClient.SendParcelDwellReply(localID, selectedParcel.LandData.GlobalID, selectedParcel.LandData.Dwell); |
1339 | } | 1341 | } |
1340 | 1342 | ||
1341 | private void ClientOnParcelInfoRequest(IClientAPI remoteClient, UUID parcelID) | 1343 | private void ClientOnParcelInfoRequest(IClientAPI remoteClient, UUID parcelID) |
@@ -1343,50 +1345,62 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1343 | if (parcelID == UUID.Zero) | 1345 | if (parcelID == UUID.Zero) |
1344 | return; | 1346 | return; |
1345 | 1347 | ||
1346 | ExtendedLandData data = (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), delegate(string id) { | 1348 | ExtendedLandData data = |
1347 | UUID parcel = UUID.Zero; | 1349 | (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), |
1348 | UUID.TryParse(id, out parcel); | 1350 | delegate(string id) |
1349 | // assume we've got the parcelID we just computed in RemoteParcelRequest | 1351 | { |
1350 | ExtendedLandData extLandData = new ExtendedLandData(); | 1352 | UUID parcel = UUID.Zero; |
1351 | Util.ParseFakeParcelID(parcel, out extLandData.regionHandle, out extLandData.x, out extLandData.y); | 1353 | UUID.TryParse(id, out parcel); |
1352 | m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", | 1354 | // assume we've got the parcelID we just computed in RemoteParcelRequest |
1353 | extLandData.regionHandle, extLandData.x, extLandData.y); | 1355 | ExtendedLandData extLandData = new ExtendedLandData(); |
1354 | 1356 | Util.ParseFakeParcelID(parcel, out extLandData.RegionHandle, | |
1355 | // for this region or for somewhere else? | 1357 | out extLandData.X, out extLandData.Y); |
1356 | if (extLandData.regionHandle == m_scene.RegionInfo.RegionHandle) | 1358 | m_log.DebugFormat("[LAND] got parcelinfo request for regionHandle {0}, x/y {1}/{2}", |
1357 | { | 1359 | extLandData.RegionHandle, extLandData.X, extLandData.Y); |
1358 | extLandData.landData = this.GetLandObject(extLandData.x, extLandData.y).landData; | 1360 | |
1359 | } | 1361 | // for this region or for somewhere else? |
1360 | else | 1362 | if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) |
1361 | { | 1363 | { |
1362 | extLandData.landData = m_scene.CommsManager.GridService.RequestLandData(extLandData.regionHandle, | 1364 | extLandData.LandData = this.GetLandObject(extLandData.X, extLandData.Y).LandData; |
1363 | extLandData.x, | 1365 | } |
1364 | extLandData.y); | 1366 | else |
1365 | if (extLandData.landData == null) | 1367 | { |
1366 | { | 1368 | ILandService landService = m_scene.RequestModuleInterface<ILandService>(); |
1367 | // we didn't find the region/land => don't cache | 1369 | extLandData.LandData = landService.GetLandData(extLandData.RegionHandle, |
1368 | return null; | 1370 | extLandData.X, |
1369 | } | 1371 | extLandData.Y); |
1370 | } | 1372 | if (extLandData.LandData == null) |
1371 | return extLandData; | 1373 | { |
1372 | }); | 1374 | // we didn't find the region/land => don't cache |
1375 | return null; | ||
1376 | } | ||
1377 | } | ||
1378 | return extLandData; | ||
1379 | }); | ||
1373 | 1380 | ||
1374 | if (data != null) // if we found some data, send it | 1381 | if (data != null) // if we found some data, send it |
1375 | { | 1382 | { |
1376 | RegionInfo info; | 1383 | GridRegion info; |
1377 | if (data.regionHandle == m_scene.RegionInfo.RegionHandle) | 1384 | if (data.RegionHandle == m_scene.RegionInfo.RegionHandle) |
1378 | { | 1385 | { |
1379 | info = m_scene.RegionInfo; | 1386 | info = new GridRegion(m_scene.RegionInfo); |
1380 | } | 1387 | } |
1381 | else | 1388 | else |
1382 | { | 1389 | { |
1383 | // most likely still cached from building the extLandData entry | 1390 | // most likely still cached from building the extLandData entry |
1384 | info = m_scene.CommsManager.GridService.RequestNeighbourInfo(data.regionHandle); | 1391 | uint x = 0, y = 0; |
1392 | Utils.LongToUInts(data.RegionHandle, out x, out y); | ||
1393 | info = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); | ||
1385 | } | 1394 | } |
1386 | // we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark. | 1395 | // we need to transfer the fake parcelID, not the one in landData, so the viewer can match it to the landmark. |
1387 | m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...", | 1396 | m_log.DebugFormat("[LAND] got parcelinfo for parcel {0} in region {1}; sending...", |
1388 | data.landData.Name, data.regionHandle); | 1397 | data.LandData.Name, data.RegionHandle); |
1389 | remoteClient.SendParcelInfo(info, data.landData, parcelID, data.x, data.y); | 1398 | // HACK for now |
1399 | RegionInfo r = new RegionInfo(); | ||
1400 | r.RegionName = info.RegionName; | ||
1401 | r.RegionLocX = (uint)info.RegionLocX; | ||
1402 | r.RegionLocY = (uint)info.RegionLocY; | ||
1403 | remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y); | ||
1390 | } | 1404 | } |
1391 | else | 1405 | else |
1392 | m_log.Debug("[LAND] got no parcelinfo; not sending"); | 1406 | m_log.Debug("[LAND] got no parcelinfo; not sending"); |
@@ -1405,9 +1419,9 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1405 | if (!m_scene.Permissions.CanEditParcel(remoteClient.AgentId, land)) | 1419 | if (!m_scene.Permissions.CanEditParcel(remoteClient.AgentId, land)) |
1406 | return; | 1420 | return; |
1407 | 1421 | ||
1408 | land.landData.OtherCleanTime = otherCleanTime; | 1422 | land.LandData.OtherCleanTime = otherCleanTime; |
1409 | 1423 | ||
1410 | UpdateLandObject(localID, land.landData); | 1424 | UpdateLandObject(localID, land.LandData); |
1411 | } | 1425 | } |
1412 | } | 1426 | } |
1413 | } | 1427 | } |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 2701f60..b9b7da5 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -53,7 +53,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
53 | protected Scene m_scene; | 53 | protected Scene m_scene; |
54 | protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>(); | 54 | protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>(); |
55 | 55 | ||
56 | public bool[,] landBitmap | 56 | public bool[,] LandBitmap |
57 | { | 57 | { |
58 | get { return m_landBitmap; } | 58 | get { return m_landBitmap; } |
59 | set { m_landBitmap = value; } | 59 | set { m_landBitmap = value; } |
@@ -63,14 +63,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
63 | 63 | ||
64 | #region ILandObject Members | 64 | #region ILandObject Members |
65 | 65 | ||
66 | public LandData landData | 66 | public LandData LandData |
67 | { | 67 | { |
68 | get { return m_landData; } | 68 | get { return m_landData; } |
69 | 69 | ||
70 | set { m_landData = value; } | 70 | set { m_landData = value; } |
71 | } | 71 | } |
72 | 72 | ||
73 | public UUID regionUUID | 73 | public UUID RegionUUID |
74 | { | 74 | { |
75 | get { return m_scene.RegionInfo.RegionID; } | 75 | get { return m_scene.RegionInfo.RegionID; } |
76 | } | 76 | } |
@@ -80,8 +80,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
80 | public LandObject(UUID owner_id, bool is_group_owned, Scene scene) | 80 | public LandObject(UUID owner_id, bool is_group_owned, Scene scene) |
81 | { | 81 | { |
82 | m_scene = scene; | 82 | m_scene = scene; |
83 | landData.OwnerID = owner_id; | 83 | LandData.OwnerID = owner_id; |
84 | landData.IsGroupOwned = is_group_owned; | 84 | LandData.IsGroupOwned = is_group_owned; |
85 | } | 85 | } |
86 | 86 | ||
87 | #endregion | 87 | #endregion |
@@ -96,11 +96,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
96 | /// <param name="x"></param> | 96 | /// <param name="x"></param> |
97 | /// <param name="y"></param> | 97 | /// <param name="y"></param> |
98 | /// <returns>Returns true if the piece of land contains the specified point</returns> | 98 | /// <returns>Returns true if the piece of land contains the specified point</returns> |
99 | public bool containsPoint(int x, int y) | 99 | public bool ContainsPoint(int x, int y) |
100 | { | 100 | { |
101 | if (x >= 0 && y >= 0 && x <= Constants.RegionSize && x <= Constants.RegionSize) | 101 | if (x >= 0 && y >= 0 && x <= Constants.RegionSize && x <= Constants.RegionSize) |
102 | { | 102 | { |
103 | return (landBitmap[x / 4, y / 4] == true); | 103 | return (LandBitmap[x / 4, y / 4] == true); |
104 | } | 104 | } |
105 | else | 105 | else |
106 | { | 106 | { |
@@ -110,11 +110,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
110 | 110 | ||
111 | public ILandObject Copy() | 111 | public ILandObject Copy() |
112 | { | 112 | { |
113 | ILandObject newLand = new LandObject(landData.OwnerID, landData.IsGroupOwned, m_scene); | 113 | ILandObject newLand = new LandObject(LandData.OwnerID, LandData.IsGroupOwned, m_scene); |
114 | 114 | ||
115 | //Place all new variables here! | 115 | //Place all new variables here! |
116 | newLand.landBitmap = (bool[,]) (landBitmap.Clone()); | 116 | newLand.LandBitmap = (bool[,]) (LandBitmap.Clone()); |
117 | newLand.landData = landData.Copy(); | 117 | newLand.LandData = LandData.Copy(); |
118 | 118 | ||
119 | return newLand; | 119 | return newLand; |
120 | } | 120 | } |
@@ -122,16 +122,16 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
122 | static overrideParcelMaxPrimCountDelegate overrideParcelMaxPrimCount; | 122 | static overrideParcelMaxPrimCountDelegate overrideParcelMaxPrimCount; |
123 | static overrideSimulatorMaxPrimCountDelegate overrideSimulatorMaxPrimCount; | 123 | static overrideSimulatorMaxPrimCountDelegate overrideSimulatorMaxPrimCount; |
124 | 124 | ||
125 | public void setParcelObjectMaxOverride(overrideParcelMaxPrimCountDelegate overrideDel) | 125 | public void SetParcelObjectMaxOverride(overrideParcelMaxPrimCountDelegate overrideDel) |
126 | { | 126 | { |
127 | overrideParcelMaxPrimCount = overrideDel; | 127 | overrideParcelMaxPrimCount = overrideDel; |
128 | } | 128 | } |
129 | public void setSimulatorObjectMaxOverride(overrideSimulatorMaxPrimCountDelegate overrideDel) | 129 | public void SetSimulatorObjectMaxOverride(overrideSimulatorMaxPrimCountDelegate overrideDel) |
130 | { | 130 | { |
131 | overrideSimulatorMaxPrimCount = overrideDel; | 131 | overrideSimulatorMaxPrimCount = overrideDel; |
132 | } | 132 | } |
133 | 133 | ||
134 | public int getParcelMaxPrimCount(ILandObject thisObject) | 134 | public int GetParcelMaxPrimCount(ILandObject thisObject) |
135 | { | 135 | { |
136 | if (overrideParcelMaxPrimCount != null) | 136 | if (overrideParcelMaxPrimCount != null) |
137 | { | 137 | { |
@@ -141,11 +141,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
141 | { | 141 | { |
142 | //Normal Calculations | 142 | //Normal Calculations |
143 | return Convert.ToInt32( | 143 | return Convert.ToInt32( |
144 | Math.Round((Convert.ToDecimal(landData.Area) / Convert.ToDecimal(65536)) * m_scene.objectCapacity * | 144 | Math.Round((Convert.ToDecimal(LandData.Area) / Convert.ToDecimal(65536)) * m_scene.objectCapacity * |
145 | Convert.ToDecimal(m_scene.RegionInfo.RegionSettings.ObjectBonus))); ; | 145 | Convert.ToDecimal(m_scene.RegionInfo.RegionSettings.ObjectBonus))); ; |
146 | } | 146 | } |
147 | } | 147 | } |
148 | public int getSimulatorMaxPrimCount(ILandObject thisObject) | 148 | public int GetSimulatorMaxPrimCount(ILandObject thisObject) |
149 | { | 149 | { |
150 | if (overrideSimulatorMaxPrimCount != null) | 150 | if (overrideSimulatorMaxPrimCount != null) |
151 | { | 151 | { |
@@ -161,7 +161,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
161 | 161 | ||
162 | #region Packet Request Handling | 162 | #region Packet Request Handling |
163 | 163 | ||
164 | public void sendLandProperties(int sequence_id, bool snap_selection, int request_result, IClientAPI remote_client) | 164 | public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, IClientAPI remote_client) |
165 | { | 165 | { |
166 | IEstateModule estateModule = m_scene.RequestModuleInterface<IEstateModule>(); | 166 | IEstateModule estateModule = m_scene.RequestModuleInterface<IEstateModule>(); |
167 | uint regionFlags = 336723974 & ~((uint)(RegionFlags.AllowLandmark | RegionFlags.AllowSetHome)); | 167 | uint regionFlags = 336723974 & ~((uint)(RegionFlags.AllowLandmark | RegionFlags.AllowSetHome)); |
@@ -175,18 +175,18 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
175 | // if (landData.OwnerID == remote_client.AgentId) | 175 | // if (landData.OwnerID == remote_client.AgentId) |
176 | // regionFlags |= (uint)RegionFlags.AllowSetHome; | 176 | // regionFlags |= (uint)RegionFlags.AllowSetHome; |
177 | remote_client.SendLandProperties(sequence_id, | 177 | remote_client.SendLandProperties(sequence_id, |
178 | snap_selection, request_result, landData, | 178 | snap_selection, request_result, LandData, |
179 | (float)m_scene.RegionInfo.RegionSettings.ObjectBonus, | 179 | (float)m_scene.RegionInfo.RegionSettings.ObjectBonus, |
180 | getParcelMaxPrimCount(this), | 180 | GetParcelMaxPrimCount(this), |
181 | getSimulatorMaxPrimCount(this), regionFlags); | 181 | GetSimulatorMaxPrimCount(this), regionFlags); |
182 | } | 182 | } |
183 | 183 | ||
184 | public void updateLandProperties(LandUpdateArgs args, IClientAPI remote_client) | 184 | public void UpdateLandProperties(LandUpdateArgs args, IClientAPI remote_client) |
185 | { | 185 | { |
186 | if (m_scene.Permissions.CanEditParcel(remote_client.AgentId,this)) | 186 | if (m_scene.Permissions.CanEditParcel(remote_client.AgentId,this)) |
187 | { | 187 | { |
188 | //Needs later group support | 188 | //Needs later group support |
189 | LandData newData = landData.Copy(); | 189 | LandData newData = LandData.Copy(); |
190 | 190 | ||
191 | if (args.AuthBuyerID != newData.AuthBuyerID || args.SalePrice != newData.SalePrice) | 191 | if (args.AuthBuyerID != newData.AuthBuyerID || args.SalePrice != newData.SalePrice) |
192 | { | 192 | { |
@@ -212,15 +212,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
212 | newData.UserLocation = args.UserLocation; | 212 | newData.UserLocation = args.UserLocation; |
213 | newData.UserLookAt = args.UserLookAt; | 213 | newData.UserLookAt = args.UserLookAt; |
214 | 214 | ||
215 | m_scene.LandChannel.UpdateLandObject(landData.LocalID, newData); | 215 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
216 | 216 | ||
217 | sendLandUpdateToAvatarsOverMe(); | 217 | SendLandUpdateToAvatarsOverMe(); |
218 | } | 218 | } |
219 | } | 219 | } |
220 | 220 | ||
221 | public void updateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area) | 221 | public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area) |
222 | { | 222 | { |
223 | LandData newData = landData.Copy(); | 223 | LandData newData = LandData.Copy(); |
224 | newData.OwnerID = avatarID; | 224 | newData.OwnerID = avatarID; |
225 | newData.GroupID = groupID; | 225 | newData.GroupID = groupID; |
226 | newData.IsGroupOwned = groupOwned; | 226 | newData.IsGroupOwned = groupOwned; |
@@ -230,45 +230,45 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
230 | newData.SalePrice = 0; | 230 | newData.SalePrice = 0; |
231 | newData.AuthBuyerID = UUID.Zero; | 231 | newData.AuthBuyerID = UUID.Zero; |
232 | newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects); | 232 | newData.Flags &= ~(uint) (ParcelFlags.ForSale | ParcelFlags.ForSaleObjects | ParcelFlags.SellParcelObjects); |
233 | m_scene.LandChannel.UpdateLandObject(landData.LocalID, newData); | 233 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
234 | 234 | ||
235 | sendLandUpdateToAvatarsOverMe(); | 235 | SendLandUpdateToAvatarsOverMe(); |
236 | } | 236 | } |
237 | 237 | ||
238 | public void deedToGroup(UUID groupID) | 238 | public void DeedToGroup(UUID groupID) |
239 | { | 239 | { |
240 | LandData newData = landData.Copy(); | 240 | LandData newData = LandData.Copy(); |
241 | newData.OwnerID = groupID; | 241 | newData.OwnerID = groupID; |
242 | newData.GroupID = groupID; | 242 | newData.GroupID = groupID; |
243 | newData.IsGroupOwned = true; | 243 | newData.IsGroupOwned = true; |
244 | 244 | ||
245 | m_scene.LandChannel.UpdateLandObject(landData.LocalID, newData); | 245 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
246 | 246 | ||
247 | sendLandUpdateToAvatarsOverMe(); | 247 | SendLandUpdateToAvatarsOverMe(); |
248 | } | 248 | } |
249 | 249 | ||
250 | public bool isEitherBannedOrRestricted(UUID avatar) | 250 | public bool IsEitherBannedOrRestricted(UUID avatar) |
251 | { | 251 | { |
252 | if (isBannedFromLand(avatar)) | 252 | if (IsBannedFromLand(avatar)) |
253 | { | 253 | { |
254 | return true; | 254 | return true; |
255 | } | 255 | } |
256 | else if (isRestrictedFromLand(avatar)) | 256 | else if (IsRestrictedFromLand(avatar)) |
257 | { | 257 | { |
258 | return true; | 258 | return true; |
259 | } | 259 | } |
260 | return false; | 260 | return false; |
261 | } | 261 | } |
262 | 262 | ||
263 | public bool isBannedFromLand(UUID avatar) | 263 | public bool IsBannedFromLand(UUID avatar) |
264 | { | 264 | { |
265 | if ((landData.Flags & (uint) ParcelFlags.UseBanList) > 0) | 265 | if ((LandData.Flags & (uint) ParcelFlags.UseBanList) > 0) |
266 | { | 266 | { |
267 | ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); | 267 | ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); |
268 | entry.AgentID = avatar; | 268 | entry.AgentID = avatar; |
269 | entry.Flags = AccessList.Ban; | 269 | entry.Flags = AccessList.Ban; |
270 | entry.Time = new DateTime(); | 270 | entry.Time = new DateTime(); |
271 | if (landData.ParcelAccessList.Contains(entry)) | 271 | if (LandData.ParcelAccessList.Contains(entry)) |
272 | { | 272 | { |
273 | //They are banned, so lets send them a notice about this parcel | 273 | //They are banned, so lets send them a notice about this parcel |
274 | return true; | 274 | return true; |
@@ -277,15 +277,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
277 | return false; | 277 | return false; |
278 | } | 278 | } |
279 | 279 | ||
280 | public bool isRestrictedFromLand(UUID avatar) | 280 | public bool IsRestrictedFromLand(UUID avatar) |
281 | { | 281 | { |
282 | if ((landData.Flags & (uint) ParcelFlags.UseAccessList) > 0) | 282 | if ((LandData.Flags & (uint) ParcelFlags.UseAccessList) > 0) |
283 | { | 283 | { |
284 | ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); | 284 | ParcelManager.ParcelAccessEntry entry = new ParcelManager.ParcelAccessEntry(); |
285 | entry.AgentID = avatar; | 285 | entry.AgentID = avatar; |
286 | entry.Flags = AccessList.Access; | 286 | entry.Flags = AccessList.Access; |
287 | entry.Time = new DateTime(); | 287 | entry.Time = new DateTime(); |
288 | if (!landData.ParcelAccessList.Contains(entry)) | 288 | if (!LandData.ParcelAccessList.Contains(entry)) |
289 | { | 289 | { |
290 | //They are not allowed in this parcel, but not banned, so lets send them a notice about this parcel | 290 | //They are not allowed in this parcel, but not banned, so lets send them a notice about this parcel |
291 | return true; | 291 | return true; |
@@ -294,12 +294,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
294 | return false; | 294 | return false; |
295 | } | 295 | } |
296 | 296 | ||
297 | public void sendLandUpdateToClient(IClientAPI remote_client) | 297 | public void SendLandUpdateToClient(IClientAPI remote_client) |
298 | { | 298 | { |
299 | sendLandProperties(0, false, 0, remote_client); | 299 | SendLandProperties(0, false, 0, remote_client); |
300 | } | 300 | } |
301 | 301 | ||
302 | public void sendLandUpdateToAvatarsOverMe() | 302 | public void SendLandUpdateToAvatarsOverMe() |
303 | { | 303 | { |
304 | List<ScenePresence> avatars = m_scene.GetAvatars(); | 304 | List<ScenePresence> avatars = m_scene.GetAvatars(); |
305 | ILandObject over = null; | 305 | ILandObject over = null; |
@@ -319,14 +319,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
319 | 319 | ||
320 | if (over != null) | 320 | if (over != null) |
321 | { | 321 | { |
322 | if (over.landData.LocalID == landData.LocalID) | 322 | if (over.LandData.LocalID == LandData.LocalID) |
323 | { | 323 | { |
324 | if (((over.landData.Flags & (uint)ParcelFlags.AllowDamage) != 0) && m_scene.RegionInfo.RegionSettings.AllowDamage) | 324 | if (((over.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0) && |
325 | m_scene.RegionInfo.RegionSettings.AllowDamage) | ||
325 | avatars[i].Invulnerable = false; | 326 | avatars[i].Invulnerable = false; |
326 | else | 327 | else |
327 | avatars[i].Invulnerable = true; | 328 | avatars[i].Invulnerable = true; |
328 | 329 | ||
329 | sendLandUpdateToClient(avatars[i].ControllingClient); | 330 | SendLandUpdateToClient(avatars[i].ControllingClient); |
330 | } | 331 | } |
331 | } | 332 | } |
332 | } | 333 | } |
@@ -336,10 +337,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
336 | 337 | ||
337 | #region AccessList Functions | 338 | #region AccessList Functions |
338 | 339 | ||
339 | public List<UUID> createAccessListArrayByFlag(AccessList flag) | 340 | public List<UUID> CreateAccessListArrayByFlag(AccessList flag) |
340 | { | 341 | { |
341 | List<UUID> list = new List<UUID>(); | 342 | List<UUID> list = new List<UUID>(); |
342 | foreach (ParcelManager.ParcelAccessEntry entry in landData.ParcelAccessList) | 343 | foreach (ParcelManager.ParcelAccessEntry entry in LandData.ParcelAccessList) |
343 | { | 344 | { |
344 | if (entry.Flags == flag) | 345 | if (entry.Flags == flag) |
345 | { | 346 | { |
@@ -354,26 +355,26 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
354 | return list; | 355 | return list; |
355 | } | 356 | } |
356 | 357 | ||
357 | public void sendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, | 358 | public void SendAccessList(UUID agentID, UUID sessionID, uint flags, int sequenceID, |
358 | IClientAPI remote_client) | 359 | IClientAPI remote_client) |
359 | { | 360 | { |
360 | 361 | ||
361 | if (flags == (uint) AccessList.Access || flags == (uint) AccessList.Both) | 362 | if (flags == (uint) AccessList.Access || flags == (uint) AccessList.Both) |
362 | { | 363 | { |
363 | List<UUID> avatars = createAccessListArrayByFlag(AccessList.Access); | 364 | List<UUID> avatars = CreateAccessListArrayByFlag(AccessList.Access); |
364 | remote_client.SendLandAccessListData(avatars,(uint) AccessList.Access,landData.LocalID); | 365 | remote_client.SendLandAccessListData(avatars,(uint) AccessList.Access,LandData.LocalID); |
365 | } | 366 | } |
366 | 367 | ||
367 | if (flags == (uint) AccessList.Ban || flags == (uint) AccessList.Both) | 368 | if (flags == (uint) AccessList.Ban || flags == (uint) AccessList.Both) |
368 | { | 369 | { |
369 | List<UUID> avatars = createAccessListArrayByFlag(AccessList.Ban); | 370 | List<UUID> avatars = CreateAccessListArrayByFlag(AccessList.Ban); |
370 | remote_client.SendLandAccessListData(avatars, (uint)AccessList.Ban, landData.LocalID); | 371 | remote_client.SendLandAccessListData(avatars, (uint)AccessList.Ban, LandData.LocalID); |
371 | } | 372 | } |
372 | } | 373 | } |
373 | 374 | ||
374 | public void updateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client) | 375 | public void UpdateAccessList(uint flags, List<ParcelManager.ParcelAccessEntry> entries, IClientAPI remote_client) |
375 | { | 376 | { |
376 | LandData newData = landData.Copy(); | 377 | LandData newData = LandData.Copy(); |
377 | 378 | ||
378 | if (entries.Count == 1 && entries[0].AgentID == UUID.Zero) | 379 | if (entries.Count == 1 && entries[0].AgentID == UUID.Zero) |
379 | { | 380 | { |
@@ -406,36 +407,36 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
406 | } | 407 | } |
407 | } | 408 | } |
408 | 409 | ||
409 | m_scene.LandChannel.UpdateLandObject(landData.LocalID, newData); | 410 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); |
410 | } | 411 | } |
411 | 412 | ||
412 | #endregion | 413 | #endregion |
413 | 414 | ||
414 | #region Update Functions | 415 | #region Update Functions |
415 | 416 | ||
416 | public void updateLandBitmapByteArray() | 417 | public void UpdateLandBitmapByteArray() |
417 | { | 418 | { |
418 | landData.Bitmap = convertLandBitmapToBytes(); | 419 | LandData.Bitmap = ConvertLandBitmapToBytes(); |
419 | } | 420 | } |
420 | 421 | ||
421 | /// <summary> | 422 | /// <summary> |
422 | /// Update all settings in land such as area, bitmap byte array, etc | 423 | /// Update all settings in land such as area, bitmap byte array, etc |
423 | /// </summary> | 424 | /// </summary> |
424 | public void forceUpdateLandInfo() | 425 | public void ForceUpdateLandInfo() |
425 | { | 426 | { |
426 | updateAABBAndAreaValues(); | 427 | UpdateAABBAndAreaValues(); |
427 | updateLandBitmapByteArray(); | 428 | UpdateLandBitmapByteArray(); |
428 | } | 429 | } |
429 | 430 | ||
430 | public void setLandBitmapFromByteArray() | 431 | public void SetLandBitmapFromByteArray() |
431 | { | 432 | { |
432 | landBitmap = convertBytesToLandBitmap(); | 433 | LandBitmap = ConvertBytesToLandBitmap(); |
433 | } | 434 | } |
434 | 435 | ||
435 | /// <summary> | 436 | /// <summary> |
436 | /// Updates the AABBMin and AABBMax values after area/shape modification of the land object | 437 | /// Updates the AABBMin and AABBMax values after area/shape modification of the land object |
437 | /// </summary> | 438 | /// </summary> |
438 | private void updateAABBAndAreaValues() | 439 | private void UpdateAABBAndAreaValues() |
439 | { | 440 | { |
440 | int min_x = 64; | 441 | int min_x = 64; |
441 | int min_y = 64; | 442 | int min_y = 64; |
@@ -447,7 +448,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
447 | { | 448 | { |
448 | for (y = 0; y < 64; y++) | 449 | for (y = 0; y < 64; y++) |
449 | { | 450 | { |
450 | if (landBitmap[x, y] == true) | 451 | if (LandBitmap[x, y] == true) |
451 | { | 452 | { |
452 | if (min_x > x) min_x = x; | 453 | if (min_x > x) min_x = x; |
453 | if (min_y > y) min_y = y; | 454 | if (min_y > y) min_y = y; |
@@ -463,7 +464,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
463 | int ty = min_y * 4; | 464 | int ty = min_y * 4; |
464 | if (ty > ((int)Constants.RegionSize - 1)) | 465 | if (ty > ((int)Constants.RegionSize - 1)) |
465 | ty = ((int)Constants.RegionSize - 1); | 466 | ty = ((int)Constants.RegionSize - 1); |
466 | landData.AABBMin = | 467 | LandData.AABBMin = |
467 | new Vector3((float) (min_x * 4), (float) (min_y * 4), | 468 | new Vector3((float) (min_x * 4), (float) (min_y * 4), |
468 | (float) m_scene.Heightmap[tx, ty]); | 469 | (float) m_scene.Heightmap[tx, ty]); |
469 | 470 | ||
@@ -473,10 +474,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
473 | ty = max_y * 4; | 474 | ty = max_y * 4; |
474 | if (ty > ((int)Constants.RegionSize - 1)) | 475 | if (ty > ((int)Constants.RegionSize - 1)) |
475 | ty = ((int)Constants.RegionSize - 1); | 476 | ty = ((int)Constants.RegionSize - 1); |
476 | landData.AABBMax = | 477 | LandData.AABBMax = |
477 | new Vector3((float) (max_x * 4), (float) (max_y * 4), | 478 | new Vector3((float) (max_x * 4), (float) (max_y * 4), |
478 | (float) m_scene.Heightmap[tx, ty]); | 479 | (float) m_scene.Heightmap[tx, ty]); |
479 | landData.Area = tempArea; | 480 | LandData.Area = tempArea; |
480 | } | 481 | } |
481 | 482 | ||
482 | #endregion | 483 | #endregion |
@@ -487,7 +488,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
487 | /// Sets the land's bitmap manually | 488 | /// Sets the land's bitmap manually |
488 | /// </summary> | 489 | /// </summary> |
489 | /// <param name="bitmap">64x64 block representing where this land is on a map</param> | 490 | /// <param name="bitmap">64x64 block representing where this land is on a map</param> |
490 | public void setLandBitmap(bool[,] bitmap) | 491 | public void SetLandBitmap(bool[,] bitmap) |
491 | { | 492 | { |
492 | if (bitmap.GetLength(0) != 64 || bitmap.GetLength(1) != 64 || bitmap.Rank != 2) | 493 | if (bitmap.GetLength(0) != 64 || bitmap.GetLength(1) != 64 || bitmap.Rank != 2) |
493 | { | 494 | { |
@@ -497,8 +498,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
497 | else | 498 | else |
498 | { | 499 | { |
499 | //Valid: Lets set it | 500 | //Valid: Lets set it |
500 | landBitmap = bitmap; | 501 | LandBitmap = bitmap; |
501 | forceUpdateLandInfo(); | 502 | ForceUpdateLandInfo(); |
502 | } | 503 | } |
503 | } | 504 | } |
504 | 505 | ||
@@ -506,18 +507,18 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
506 | /// Gets the land's bitmap manually | 507 | /// Gets the land's bitmap manually |
507 | /// </summary> | 508 | /// </summary> |
508 | /// <returns></returns> | 509 | /// <returns></returns> |
509 | public bool[,] getLandBitmap() | 510 | public bool[,] GetLandBitmap() |
510 | { | 511 | { |
511 | return landBitmap; | 512 | return LandBitmap; |
512 | } | 513 | } |
513 | 514 | ||
514 | /// <summary> | 515 | /// <summary> |
515 | /// Full sim land object creation | 516 | /// Full sim land object creation |
516 | /// </summary> | 517 | /// </summary> |
517 | /// <returns></returns> | 518 | /// <returns></returns> |
518 | public bool[,] basicFullRegionLandBitmap() | 519 | public bool[,] BasicFullRegionLandBitmap() |
519 | { | 520 | { |
520 | return getSquareLandBitmap(0, 0, (int) Constants.RegionSize, (int) Constants.RegionSize); | 521 | return GetSquareLandBitmap(0, 0, (int) Constants.RegionSize, (int) Constants.RegionSize); |
521 | } | 522 | } |
522 | 523 | ||
523 | /// <summary> | 524 | /// <summary> |
@@ -528,12 +529,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
528 | /// <param name="end_x"></param> | 529 | /// <param name="end_x"></param> |
529 | /// <param name="end_y"></param> | 530 | /// <param name="end_y"></param> |
530 | /// <returns></returns> | 531 | /// <returns></returns> |
531 | public bool[,] getSquareLandBitmap(int start_x, int start_y, int end_x, int end_y) | 532 | public bool[,] GetSquareLandBitmap(int start_x, int start_y, int end_x, int end_y) |
532 | { | 533 | { |
533 | bool[,] tempBitmap = new bool[64,64]; | 534 | bool[,] tempBitmap = new bool[64,64]; |
534 | tempBitmap.Initialize(); | 535 | tempBitmap.Initialize(); |
535 | 536 | ||
536 | tempBitmap = modifyLandBitmapSquare(tempBitmap, start_x, start_y, end_x, end_y, true); | 537 | tempBitmap = ModifyLandBitmapSquare(tempBitmap, start_x, start_y, end_x, end_y, true); |
537 | return tempBitmap; | 538 | return tempBitmap; |
538 | } | 539 | } |
539 | 540 | ||
@@ -547,7 +548,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
547 | /// <param name="end_y"></param> | 548 | /// <param name="end_y"></param> |
548 | /// <param name="set_value"></param> | 549 | /// <param name="set_value"></param> |
549 | /// <returns></returns> | 550 | /// <returns></returns> |
550 | public bool[,] modifyLandBitmapSquare(bool[,] land_bitmap, int start_x, int start_y, int end_x, int end_y, | 551 | public bool[,] ModifyLandBitmapSquare(bool[,] land_bitmap, int start_x, int start_y, int end_x, int end_y, |
551 | bool set_value) | 552 | bool set_value) |
552 | { | 553 | { |
553 | if (land_bitmap.GetLength(0) != 64 || land_bitmap.GetLength(1) != 64 || land_bitmap.Rank != 2) | 554 | if (land_bitmap.GetLength(0) != 64 || land_bitmap.GetLength(1) != 64 || land_bitmap.Rank != 2) |
@@ -577,7 +578,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
577 | /// <param name="bitmap_base"></param> | 578 | /// <param name="bitmap_base"></param> |
578 | /// <param name="bitmap_add"></param> | 579 | /// <param name="bitmap_add"></param> |
579 | /// <returns></returns> | 580 | /// <returns></returns> |
580 | public bool[,] mergeLandBitmaps(bool[,] bitmap_base, bool[,] bitmap_add) | 581 | public bool[,] MergeLandBitmaps(bool[,] bitmap_base, bool[,] bitmap_add) |
581 | { | 582 | { |
582 | if (bitmap_base.GetLength(0) != 64 || bitmap_base.GetLength(1) != 64 || bitmap_base.Rank != 2) | 583 | if (bitmap_base.GetLength(0) != 64 || bitmap_base.GetLength(1) != 64 || bitmap_base.Rank != 2) |
583 | { | 584 | { |
@@ -608,7 +609,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
608 | /// Converts the land bitmap to a packet friendly byte array | 609 | /// Converts the land bitmap to a packet friendly byte array |
609 | /// </summary> | 610 | /// </summary> |
610 | /// <returns></returns> | 611 | /// <returns></returns> |
611 | private byte[] convertLandBitmapToBytes() | 612 | private byte[] ConvertLandBitmapToBytes() |
612 | { | 613 | { |
613 | byte[] tempConvertArr = new byte[512]; | 614 | byte[] tempConvertArr = new byte[512]; |
614 | byte tempByte = 0; | 615 | byte tempByte = 0; |
@@ -618,7 +619,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
618 | { | 619 | { |
619 | for (x = 0; x < 64; x++) | 620 | for (x = 0; x < 64; x++) |
620 | { | 621 | { |
621 | tempByte = Convert.ToByte(tempByte | Convert.ToByte(landBitmap[x, y]) << (i++ % 8)); | 622 | tempByte = Convert.ToByte(tempByte | Convert.ToByte(LandBitmap[x, y]) << (i++ % 8)); |
622 | if (i % 8 == 0) | 623 | if (i % 8 == 0) |
623 | { | 624 | { |
624 | tempConvertArr[byteNum] = tempByte; | 625 | tempConvertArr[byteNum] = tempByte; |
@@ -631,7 +632,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
631 | return tempConvertArr; | 632 | return tempConvertArr; |
632 | } | 633 | } |
633 | 634 | ||
634 | private bool[,] convertBytesToLandBitmap() | 635 | private bool[,] ConvertBytesToLandBitmap() |
635 | { | 636 | { |
636 | bool[,] tempConvertMap = new bool[landArrayMax, landArrayMax]; | 637 | bool[,] tempConvertMap = new bool[landArrayMax, landArrayMax]; |
637 | tempConvertMap.Initialize(); | 638 | tempConvertMap.Initialize(); |
@@ -639,7 +640,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
639 | int x = 0, y = 0, i = 0, bitNum = 0; | 640 | int x = 0, y = 0, i = 0, bitNum = 0; |
640 | for (i = 0; i < 512; i++) | 641 | for (i = 0; i < 512; i++) |
641 | { | 642 | { |
642 | tempByte = landData.Bitmap[i]; | 643 | tempByte = LandData.Bitmap[i]; |
643 | for (bitNum = 0; bitNum < 8; bitNum++) | 644 | for (bitNum = 0; bitNum < 8; bitNum++) |
644 | { | 645 | { |
645 | bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte) 1); | 646 | bool bit = Convert.ToBoolean(Convert.ToByte(tempByte >> bitNum) & (byte) 1); |
@@ -659,7 +660,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
659 | 660 | ||
660 | #region Object Select and Object Owner Listing | 661 | #region Object Select and Object Owner Listing |
661 | 662 | ||
662 | public void sendForceObjectSelect(int local_id, int request_type, List<UUID> returnIDs, IClientAPI remote_client) | 663 | public void SendForceObjectSelect(int local_id, int request_type, List<UUID> returnIDs, IClientAPI remote_client) |
663 | { | 664 | { |
664 | if (m_scene.Permissions.CanEditParcel(remote_client.AgentId, this)) | 665 | if (m_scene.Permissions.CanEditParcel(remote_client.AgentId, this)) |
665 | { | 666 | { |
@@ -672,11 +673,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
672 | { | 673 | { |
673 | if (obj.LocalId > 0) | 674 | if (obj.LocalId > 0) |
674 | { | 675 | { |
675 | if (request_type == LandChannel.LAND_SELECT_OBJECTS_OWNER && obj.OwnerID == landData.OwnerID) | 676 | if (request_type == LandChannel.LAND_SELECT_OBJECTS_OWNER && obj.OwnerID == LandData.OwnerID) |
676 | { | 677 | { |
677 | resultLocalIDs.Add(obj.LocalId); | 678 | resultLocalIDs.Add(obj.LocalId); |
678 | } | 679 | } |
679 | else if (request_type == LandChannel.LAND_SELECT_OBJECTS_GROUP && obj.GroupID == landData.GroupID && landData.GroupID != UUID.Zero) | 680 | else if (request_type == LandChannel.LAND_SELECT_OBJECTS_GROUP && obj.GroupID == LandData.GroupID && LandData.GroupID != UUID.Zero) |
680 | { | 681 | { |
681 | resultLocalIDs.Add(obj.LocalId); | 682 | resultLocalIDs.Add(obj.LocalId); |
682 | } | 683 | } |
@@ -709,7 +710,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
709 | /// <param name="remote_client"> | 710 | /// <param name="remote_client"> |
710 | /// A <see cref="IClientAPI"/> | 711 | /// A <see cref="IClientAPI"/> |
711 | /// </param> | 712 | /// </param> |
712 | public void sendLandObjectOwners(IClientAPI remote_client) | 713 | public void SendLandObjectOwners(IClientAPI remote_client) |
713 | { | 714 | { |
714 | if (m_scene.Permissions.CanEditParcel(remote_client.AgentId, this)) | 715 | if (m_scene.Permissions.CanEditParcel(remote_client.AgentId, this)) |
715 | { | 716 | { |
@@ -752,11 +753,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
752 | } | 753 | } |
753 | } | 754 | } |
754 | 755 | ||
755 | remote_client.SendLandObjectOwners(landData, groups, primCount); | 756 | remote_client.SendLandObjectOwners(LandData, groups, primCount); |
756 | } | 757 | } |
757 | } | 758 | } |
758 | 759 | ||
759 | public Dictionary<UUID, int> getLandObjectOwners() | 760 | public Dictionary<UUID, int> GetLandObjectOwners() |
760 | { | 761 | { |
761 | Dictionary<UUID, int> ownersAndCount = new Dictionary<UUID, int>(); | 762 | Dictionary<UUID, int> ownersAndCount = new Dictionary<UUID, int>(); |
762 | lock (primsOverMe) | 763 | lock (primsOverMe) |
@@ -786,14 +787,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
786 | 787 | ||
787 | #region Object Returning | 788 | #region Object Returning |
788 | 789 | ||
789 | public void returnObject(SceneObjectGroup obj) | 790 | public void ReturnObject(SceneObjectGroup obj) |
790 | { | 791 | { |
791 | SceneObjectGroup[] objs = new SceneObjectGroup[1]; | 792 | SceneObjectGroup[] objs = new SceneObjectGroup[1]; |
792 | objs[0] = obj; | 793 | objs[0] = obj; |
793 | m_scene.returnObjects(objs, obj.OwnerID); | 794 | m_scene.returnObjects(objs, obj.OwnerID); |
794 | } | 795 | } |
795 | 796 | ||
796 | public void returnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client) | 797 | public void ReturnLandObjects(uint type, UUID[] owners, UUID[] tasks, IClientAPI remote_client) |
797 | { | 798 | { |
798 | Dictionary<UUID,List<SceneObjectGroup>> returns = | 799 | Dictionary<UUID,List<SceneObjectGroup>> returns = |
799 | new Dictionary<UUID,List<SceneObjectGroup>>(); | 800 | new Dictionary<UUID,List<SceneObjectGroup>>(); |
@@ -869,19 +870,19 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
869 | 870 | ||
870 | #region Object Adding/Removing from Parcel | 871 | #region Object Adding/Removing from Parcel |
871 | 872 | ||
872 | public void resetLandPrimCounts() | 873 | public void ResetLandPrimCounts() |
873 | { | 874 | { |
874 | landData.GroupPrims = 0; | 875 | LandData.GroupPrims = 0; |
875 | landData.OwnerPrims = 0; | 876 | LandData.OwnerPrims = 0; |
876 | landData.OtherPrims = 0; | 877 | LandData.OtherPrims = 0; |
877 | landData.SelectedPrims = 0; | 878 | LandData.SelectedPrims = 0; |
878 | 879 | ||
879 | 880 | ||
880 | lock (primsOverMe) | 881 | lock (primsOverMe) |
881 | primsOverMe.Clear(); | 882 | primsOverMe.Clear(); |
882 | } | 883 | } |
883 | 884 | ||
884 | public void addPrimToCount(SceneObjectGroup obj) | 885 | public void AddPrimToCount(SceneObjectGroup obj) |
885 | { | 886 | { |
886 | 887 | ||
887 | UUID prim_owner = obj.OwnerID; | 888 | UUID prim_owner = obj.OwnerID; |
@@ -889,23 +890,23 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
889 | 890 | ||
890 | if (obj.IsSelected) | 891 | if (obj.IsSelected) |
891 | { | 892 | { |
892 | landData.SelectedPrims += prim_count; | 893 | LandData.SelectedPrims += prim_count; |
893 | } | 894 | } |
894 | else | 895 | else |
895 | { | 896 | { |
896 | if (prim_owner == landData.OwnerID) | 897 | if (prim_owner == LandData.OwnerID) |
897 | { | 898 | { |
898 | landData.OwnerPrims += prim_count; | 899 | LandData.OwnerPrims += prim_count; |
899 | } | 900 | } |
900 | else if ((obj.GroupID == landData.GroupID || | 901 | else if ((obj.GroupID == LandData.GroupID || |
901 | prim_owner == landData.GroupID) && | 902 | prim_owner == LandData.GroupID) && |
902 | landData.GroupID != UUID.Zero) | 903 | LandData.GroupID != UUID.Zero) |
903 | { | 904 | { |
904 | landData.GroupPrims += prim_count; | 905 | LandData.GroupPrims += prim_count; |
905 | } | 906 | } |
906 | else | 907 | else |
907 | { | 908 | { |
908 | landData.OtherPrims += prim_count; | 909 | LandData.OtherPrims += prim_count; |
909 | } | 910 | } |
910 | } | 911 | } |
911 | 912 | ||
@@ -913,7 +914,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
913 | primsOverMe.Add(obj); | 914 | primsOverMe.Add(obj); |
914 | } | 915 | } |
915 | 916 | ||
916 | public void removePrimFromCount(SceneObjectGroup obj) | 917 | public void RemovePrimFromCount(SceneObjectGroup obj) |
917 | { | 918 | { |
918 | lock (primsOverMe) | 919 | lock (primsOverMe) |
919 | { | 920 | { |
@@ -922,18 +923,18 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
922 | UUID prim_owner = obj.OwnerID; | 923 | UUID prim_owner = obj.OwnerID; |
923 | int prim_count = obj.PrimCount; | 924 | int prim_count = obj.PrimCount; |
924 | 925 | ||
925 | if (prim_owner == landData.OwnerID) | 926 | if (prim_owner == LandData.OwnerID) |
926 | { | 927 | { |
927 | landData.OwnerPrims -= prim_count; | 928 | LandData.OwnerPrims -= prim_count; |
928 | } | 929 | } |
929 | else if (obj.GroupID == landData.GroupID || | 930 | else if (obj.GroupID == LandData.GroupID || |
930 | prim_owner == landData.GroupID) | 931 | prim_owner == LandData.GroupID) |
931 | { | 932 | { |
932 | landData.GroupPrims -= prim_count; | 933 | LandData.GroupPrims -= prim_count; |
933 | } | 934 | } |
934 | else | 935 | else |
935 | { | 936 | { |
936 | landData.OtherPrims -= prim_count; | 937 | LandData.OtherPrims -= prim_count; |
937 | } | 938 | } |
938 | 939 | ||
939 | primsOverMe.Remove(obj); | 940 | primsOverMe.Remove(obj); |
@@ -953,8 +954,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
953 | /// <param name="url"></param> | 954 | /// <param name="url"></param> |
954 | public void SetMediaUrl(string url) | 955 | public void SetMediaUrl(string url) |
955 | { | 956 | { |
956 | landData.MediaURL = url; | 957 | LandData.MediaURL = url; |
957 | sendLandUpdateToAvatarsOverMe(); | 958 | SendLandUpdateToAvatarsOverMe(); |
958 | } | 959 | } |
959 | 960 | ||
960 | /// <summary> | 961 | /// <summary> |
@@ -963,8 +964,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
963 | /// <param name="url"></param> | 964 | /// <param name="url"></param> |
964 | public void SetMusicUrl(string url) | 965 | public void SetMusicUrl(string url) |
965 | { | 966 | { |
966 | landData.MusicURL = url; | 967 | LandData.MusicURL = url; |
967 | sendLandUpdateToAvatarsOverMe(); | 968 | SendLandUpdateToAvatarsOverMe(); |
968 | } | 969 | } |
969 | } | 970 | } |
970 | } | 971 | } |
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs index 65f22b1..2cbaf96 100644 --- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs +++ b/OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs | |||
@@ -85,7 +85,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
85 | private void LocalRezObject(IClientAPI remoteclient, UUID itemid, Vector3 rayend, Vector3 raystart, | 85 | private void LocalRezObject(IClientAPI remoteclient, UUID itemid, Vector3 rayend, Vector3 raystart, |
86 | UUID raytargetid, byte bypassraycast, bool rayendisintersection, bool rezselected, bool removeitem, | 86 | UUID raytargetid, byte bypassraycast, bool rayendisintersection, bool rezselected, bool removeitem, |
87 | UUID fromtaskid) | 87 | UUID fromtaskid) |
88 | { | 88 | { |
89 | int differenceX = (int)m_virtScene.RegionInfo.RegionLocX - (int)m_rootScene.RegionInfo.RegionLocX; | 89 | int differenceX = (int)m_virtScene.RegionInfo.RegionLocX - (int)m_rootScene.RegionInfo.RegionLocX; |
90 | int differenceY = (int)m_virtScene.RegionInfo.RegionLocY - (int)m_rootScene.RegionInfo.RegionLocY; | 90 | int differenceY = (int)m_virtScene.RegionInfo.RegionLocY - (int)m_rootScene.RegionInfo.RegionLocY; |
91 | rayend.X += differenceX * (int)Constants.RegionSize; | 91 | rayend.X += differenceX * (int)Constants.RegionSize; |
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs index 9e46b94..7df836c 100644 --- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs +++ b/OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs | |||
@@ -85,7 +85,7 @@ public class RegionCombinerLargeLandChannel : ILandChannel | |||
85 | } | 85 | } |
86 | } | 86 | } |
87 | ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); | 87 | ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); |
88 | obj.landData.Name = "NO LAND"; | 88 | obj.LandData.Name = "NO LAND"; |
89 | return obj; | 89 | return obj; |
90 | } | 90 | } |
91 | } | 91 | } |
@@ -118,7 +118,7 @@ public class RegionCombinerLargeLandChannel : ILandChannel | |||
118 | } | 118 | } |
119 | } | 119 | } |
120 | ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); | 120 | ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene); |
121 | obj.landData.Name = "NO LAND"; | 121 | obj.LandData.Name = "NO LAND"; |
122 | return obj; | 122 | return obj; |
123 | } | 123 | } |
124 | } | 124 | } |
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs index 1436912..05d19a2 100644 --- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs | |||
@@ -35,6 +35,7 @@ using OpenSim.Framework; | |||
35 | using OpenSim.Framework.Client; | 35 | using OpenSim.Framework.Client; |
36 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
37 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
38 | using OpenSim.Framework.Console; | ||
38 | 39 | ||
39 | namespace OpenSim.Region.CoreModules.World.Land | 40 | namespace OpenSim.Region.CoreModules.World.Land |
40 | { | 41 | { |
@@ -61,7 +62,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
61 | IConfig myConfig = source.Configs["Startup"]; | 62 | IConfig myConfig = source.Configs["Startup"]; |
62 | enabledYN = myConfig.GetBoolean("CombineContiguousRegions", false); | 63 | enabledYN = myConfig.GetBoolean("CombineContiguousRegions", false); |
63 | //enabledYN = true; | 64 | //enabledYN = true; |
64 | } | 65 | if (enabledYN) |
66 | MainConsole.Instance.Commands.AddCommand("RegionCombinerModule", false, "fix-phantoms", | ||
67 | "Fix phantom objects", "Fixes phantom objects after an import to megaregions", FixPhantoms); | ||
68 | } | ||
65 | 69 | ||
66 | public void Close() | 70 | public void Close() |
67 | { | 71 | { |
@@ -79,12 +83,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
79 | { | 83 | { |
80 | if (!enabledYN) | 84 | if (!enabledYN) |
81 | return; | 85 | return; |
82 | 86 | /* | |
83 | // For testing on a single instance | 87 | // For testing on a single instance |
84 | if (scene.RegionInfo.RegionLocX == 1004 && scene.RegionInfo.RegionLocY == 1000) | 88 | if (scene.RegionInfo.RegionLocX == 1004 && scene.RegionInfo.RegionLocY == 1000) |
85 | return; | 89 | return; |
86 | // | 90 | // |
87 | 91 | */ | |
88 | lock (m_startingScenes) | 92 | lock (m_startingScenes) |
89 | m_startingScenes.Add(scene.RegionInfo.originRegionID, scene); | 93 | m_startingScenes.Add(scene.RegionInfo.originRegionID, scene); |
90 | 94 | ||
@@ -504,7 +508,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
504 | scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY; | 508 | scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY; |
505 | } | 509 | } |
506 | 510 | ||
507 | /* | 511 | /* |
508 | else | 512 | else |
509 | { | 513 | { |
510 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; | 514 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; |
@@ -876,7 +880,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
876 | VirtualRegion.Permissions.OnDuplicateObject += BigRegion.PermissionModule.CanDuplicateObject; | 880 | VirtualRegion.Permissions.OnDuplicateObject += BigRegion.PermissionModule.CanDuplicateObject; |
877 | VirtualRegion.Permissions.OnDeleteObject += BigRegion.PermissionModule.CanDeleteObject; //MAYBE FULLY IMPLEMENTED | 881 | VirtualRegion.Permissions.OnDeleteObject += BigRegion.PermissionModule.CanDeleteObject; //MAYBE FULLY IMPLEMENTED |
878 | VirtualRegion.Permissions.OnEditObject += BigRegion.PermissionModule.CanEditObject; //MAYBE FULLY IMPLEMENTED | 882 | VirtualRegion.Permissions.OnEditObject += BigRegion.PermissionModule.CanEditObject; //MAYBE FULLY IMPLEMENTED |
879 | VirtualRegion.Permissions.OnEditParcel += BigRegion.PermissionModule.CanEditParcel; //MAYBE FULLY IMPLEMENTED | 883 | VirtualRegion.Permissions.OnEditParcel += BigRegion.PermissionModule.CanEditParcel; //MAYBE FULLY IMPLEMENTED |
880 | VirtualRegion.Permissions.OnInstantMessage += BigRegion.PermissionModule.CanInstantMessage; | 884 | VirtualRegion.Permissions.OnInstantMessage += BigRegion.PermissionModule.CanInstantMessage; |
881 | VirtualRegion.Permissions.OnInventoryTransfer += BigRegion.PermissionModule.CanInventoryTransfer; //NOT YET IMPLEMENTED | 885 | VirtualRegion.Permissions.OnInventoryTransfer += BigRegion.PermissionModule.CanInventoryTransfer; //NOT YET IMPLEMENTED |
882 | VirtualRegion.Permissions.OnIssueEstateCommand += BigRegion.PermissionModule.CanIssueEstateCommand; //FULLY IMPLEMENTED | 886 | VirtualRegion.Permissions.OnIssueEstateCommand += BigRegion.PermissionModule.CanIssueEstateCommand; //FULLY IMPLEMENTED |
@@ -895,11 +899,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
895 | VirtualRegion.Permissions.OnDelinkObject += BigRegion.PermissionModule.CanDelinkObject; //NOT YET IMPLEMENTED | 899 | VirtualRegion.Permissions.OnDelinkObject += BigRegion.PermissionModule.CanDelinkObject; //NOT YET IMPLEMENTED |
896 | VirtualRegion.Permissions.OnBuyLand += BigRegion.PermissionModule.CanBuyLand; //NOT YET IMPLEMENTED | 900 | VirtualRegion.Permissions.OnBuyLand += BigRegion.PermissionModule.CanBuyLand; //NOT YET IMPLEMENTED |
897 | VirtualRegion.Permissions.OnViewNotecard += BigRegion.PermissionModule.CanViewNotecard; //NOT YET IMPLEMENTED | 901 | VirtualRegion.Permissions.OnViewNotecard += BigRegion.PermissionModule.CanViewNotecard; //NOT YET IMPLEMENTED |
898 | VirtualRegion.Permissions.OnViewScript += BigRegion.PermissionModule.CanViewScript; //NOT YET IMPLEMENTED | 902 | VirtualRegion.Permissions.OnViewScript += BigRegion.PermissionModule.CanViewScript; //NOT YET IMPLEMENTED |
899 | VirtualRegion.Permissions.OnEditNotecard += BigRegion.PermissionModule.CanEditNotecard; //NOT YET IMPLEMENTED | 903 | VirtualRegion.Permissions.OnEditNotecard += BigRegion.PermissionModule.CanEditNotecard; //NOT YET IMPLEMENTED |
900 | VirtualRegion.Permissions.OnEditScript += BigRegion.PermissionModule.CanEditScript; //NOT YET IMPLEMENTED | 904 | VirtualRegion.Permissions.OnEditScript += BigRegion.PermissionModule.CanEditScript; //NOT YET IMPLEMENTED |
901 | VirtualRegion.Permissions.OnCreateObjectInventory += BigRegion.PermissionModule.CanCreateObjectInventory; //NOT IMPLEMENTED HERE | 905 | VirtualRegion.Permissions.OnCreateObjectInventory += BigRegion.PermissionModule.CanCreateObjectInventory; //NOT IMPLEMENTED HERE |
902 | VirtualRegion.Permissions.OnEditObjectInventory += BigRegion.PermissionModule.CanEditObjectInventory;//MAYBE FULLY IMPLEMENTED | 906 | VirtualRegion.Permissions.OnEditObjectInventory += BigRegion.PermissionModule.CanEditObjectInventory;//MAYBE FULLY IMPLEMENTED |
903 | VirtualRegion.Permissions.OnCopyObjectInventory += BigRegion.PermissionModule.CanCopyObjectInventory; //NOT YET IMPLEMENTED | 907 | VirtualRegion.Permissions.OnCopyObjectInventory += BigRegion.PermissionModule.CanCopyObjectInventory; //NOT YET IMPLEMENTED |
904 | VirtualRegion.Permissions.OnDeleteObjectInventory += BigRegion.PermissionModule.CanDeleteObjectInventory; //NOT YET IMPLEMENTED | 908 | VirtualRegion.Permissions.OnDeleteObjectInventory += BigRegion.PermissionModule.CanDeleteObjectInventory; //NOT YET IMPLEMENTED |
905 | VirtualRegion.Permissions.OnResetScript += BigRegion.PermissionModule.CanResetScript; | 909 | VirtualRegion.Permissions.OnResetScript += BigRegion.PermissionModule.CanResetScript; |
@@ -910,5 +914,20 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
910 | VirtualRegion.Permissions.OnTeleport += BigRegion.PermissionModule.CanTeleport; //NOT YET IMPLEMENTED | 914 | VirtualRegion.Permissions.OnTeleport += BigRegion.PermissionModule.CanTeleport; //NOT YET IMPLEMENTED |
911 | VirtualRegion.Permissions.OnUseObjectReturn += BigRegion.PermissionModule.CanUseObjectReturn; //NOT YET IMPLEMENTED | 915 | VirtualRegion.Permissions.OnUseObjectReturn += BigRegion.PermissionModule.CanUseObjectReturn; //NOT YET IMPLEMENTED |
912 | } | 916 | } |
917 | |||
918 | #region console commands | ||
919 | public void FixPhantoms(string module, string[] cmdparams) | ||
920 | { | ||
921 | List<Scene> scenes = new List<Scene>(m_startingScenes.Values); | ||
922 | foreach (Scene s in scenes) | ||
923 | { | ||
924 | s.ForEachSOG(delegate(SceneObjectGroup e) | ||
925 | { | ||
926 | e.AbsolutePosition = e.AbsolutePosition; | ||
927 | } | ||
928 | ); | ||
929 | } | ||
930 | } | ||
931 | #endregion | ||
913 | } | 932 | } |
914 | } | 933 | } |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index f360577..9622555 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -103,7 +103,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
103 | //private uint PERM_MODIFY = (uint)16384; | 103 | //private uint PERM_MODIFY = (uint)16384; |
104 | private uint PERM_MOVE = (uint)524288; | 104 | private uint PERM_MOVE = (uint)524288; |
105 | private uint PERM_TRANS = (uint)8192; | 105 | private uint PERM_TRANS = (uint)8192; |
106 | private uint PERM_LOCKED = (uint)540672; | 106 | private uint PERM_LOCKED = (uint)540672; |
107 | 107 | ||
108 | /// <value> | 108 | /// <value> |
109 | /// Different user set names that come in from the configuration file. | 109 | /// Different user set names that come in from the configuration file. |
@@ -114,7 +114,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
114 | Administrators | 114 | Administrators |
115 | }; | 115 | }; |
116 | 116 | ||
117 | #endregion | 117 | #endregion |
118 | 118 | ||
119 | #region Bypass Permissions / Debug Permissions Stuff | 119 | #region Bypass Permissions / Debug Permissions Stuff |
120 | 120 | ||
@@ -136,7 +136,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
136 | /// <value> | 136 | /// <value> |
137 | /// The set of users that are allowed to edit (save) scripts. This is only active if | 137 | /// The set of users that are allowed to edit (save) scripts. This is only active if |
138 | /// permissions are not being bypassed. This overrides normal permissions.- | 138 | /// permissions are not being bypassed. This overrides normal permissions.- |
139 | /// </value> | 139 | /// </value> |
140 | private UserSet m_allowedScriptEditors = UserSet.All; | 140 | private UserSet m_allowedScriptEditors = UserSet.All; |
141 | 141 | ||
142 | private Dictionary<string, bool> GrantLSL = new Dictionary<string, bool>(); | 142 | private Dictionary<string, bool> GrantLSL = new Dictionary<string, bool>(); |
@@ -190,7 +190,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
190 | m_scene.Permissions.OnDuplicateObject += CanDuplicateObject; | 190 | m_scene.Permissions.OnDuplicateObject += CanDuplicateObject; |
191 | m_scene.Permissions.OnDeleteObject += CanDeleteObject; //MAYBE FULLY IMPLEMENTED | 191 | m_scene.Permissions.OnDeleteObject += CanDeleteObject; //MAYBE FULLY IMPLEMENTED |
192 | m_scene.Permissions.OnEditObject += CanEditObject; //MAYBE FULLY IMPLEMENTED | 192 | m_scene.Permissions.OnEditObject += CanEditObject; //MAYBE FULLY IMPLEMENTED |
193 | m_scene.Permissions.OnEditParcel += CanEditParcel; //MAYBE FULLY IMPLEMENTED | 193 | m_scene.Permissions.OnEditParcel += CanEditParcel; //MAYBE FULLY IMPLEMENTED |
194 | m_scene.Permissions.OnInstantMessage += CanInstantMessage; | 194 | m_scene.Permissions.OnInstantMessage += CanInstantMessage; |
195 | m_scene.Permissions.OnInventoryTransfer += CanInventoryTransfer; //NOT YET IMPLEMENTED | 195 | m_scene.Permissions.OnInventoryTransfer += CanInventoryTransfer; //NOT YET IMPLEMENTED |
196 | m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED | 196 | m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED |
@@ -210,12 +210,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
210 | m_scene.Permissions.OnBuyLand += CanBuyLand; //NOT YET IMPLEMENTED | 210 | m_scene.Permissions.OnBuyLand += CanBuyLand; //NOT YET IMPLEMENTED |
211 | 211 | ||
212 | m_scene.Permissions.OnViewNotecard += CanViewNotecard; //NOT YET IMPLEMENTED | 212 | m_scene.Permissions.OnViewNotecard += CanViewNotecard; //NOT YET IMPLEMENTED |
213 | m_scene.Permissions.OnViewScript += CanViewScript; //NOT YET IMPLEMENTED | 213 | m_scene.Permissions.OnViewScript += CanViewScript; //NOT YET IMPLEMENTED |
214 | m_scene.Permissions.OnEditNotecard += CanEditNotecard; //NOT YET IMPLEMENTED | 214 | m_scene.Permissions.OnEditNotecard += CanEditNotecard; //NOT YET IMPLEMENTED |
215 | m_scene.Permissions.OnEditScript += CanEditScript; //NOT YET IMPLEMENTED | 215 | m_scene.Permissions.OnEditScript += CanEditScript; //NOT YET IMPLEMENTED |
216 | 216 | ||
217 | m_scene.Permissions.OnCreateObjectInventory += CanCreateObjectInventory; //NOT IMPLEMENTED HERE | 217 | m_scene.Permissions.OnCreateObjectInventory += CanCreateObjectInventory; //NOT IMPLEMENTED HERE |
218 | m_scene.Permissions.OnEditObjectInventory += CanEditObjectInventory;//MAYBE FULLY IMPLEMENTED | 218 | m_scene.Permissions.OnEditObjectInventory += CanEditObjectInventory;//MAYBE FULLY IMPLEMENTED |
219 | m_scene.Permissions.OnCopyObjectInventory += CanCopyObjectInventory; //NOT YET IMPLEMENTED | 219 | m_scene.Permissions.OnCopyObjectInventory += CanCopyObjectInventory; //NOT YET IMPLEMENTED |
220 | m_scene.Permissions.OnDeleteObjectInventory += CanDeleteObjectInventory; //NOT YET IMPLEMENTED | 220 | m_scene.Permissions.OnDeleteObjectInventory += CanDeleteObjectInventory; //NOT YET IMPLEMENTED |
221 | m_scene.Permissions.OnResetScript += CanResetScript; | 221 | m_scene.Permissions.OnResetScript += CanResetScript; |
@@ -249,7 +249,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
249 | foreach (string uuidl in grant.Split(',')) { | 249 | foreach (string uuidl in grant.Split(',')) { |
250 | string uuid = uuidl.Trim(" \t".ToCharArray()); | 250 | string uuid = uuidl.Trim(" \t".ToCharArray()); |
251 | GrantLSL.Add(uuid, true); | 251 | GrantLSL.Add(uuid, true); |
252 | } | 252 | } |
253 | } | 253 | } |
254 | 254 | ||
255 | grant = myConfig.GetString("GrantCS",""); | 255 | grant = myConfig.GetString("GrantCS",""); |
@@ -431,7 +431,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
431 | m_log.ErrorFormat( | 431 | m_log.ErrorFormat( |
432 | "[PERMISSIONS]: {0} is not a valid {1} value, setting to {2}", | 432 | "[PERMISSIONS]: {0} is not a valid {1} value, setting to {2}", |
433 | rawSetting, settingName, userSet); | 433 | rawSetting, settingName, userSet); |
434 | } | 434 | } |
435 | 435 | ||
436 | m_log.DebugFormat("[PERMISSIONS]: {0} {1}", settingName, userSet); | 436 | m_log.DebugFormat("[PERMISSIONS]: {0} {1}", settingName, userSet); |
437 | 437 | ||
@@ -569,16 +569,19 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
569 | 569 | ||
570 | // Users should be able to edit what is over their land. | 570 | // Users should be able to edit what is over their land. |
571 | ILandObject parcel = m_scene.LandChannel.GetLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y); | 571 | ILandObject parcel = m_scene.LandChannel.GetLandObject(task.AbsolutePosition.X, task.AbsolutePosition.Y); |
572 | if (parcel != null && parcel.landData.OwnerID == user && m_ParcelOwnerIsGod) | 572 | if (parcel != null && parcel.LandData.OwnerID == user && m_ParcelOwnerIsGod) |
573 | { | 573 | { |
574 | // Admin objects should not be editable by the above | 574 | // Admin objects should not be editable by the above |
575 | if (!IsAdministrator(objectOwner)) | 575 | if (!IsAdministrator(objectOwner)) |
576 | return objectOwnerMask; | 576 | return objectOwnerMask; |
577 | } | 577 | } |
578 | 578 | ||
579 | if ((objectOwnerMask & (uint)PermissionMask.Transfer) != 0 && task.ObjectSaleType != 0) | ||
580 | objectEveryoneMask |= (uint)PrimFlags.ObjectTransfer; | ||
581 | |||
579 | // Group permissions | 582 | // Group permissions |
580 | if ((task.GroupID != UUID.Zero) && IsGroupMember(task.GroupID, user, 0)) | 583 | if ((task.GroupID != UUID.Zero) && IsGroupMember(task.GroupID, user, 0)) |
581 | return objectGroupMask; | 584 | return objectGroupMask | objectEveryoneMask; |
582 | 585 | ||
583 | return objectEveryoneMask; | 586 | return objectEveryoneMask; |
584 | } | 587 | } |
@@ -672,7 +675,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
672 | 675 | ||
673 | // Users should be able to edit what is over their land. | 676 | // Users should be able to edit what is over their land. |
674 | ILandObject parcel = m_scene.LandChannel.GetLandObject(group.AbsolutePosition.X, group.AbsolutePosition.Y); | 677 | ILandObject parcel = m_scene.LandChannel.GetLandObject(group.AbsolutePosition.X, group.AbsolutePosition.Y); |
675 | if ((parcel != null) && (parcel.landData.OwnerID == currentUser)) | 678 | if ((parcel != null) && (parcel.LandData.OwnerID == currentUser)) |
676 | { | 679 | { |
677 | permission = true; | 680 | permission = true; |
678 | } | 681 | } |
@@ -740,12 +743,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
740 | { | 743 | { |
741 | bool permission = false; | 744 | bool permission = false; |
742 | 745 | ||
743 | if (parcel.landData.OwnerID == user) | 746 | if (parcel.LandData.OwnerID == user) |
744 | { | 747 | { |
745 | permission = true; | 748 | permission = true; |
746 | } | 749 | } |
747 | 750 | ||
748 | if ((parcel.landData.GroupID != UUID.Zero) && IsGroupMember(parcel.landData.GroupID, user, groupPowers)) | 751 | if ((parcel.LandData.GroupID != UUID.Zero) && IsGroupMember(parcel.LandData.GroupID, user, groupPowers)) |
749 | { | 752 | { |
750 | permission = true; | 753 | permission = true; |
751 | } | 754 | } |
@@ -767,12 +770,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
767 | { | 770 | { |
768 | bool permission = false; | 771 | bool permission = false; |
769 | 772 | ||
770 | if (parcel.landData.OwnerID == user) | 773 | if (parcel.LandData.OwnerID == user) |
771 | { | 774 | { |
772 | permission = true; | 775 | permission = true; |
773 | } | 776 | } |
774 | 777 | ||
775 | if (parcel.landData.IsGroupOwned && IsGroupMember(parcel.landData.GroupID, user, groupPowers)) | 778 | if (parcel.LandData.IsGroupOwned && IsGroupMember(parcel.LandData.GroupID, user, groupPowers)) |
776 | { | 779 | { |
777 | permission = true; | 780 | permission = true; |
778 | } | 781 | } |
@@ -820,13 +823,13 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
820 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 823 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
821 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 824 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
822 | 825 | ||
823 | if (parcel.landData.OwnerID != user) // Only the owner can deed! | 826 | if (parcel.LandData.OwnerID != user) // Only the owner can deed! |
824 | return false; | 827 | return false; |
825 | 828 | ||
826 | ScenePresence sp = scene.GetScenePresence(user); | 829 | ScenePresence sp = scene.GetScenePresence(user); |
827 | IClientAPI client = sp.ControllingClient; | 830 | IClientAPI client = sp.ControllingClient; |
828 | 831 | ||
829 | if ((client.GetGroupPowers(parcel.landData.GroupID) & (ulong)GroupPowers.LandDeed) == 0) | 832 | if ((client.GetGroupPowers(parcel.LandData.GroupID) & (ulong)GroupPowers.LandDeed) == 0) |
830 | return false; | 833 | return false; |
831 | 834 | ||
832 | return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandDeed); | 835 | return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandDeed); |
@@ -942,7 +945,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
942 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 945 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
943 | 946 | ||
944 | if (m_allowedScriptEditors == UserSet.Administrators && !IsAdministrator(user)) | 947 | if (m_allowedScriptEditors == UserSet.Administrators && !IsAdministrator(user)) |
945 | return false; | 948 | return false; |
946 | 949 | ||
947 | // Ordinarily, if you can view it, you can edit it | 950 | // Ordinarily, if you can view it, you can edit it |
948 | // There is no viewing a no mod script | 951 | // There is no viewing a no mod script |
@@ -957,7 +960,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
957 | /// <param name="objectID"></param> | 960 | /// <param name="objectID"></param> |
958 | /// <param name="user"></param> | 961 | /// <param name="user"></param> |
959 | /// <param name="scene"></param> | 962 | /// <param name="scene"></param> |
960 | /// <returns></returns> | 963 | /// <returns></returns> |
961 | private bool CanEditNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) | 964 | private bool CanEditNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) |
962 | { | 965 | { |
963 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 966 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
@@ -1189,7 +1192,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1189 | return false; | 1192 | return false; |
1190 | } | 1193 | } |
1191 | 1194 | ||
1192 | if ((land.landData.Flags & ((int)ParcelFlags.AllowAPrimitiveEntry)) != 0) | 1195 | if ((land.LandData.Flags & ((int)ParcelFlags.AllowAPrimitiveEntry)) != 0) |
1193 | { | 1196 | { |
1194 | return true; | 1197 | return true; |
1195 | } | 1198 | } |
@@ -1233,7 +1236,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1233 | ILandObject land = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y); | 1236 | ILandObject land = m_scene.LandChannel.GetLandObject(objectPosition.X, objectPosition.Y); |
1234 | if (land == null) return false; | 1237 | if (land == null) return false; |
1235 | 1238 | ||
1236 | if ((land.landData.Flags & ((int)ParcelFlags.CreateObjects)) == | 1239 | if ((land.LandData.Flags & ((int)ParcelFlags.CreateObjects)) == |
1237 | (int)ParcelFlags.CreateObjects) | 1240 | (int)ParcelFlags.CreateObjects) |
1238 | permission = true; | 1241 | permission = true; |
1239 | 1242 | ||
@@ -1360,7 +1363,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1360 | return false; | 1363 | return false; |
1361 | 1364 | ||
1362 | // Others allowed to terraform? | 1365 | // Others allowed to terraform? |
1363 | if ((parcel.landData.Flags & ((int)ParcelFlags.AllowTerraform)) != 0) | 1366 | if ((parcel.LandData.Flags & ((int)ParcelFlags.AllowTerraform)) != 0) |
1364 | return true; | 1367 | return true; |
1365 | 1368 | ||
1366 | // Land owner can terraform too | 1369 | // Land owner can terraform too |
@@ -1377,11 +1380,11 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1377 | /// <param name="objectID"></param> | 1380 | /// <param name="objectID"></param> |
1378 | /// <param name="user"></param> | 1381 | /// <param name="user"></param> |
1379 | /// <param name="scene"></param> | 1382 | /// <param name="scene"></param> |
1380 | /// <returns></returns> | 1383 | /// <returns></returns> |
1381 | private bool CanViewScript(UUID script, UUID objectID, UUID user, Scene scene) | 1384 | private bool CanViewScript(UUID script, UUID objectID, UUID user, Scene scene) |
1382 | { | 1385 | { |
1383 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1386 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1384 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1387 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1385 | 1388 | ||
1386 | if (objectID == UUID.Zero) // User inventory | 1389 | if (objectID == UUID.Zero) // User inventory |
1387 | { | 1390 | { |
@@ -1472,7 +1475,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1472 | /// <param name="objectID"></param> | 1475 | /// <param name="objectID"></param> |
1473 | /// <param name="user"></param> | 1476 | /// <param name="user"></param> |
1474 | /// <param name="scene"></param> | 1477 | /// <param name="scene"></param> |
1475 | /// <returns></returns> | 1478 | /// <returns></returns> |
1476 | private bool CanViewNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) | 1479 | private bool CanViewNotecard(UUID notecard, UUID objectID, UUID user, Scene scene) |
1477 | { | 1480 | { |
1478 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1481 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
@@ -1609,7 +1612,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1609 | /// </summary> | 1612 | /// </summary> |
1610 | /// <param name="invType"></param> | 1613 | /// <param name="invType"></param> |
1611 | /// <param name="userID"></param> | 1614 | /// <param name="userID"></param> |
1612 | /// <returns></returns> | 1615 | /// <returns></returns> |
1613 | private bool CanCreateUserInventory(int invType, UUID userID) | 1616 | private bool CanCreateUserInventory(int invType, UUID userID) |
1614 | { | 1617 | { |
1615 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1618 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
@@ -1619,7 +1622,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1619 | if (m_allowedScriptCreators == UserSet.Administrators && !IsAdministrator(userID)) | 1622 | if (m_allowedScriptCreators == UserSet.Administrators && !IsAdministrator(userID)) |
1620 | return false; | 1623 | return false; |
1621 | 1624 | ||
1622 | return true; | 1625 | return true; |
1623 | } | 1626 | } |
1624 | 1627 | ||
1625 | /// <summary> | 1628 | /// <summary> |
@@ -1627,27 +1630,27 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1627 | /// </summary> | 1630 | /// </summary> |
1628 | /// <param name="itemID"></param> | 1631 | /// <param name="itemID"></param> |
1629 | /// <param name="userID"></param> | 1632 | /// <param name="userID"></param> |
1630 | /// <returns></returns> | 1633 | /// <returns></returns> |
1631 | private bool CanCopyUserInventory(UUID itemID, UUID userID) | 1634 | private bool CanCopyUserInventory(UUID itemID, UUID userID) |
1632 | { | 1635 | { |
1633 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1636 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1634 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1637 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1635 | 1638 | ||
1636 | return true; | 1639 | return true; |
1637 | } | 1640 | } |
1638 | 1641 | ||
1639 | /// <summary> | 1642 | /// <summary> |
1640 | /// Check whether the specified user is allowed to edit the given inventory item within their own inventory. | 1643 | /// Check whether the specified user is allowed to edit the given inventory item within their own inventory. |
1641 | /// </summary> | 1644 | /// </summary> |
1642 | /// <param name="itemID"></param> | 1645 | /// <param name="itemID"></param> |
1643 | /// <param name="userID"></param> | 1646 | /// <param name="userID"></param> |
1644 | /// <returns></returns> | 1647 | /// <returns></returns> |
1645 | private bool CanEditUserInventory(UUID itemID, UUID userID) | 1648 | private bool CanEditUserInventory(UUID itemID, UUID userID) |
1646 | { | 1649 | { |
1647 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1650 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1648 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1651 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1649 | 1652 | ||
1650 | return true; | 1653 | return true; |
1651 | } | 1654 | } |
1652 | 1655 | ||
1653 | /// <summary> | 1656 | /// <summary> |
@@ -1655,14 +1658,14 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1655 | /// </summary> | 1658 | /// </summary> |
1656 | /// <param name="itemID"></param> | 1659 | /// <param name="itemID"></param> |
1657 | /// <param name="userID"></param> | 1660 | /// <param name="userID"></param> |
1658 | /// <returns></returns> | 1661 | /// <returns></returns> |
1659 | private bool CanDeleteUserInventory(UUID itemID, UUID userID) | 1662 | private bool CanDeleteUserInventory(UUID itemID, UUID userID) |
1660 | { | 1663 | { |
1661 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1664 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1662 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1665 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1663 | 1666 | ||
1664 | return true; | 1667 | return true; |
1665 | } | 1668 | } |
1666 | 1669 | ||
1667 | private bool CanTeleport(UUID userID, Scene scene) | 1670 | private bool CanTeleport(UUID userID, Scene scene) |
1668 | { | 1671 | { |
@@ -1693,27 +1696,27 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1693 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1696 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1694 | 1697 | ||
1695 | long powers = 0; | 1698 | long powers = 0; |
1696 | if (parcel.landData.GroupID != UUID.Zero) | 1699 | if (parcel.LandData.GroupID != UUID.Zero) |
1697 | client.GetGroupPowers(parcel.landData.GroupID); | 1700 | client.GetGroupPowers(parcel.LandData.GroupID); |
1698 | 1701 | ||
1699 | switch (type) | 1702 | switch (type) |
1700 | { | 1703 | { |
1701 | case (uint)ObjectReturnType.Owner: | 1704 | case (uint)ObjectReturnType.Owner: |
1702 | // Don't let group members return owner's objects, ever | 1705 | // Don't let group members return owner's objects, ever |
1703 | // | 1706 | // |
1704 | if (parcel.landData.IsGroupOwned) | 1707 | if (parcel.LandData.IsGroupOwned) |
1705 | { | 1708 | { |
1706 | if ((powers & (long)GroupPowers.ReturnGroupOwned) != 0) | 1709 | if ((powers & (long)GroupPowers.ReturnGroupOwned) != 0) |
1707 | return true; | 1710 | return true; |
1708 | } | 1711 | } |
1709 | else | 1712 | else |
1710 | { | 1713 | { |
1711 | if (parcel.landData.OwnerID != client.AgentId) | 1714 | if (parcel.LandData.OwnerID != client.AgentId) |
1712 | return false; | 1715 | return false; |
1713 | } | 1716 | } |
1714 | return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnGroupOwned); | 1717 | return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnGroupOwned); |
1715 | case (uint)ObjectReturnType.Group: | 1718 | case (uint)ObjectReturnType.Group: |
1716 | if (parcel.landData.OwnerID != client.AgentId) | 1719 | if (parcel.LandData.OwnerID != client.AgentId) |
1717 | { | 1720 | { |
1718 | // If permissionis granted through a group... | 1721 | // If permissionis granted through a group... |
1719 | // | 1722 | // |
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs index e0331d3..58e4261 100644 --- a/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs +++ b/OpenSim/Region/CoreModules/World/Serialiser/SerialiserModule.cs | |||
@@ -153,7 +153,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser | |||
153 | public void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName) | 153 | public void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName) |
154 | { | 154 | { |
155 | SceneXmlLoader.SaveNamedPrimsToXml2(scene, primName, fileName); | 155 | SceneXmlLoader.SaveNamedPrimsToXml2(scene, primName, fileName); |
156 | } | 156 | } |
157 | 157 | ||
158 | public SceneObjectGroup DeserializeGroupFromXml2(string xmlString) | 158 | public SceneObjectGroup DeserializeGroupFromXml2(string xmlString) |
159 | { | 159 | { |
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs index 373b6ab..799a448 100644 --- a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs +++ b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs | |||
@@ -238,7 +238,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
238 | { | 238 | { |
239 | m_serialiserModule = new SerialiserModule(); | 239 | m_serialiserModule = new SerialiserModule(); |
240 | m_scene = SceneSetupHelpers.SetupScene(""); | 240 | m_scene = SceneSetupHelpers.SetupScene(""); |
241 | SceneSetupHelpers.SetupSceneModules(m_scene, m_serialiserModule); | 241 | SceneSetupHelpers.SetupSceneModules(m_scene, m_serialiserModule); |
242 | } | 242 | } |
243 | 243 | ||
244 | [Test] | 244 | [Test] |
@@ -299,7 +299,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
299 | continue; | 299 | continue; |
300 | 300 | ||
301 | switch (xtr.Name) | 301 | switch (xtr.Name) |
302 | { | 302 | { |
303 | case "UUID": | 303 | case "UUID": |
304 | xtr.ReadStartElement("UUID"); | 304 | xtr.ReadStartElement("UUID"); |
305 | uuid = UUID.Parse(xtr.ReadElementString("Guid")); | 305 | uuid = UUID.Parse(xtr.ReadElementString("Guid")); |
@@ -311,7 +311,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
311 | case "CreatorID": | 311 | case "CreatorID": |
312 | xtr.ReadStartElement("CreatorID"); | 312 | xtr.ReadStartElement("CreatorID"); |
313 | creatorId = UUID.Parse(xtr.ReadElementString("Guid")); | 313 | creatorId = UUID.Parse(xtr.ReadElementString("Guid")); |
314 | xtr.ReadEndElement(); | 314 | xtr.ReadEndElement(); |
315 | break; | 315 | break; |
316 | } | 316 | } |
317 | } | 317 | } |
@@ -325,8 +325,8 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
325 | // TODO: More checks | 325 | // TODO: More checks |
326 | Assert.That(uuid, Is.EqualTo(rpUuid)); | 326 | Assert.That(uuid, Is.EqualTo(rpUuid)); |
327 | Assert.That(name, Is.EqualTo(rpName)); | 327 | Assert.That(name, Is.EqualTo(rpName)); |
328 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); | 328 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); |
329 | } | 329 | } |
330 | 330 | ||
331 | [Test] | 331 | [Test] |
332 | public void TestDeserializeXml2() | 332 | public void TestDeserializeXml2() |
@@ -372,7 +372,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
372 | string xml2 = m_serialiserModule.SerializeGroupToXml2(so); | 372 | string xml2 = m_serialiserModule.SerializeGroupToXml2(so); |
373 | 373 | ||
374 | XmlTextReader xtr = new XmlTextReader(new StringReader(xml2)); | 374 | XmlTextReader xtr = new XmlTextReader(new StringReader(xml2)); |
375 | xtr.ReadStartElement("SceneObjectGroup"); | 375 | xtr.ReadStartElement("SceneObjectGroup"); |
376 | xtr.ReadStartElement("SceneObjectPart"); | 376 | xtr.ReadStartElement("SceneObjectPart"); |
377 | 377 | ||
378 | UUID uuid = UUID.Zero; | 378 | UUID uuid = UUID.Zero; |
@@ -385,7 +385,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
385 | continue; | 385 | continue; |
386 | 386 | ||
387 | switch (xtr.Name) | 387 | switch (xtr.Name) |
388 | { | 388 | { |
389 | case "UUID": | 389 | case "UUID": |
390 | xtr.ReadStartElement("UUID"); | 390 | xtr.ReadStartElement("UUID"); |
391 | uuid = UUID.Parse(xtr.ReadElementString("Guid")); | 391 | uuid = UUID.Parse(xtr.ReadElementString("Guid")); |
@@ -397,7 +397,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
397 | case "CreatorID": | 397 | case "CreatorID": |
398 | xtr.ReadStartElement("CreatorID"); | 398 | xtr.ReadStartElement("CreatorID"); |
399 | creatorId = UUID.Parse(xtr.ReadElementString("Guid")); | 399 | creatorId = UUID.Parse(xtr.ReadElementString("Guid")); |
400 | xtr.ReadEndElement(); | 400 | xtr.ReadEndElement(); |
401 | break; | 401 | break; |
402 | } | 402 | } |
403 | } | 403 | } |
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs index 6cc0ed9..37f1f2e 100644 --- a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs +++ b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs | |||
@@ -33,9 +33,9 @@ using OpenSim.Region.Framework.Interfaces; | |||
33 | using OpenSim.Region.Framework.Scenes; | 33 | using OpenSim.Region.Framework.Scenes; |
34 | 34 | ||
35 | namespace OpenSim.Region.CoreModules.World.Sound | 35 | namespace OpenSim.Region.CoreModules.World.Sound |
36 | { | 36 | { |
37 | public class SoundModule : IRegionModule, ISoundModule | 37 | public class SoundModule : IRegionModule, ISoundModule |
38 | { | 38 | { |
39 | //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 39 | //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
40 | 40 | ||
41 | protected Scene m_scene; | 41 | protected Scene m_scene; |
@@ -68,11 +68,11 @@ namespace OpenSim.Region.CoreModules.World.Sound | |||
68 | if (dis > 100.0) // Max audio distance | 68 | if (dis > 100.0) // Max audio distance |
69 | continue; | 69 | continue; |
70 | 70 | ||
71 | // Scale by distance | 71 | // Scale by distance |
72 | gain = (float)((double)gain*((100.0 - dis) / 100.0)); | 72 | gain = (float)((double)gain*((100.0 - dis) / 100.0)); |
73 | 73 | ||
74 | p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)gain, flags); | 74 | p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)gain, flags); |
75 | } | 75 | } |
76 | } | 76 | } |
77 | 77 | ||
78 | public virtual void TriggerSound( | 78 | public virtual void TriggerSound( |
@@ -84,12 +84,12 @@ namespace OpenSim.Region.CoreModules.World.Sound | |||
84 | if (dis > 100.0) // Max audio distance | 84 | if (dis > 100.0) // Max audio distance |
85 | continue; | 85 | continue; |
86 | 86 | ||
87 | // Scale by distance | 87 | // Scale by distance |
88 | gain = (float)((double)gain*((100.0 - dis) / 100.0)); | 88 | gain = (float)((double)gain*((100.0 - dis) / 100.0)); |
89 | 89 | ||
90 | p.ControllingClient.SendTriggeredSound( | 90 | p.ControllingClient.SendTriggeredSound( |
91 | soundId, ownerID, objectID, parentID, handle, position, (float)gain); | 91 | soundId, ownerID, objectID, parentID, handle, position, (float)gain); |
92 | } | 92 | } |
93 | } | 93 | } |
94 | } | 94 | } |
95 | } | 95 | } |
diff --git a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs index aa38c09..0712a7f 100644 --- a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs +++ b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs | |||
@@ -322,7 +322,7 @@ namespace OpenSim.Region.CoreModules | |||
322 | m_DayLengthHours = config.Configs["Sun"].GetDouble("day_length", d_day_length); | 322 | m_DayLengthHours = config.Configs["Sun"].GetDouble("day_length", d_day_length); |
323 | 323 | ||
324 | // Horizon shift, this is used to shift the sun's orbit, this affects the day / night ratio | 324 | // Horizon shift, this is used to shift the sun's orbit, this affects the day / night ratio |
325 | // must hard code to ~.5 to match sun position in LL based viewers | 325 | // must hard code to ~.5 to match sun position in LL based viewers |
326 | m_HorizonShift = config.Configs["Sun"].GetDouble("day_night_offset", d_day_night); | 326 | m_HorizonShift = config.Configs["Sun"].GetDouble("day_night_offset", d_day_night); |
327 | 327 | ||
328 | 328 | ||
@@ -494,7 +494,7 @@ namespace OpenSim.Region.CoreModules | |||
494 | receivedEstateToolsSunUpdate = true; | 494 | receivedEstateToolsSunUpdate = true; |
495 | 495 | ||
496 | // Generate shared values | 496 | // Generate shared values |
497 | GenSunPos(); | 497 | GenSunPos(); |
498 | 498 | ||
499 | // When sun settings are updated, we should update all clients with new settings. | 499 | // When sun settings are updated, we should update all clients with new settings. |
500 | SunUpdateToAllClients(); | 500 | SunUpdateToAllClients(); |
diff --git a/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs b/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs index a09315a..c2ad7b8 100644 --- a/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs +++ b/OpenSim/Region/CoreModules/World/Vegetation/VegetationModule.cs | |||
@@ -43,7 +43,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Vegetation | |||
43 | protected Scene m_scene; | 43 | protected Scene m_scene; |
44 | 44 | ||
45 | protected static readonly PCode[] creationCapabilities = new PCode[] { PCode.Grass, PCode.NewTree, PCode.Tree }; | 45 | protected static readonly PCode[] creationCapabilities = new PCode[] { PCode.Grass, PCode.NewTree, PCode.Tree }; |
46 | public PCode[] CreationCapabilities { get { return creationCapabilities; } } | 46 | public PCode[] CreationCapabilities { get { return creationCapabilities; } } |
47 | 47 | ||
48 | public void Initialise(Scene scene, IConfigSource source) | 48 | public void Initialise(Scene scene, IConfigSource source) |
49 | { | 49 | { |
@@ -73,7 +73,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Vegetation | |||
73 | UUID ownerID, UUID groupID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape) | 73 | UUID ownerID, UUID groupID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape) |
74 | { | 74 | { |
75 | if (Array.IndexOf(creationCapabilities, (PCode)shape.PCode) < 0) | 75 | if (Array.IndexOf(creationCapabilities, (PCode)shape.PCode) < 0) |
76 | { | 76 | { |
77 | m_log.DebugFormat("[VEGETATION]: PCode {0} not handled by {1}", shape.PCode, Name); | 77 | m_log.DebugFormat("[VEGETATION]: PCode {0} not handled by {1}", shape.PCode, Name); |
78 | return null; | 78 | return null; |
79 | } | 79 | } |
@@ -111,6 +111,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Vegetation | |||
111 | tree.Scale = new Vector3(4, 4, 4); | 111 | tree.Scale = new Vector3(4, 4, 4); |
112 | break; | 112 | break; |
113 | } | 113 | } |
114 | } | 114 | } |
115 | } | 115 | } |
116 | } | 116 | } |
diff --git a/OpenSim/Region/CoreModules/World/Wind/Plugins/ConfigurableWind.cs b/OpenSim/Region/CoreModules/World/Wind/Plugins/ConfigurableWind.cs index 41d2071..9d47e19 100644 --- a/OpenSim/Region/CoreModules/World/Wind/Plugins/ConfigurableWind.cs +++ b/OpenSim/Region/CoreModules/World/Wind/Plugins/ConfigurableWind.cs | |||
@@ -46,7 +46,7 @@ namespace OpenSim.Region.CoreModules.World.Wind.Plugins | |||
46 | 46 | ||
47 | private float m_avgStrength = 5.0f; // Average magnitude of the wind vector | 47 | private float m_avgStrength = 5.0f; // Average magnitude of the wind vector |
48 | private float m_avgDirection = 0.0f; // Average direction of the wind in degrees | 48 | private float m_avgDirection = 0.0f; // Average direction of the wind in degrees |
49 | private float m_varStrength = 5.0f; // Max Strength Variance | 49 | private float m_varStrength = 5.0f; // Max Strength Variance |
50 | private float m_varDirection = 30.0f;// Max Direction Variance | 50 | private float m_varDirection = 30.0f;// Max Direction Variance |
51 | private float m_rateChange = 1.0f; // | 51 | private float m_rateChange = 1.0f; // |
52 | 52 | ||
@@ -141,7 +141,7 @@ namespace OpenSim.Region.CoreModules.World.Wind.Plugins | |||
141 | { | 141 | { |
142 | m_windSpeeds[y * 16 + x] = m_curPredominateWind; | 142 | m_windSpeeds[y * 16 + x] = m_curPredominateWind; |
143 | } | 143 | } |
144 | } | 144 | } |
145 | } | 145 | } |
146 | 146 | ||
147 | public Vector3 WindSpeed(float fX, float fY, float fZ) | 147 | public Vector3 WindSpeed(float fX, float fY, float fZ) |
diff --git a/OpenSim/Region/CoreModules/World/Wind/Plugins/SimpleRandomWind.cs b/OpenSim/Region/CoreModules/World/Wind/Plugins/SimpleRandomWind.cs index 2c371da..071e20b 100644 --- a/OpenSim/Region/CoreModules/World/Wind/Plugins/SimpleRandomWind.cs +++ b/OpenSim/Region/CoreModules/World/Wind/Plugins/SimpleRandomWind.cs | |||
@@ -95,7 +95,7 @@ namespace OpenSim.Region.CoreModules.World.Wind.Plugins | |||
95 | m_windSpeeds[y * 16 + x].Y *= m_strength; | 95 | m_windSpeeds[y * 16 + x].Y *= m_strength; |
96 | } | 96 | } |
97 | } | 97 | } |
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | public Vector3 WindSpeed(float fX, float fY, float fZ) | 101 | public Vector3 WindSpeed(float fX, float fY, float fZ) |
diff --git a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs index b442f6f..3283c1f 100644 --- a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs +++ b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs | |||
@@ -418,7 +418,7 @@ namespace OpenSim.Region.CoreModules | |||
418 | } | 418 | } |
419 | 419 | ||
420 | avatar.ControllingClient.SendWindData(windSpeeds); | 420 | avatar.ControllingClient.SendWindData(windSpeeds); |
421 | } | 421 | } |
422 | } | 422 | } |
423 | 423 | ||
424 | private void SendWindAllClients() | 424 | private void SendWindAllClients() |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs index 4783b35..436f332 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs | |||
@@ -33,6 +33,8 @@ using OpenSim.Framework; | |||
33 | using OpenSim.Region.Framework.Interfaces; | 33 | using OpenSim.Region.Framework.Interfaces; |
34 | using OpenSim.Region.Framework.Scenes; | 34 | using OpenSim.Region.Framework.Scenes; |
35 | using OpenSim.Region.Framework.Scenes.Hypergrid; | 35 | using OpenSim.Region.Framework.Scenes.Hypergrid; |
36 | using OpenSim.Services.Interfaces; | ||
37 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
36 | 38 | ||
37 | namespace OpenSim.Region.CoreModules.World.WorldMap | 39 | namespace OpenSim.Region.CoreModules.World.WorldMap |
38 | { | 40 | { |
@@ -92,13 +94,13 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
92 | } | 94 | } |
93 | 95 | ||
94 | // try to fetch from GridServer | 96 | // try to fetch from GridServer |
95 | List<RegionInfo> regionInfos = m_scene.SceneGridService.RequestNamedRegions(mapName, 20); | 97 | List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(UUID.Zero, mapName, 20); |
96 | if (regionInfos == null) | 98 | if (regionInfos == null) |
97 | { | 99 | { |
98 | m_log.Warn("[MAPSEARCHMODULE]: RequestNamedRegions returned null. Old gridserver?"); | 100 | m_log.Warn("[MAPSEARCHMODULE]: RequestNamedRegions returned null. Old gridserver?"); |
99 | // service wasn't available; maybe still an old GridServer. Try the old API, though it will return only one region | 101 | // service wasn't available; maybe still an old GridServer. Try the old API, though it will return only one region |
100 | regionInfos = new List<RegionInfo>(); | 102 | regionInfos = new List<GridRegion>(); |
101 | RegionInfo info = m_scene.SceneGridService.RequestClosestRegion(mapName); | 103 | GridRegion info = m_scene.GridService.GetRegionByName(UUID.Zero, mapName); |
102 | if (info != null) regionInfos.Add(info); | 104 | if (info != null) regionInfos.Add(info); |
103 | } | 105 | } |
104 | 106 | ||
@@ -109,11 +111,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
109 | if (mapName.Contains(".") && mapName.Contains(":")) | 111 | if (mapName.Contains(".") && mapName.Contains(":")) |
110 | { | 112 | { |
111 | // It probably is a domain name. Try to link to it. | 113 | // It probably is a domain name. Try to link to it. |
112 | RegionInfo regInfo; | 114 | GridRegion regInfo; |
113 | Scene cScene = GetClientScene(remoteClient); | 115 | Scene cScene = GetClientScene(remoteClient); |
114 | regInfo = HGHyperlink.TryLinkRegion(cScene, remoteClient, mapName); | 116 | IHyperlinkService hyperService = cScene.RequestModuleInterface<IHyperlinkService>(); |
115 | if (regInfo != null) | 117 | if (hyperService != null) |
116 | regionInfos.Add(regInfo); | 118 | { |
119 | regInfo = hyperService.TryLinkRegion(remoteClient, mapName); | ||
120 | if (regInfo != null) | ||
121 | regionInfos.Add(regInfo); | ||
122 | } | ||
117 | } | 123 | } |
118 | } | 124 | } |
119 | 125 | ||
@@ -122,17 +128,17 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
122 | MapBlockData data; | 128 | MapBlockData data; |
123 | if (regionInfos.Count > 0) | 129 | if (regionInfos.Count > 0) |
124 | { | 130 | { |
125 | foreach (RegionInfo info in regionInfos) | 131 | foreach (GridRegion info in regionInfos) |
126 | { | 132 | { |
127 | data = new MapBlockData(); | 133 | data = new MapBlockData(); |
128 | data.Agents = 0; | 134 | data.Agents = 0; |
129 | data.Access = info.AccessLevel; | 135 | data.Access = info.Access; |
130 | data.MapImageId = info.RegionSettings.TerrainImageID; | 136 | data.MapImageId = info.TerrainImage; |
131 | data.Name = info.RegionName; | 137 | data.Name = info.RegionName; |
132 | data.RegionFlags = 0; // TODO not used? | 138 | data.RegionFlags = 0; // TODO not used? |
133 | data.WaterHeight = 0; // not used | 139 | data.WaterHeight = 0; // not used |
134 | data.X = (ushort)info.RegionLocX; | 140 | data.X = (ushort)(info.RegionLocX / Constants.RegionSize); |
135 | data.Y = (ushort)info.RegionLocY; | 141 | data.Y = (ushort)(info.RegionLocY / Constants.RegionSize); |
136 | blocks.Add(data); | 142 | blocks.Add(data); |
137 | } | 143 | } |
138 | } | 144 | } |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 1f25f28..05ed70a 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -48,6 +48,7 @@ using OpenSim.Region.Framework.Scenes; | |||
48 | using Caps=OpenSim.Framework.Capabilities.Caps; | 48 | using Caps=OpenSim.Framework.Capabilities.Caps; |
49 | using OSDArray=OpenMetaverse.StructuredData.OSDArray; | 49 | using OSDArray=OpenMetaverse.StructuredData.OSDArray; |
50 | using OSDMap=OpenMetaverse.StructuredData.OSDMap; | 50 | using OSDMap=OpenMetaverse.StructuredData.OSDMap; |
51 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
51 | 52 | ||
52 | namespace OpenSim.Region.CoreModules.World.WorldMap | 53 | namespace OpenSim.Region.CoreModules.World.WorldMap |
53 | { | 54 | { |
@@ -232,10 +233,20 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
232 | } | 233 | } |
233 | if (lookup) | 234 | if (lookup) |
234 | { | 235 | { |
235 | List<MapBlockData> mapBlocks; | 236 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); ; |
236 | 237 | ||
237 | mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks((int)m_scene.RegionInfo.RegionLocX - 8, (int)m_scene.RegionInfo.RegionLocY - 8, (int)m_scene.RegionInfo.RegionLocX + 8, (int)m_scene.RegionInfo.RegionLocY + 8); | 238 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, |
238 | avatarPresence.ControllingClient.SendMapBlock(mapBlocks,0); | 239 | (int)(m_scene.RegionInfo.RegionLocX - 8) * (int)Constants.RegionSize, |
240 | (int)(m_scene.RegionInfo.RegionLocX + 8) * (int)Constants.RegionSize, | ||
241 | (int)(m_scene.RegionInfo.RegionLocY - 8) * (int)Constants.RegionSize, | ||
242 | (int)(m_scene.RegionInfo.RegionLocY + 8) * (int)Constants.RegionSize); | ||
243 | foreach (GridRegion r in regions) | ||
244 | { | ||
245 | MapBlockData block = new MapBlockData(); | ||
246 | MapBlockFromGridRegion(block, r); | ||
247 | mapBlocks.Add(block); | ||
248 | } | ||
249 | avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0); | ||
239 | 250 | ||
240 | lock (cachedMapBlocks) | 251 | lock (cachedMapBlocks) |
241 | cachedMapBlocks = mapBlocks; | 252 | cachedMapBlocks = mapBlocks; |
@@ -579,7 +590,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
579 | } | 590 | } |
580 | if (httpserver.Length == 0) | 591 | if (httpserver.Length == 0) |
581 | { | 592 | { |
582 | RegionInfo mreg = m_scene.SceneGridService.RequestNeighbouringRegionInfo(regionhandle); | 593 | uint x = 0, y = 0; |
594 | Utils.LongToUInts(regionhandle, out x, out y); | ||
595 | GridRegion mreg = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, (int)x, (int)y); | ||
583 | 596 | ||
584 | if (mreg != null) | 597 | if (mreg != null) |
585 | { | 598 | { |
@@ -719,15 +732,25 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
719 | { | 732 | { |
720 | List<MapBlockData> response = new List<MapBlockData>(); | 733 | List<MapBlockData> response = new List<MapBlockData>(); |
721 | 734 | ||
722 | // this should return one mapblock at most. But make sure: Look whether the one we requested is in there | 735 | // this should return one mapblock at most. |
723 | List<MapBlockData> mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY); | 736 | // (diva note: why?? in that case we should GetRegionByPosition) |
724 | if (mapBlocks != null) | 737 | // But make sure: Look whether the one we requested is in there |
738 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | ||
739 | minX * (int)Constants.RegionSize, | ||
740 | maxX * (int)Constants.RegionSize, | ||
741 | minY * (int)Constants.RegionSize, | ||
742 | maxY * (int)Constants.RegionSize); | ||
743 | |||
744 | if (regions != null) | ||
725 | { | 745 | { |
726 | foreach (MapBlockData block in mapBlocks) | 746 | foreach (GridRegion r in regions) |
727 | { | 747 | { |
728 | if (block.X == minX && block.Y == minY) | 748 | if ((r.RegionLocX == minX * (int)Constants.RegionSize) && |
749 | (r.RegionLocY == minY * (int)Constants.RegionSize)) | ||
729 | { | 750 | { |
730 | // found it => add it to response | 751 | // found it => add it to response |
752 | MapBlockData block = new MapBlockData(); | ||
753 | MapBlockFromGridRegion(block, r); | ||
731 | response.Add(block); | 754 | response.Add(block); |
732 | break; | 755 | break; |
733 | } | 756 | } |
@@ -754,10 +777,30 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
754 | 777 | ||
755 | protected virtual void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) | 778 | protected virtual void GetAndSendBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) |
756 | { | 779 | { |
757 | List<MapBlockData> mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, maxX + 4, maxY + 4); | 780 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); |
781 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | ||
782 | (minX - 4) * (int)Constants.RegionSize, | ||
783 | (maxX + 4) * (int)Constants.RegionSize, | ||
784 | (minY - 4) * (int)Constants.RegionSize, | ||
785 | (maxY + 4) * (int)Constants.RegionSize); | ||
786 | foreach (GridRegion r in regions) | ||
787 | { | ||
788 | MapBlockData block = new MapBlockData(); | ||
789 | MapBlockFromGridRegion(block, r); | ||
790 | mapBlocks.Add(block); | ||
791 | } | ||
758 | remoteClient.SendMapBlock(mapBlocks, flag); | 792 | remoteClient.SendMapBlock(mapBlocks, flag); |
759 | } | 793 | } |
760 | 794 | ||
795 | protected void MapBlockFromGridRegion(MapBlockData block, GridRegion r) | ||
796 | { | ||
797 | block.Access = r.Access; | ||
798 | block.MapImageId = r.TerrainImage; | ||
799 | block.Name = r.RegionName; | ||
800 | block.X = (ushort)(r.RegionLocX / Constants.RegionSize); | ||
801 | block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); | ||
802 | } | ||
803 | |||
761 | public Hashtable OnHTTPGetMapImage(Hashtable keysvals) | 804 | public Hashtable OnHTTPGetMapImage(Hashtable keysvals) |
762 | { | 805 | { |
763 | m_log.Debug("[WORLD MAP]: Sending map image jpeg"); | 806 | m_log.Debug("[WORLD MAP]: Sending map image jpeg"); |
@@ -874,31 +917,34 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
874 | m_log.InfoFormat( | 917 | m_log.InfoFormat( |
875 | "[WORLD MAP]: Exporting world map for {0} to {1}", m_scene.RegionInfo.RegionName, exportPath); | 918 | "[WORLD MAP]: Exporting world map for {0} to {1}", m_scene.RegionInfo.RegionName, exportPath); |
876 | 919 | ||
877 | List<MapBlockData> mapBlocks = | 920 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); |
878 | m_scene.CommsManager.GridService.RequestNeighbourMapBlocks( | 921 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, |
879 | (int)(m_scene.RegionInfo.RegionLocX - 9), | 922 | (int)(m_scene.RegionInfo.RegionLocX - 9) * (int)Constants.RegionSize, |
880 | (int)(m_scene.RegionInfo.RegionLocY - 9), | 923 | (int)(m_scene.RegionInfo.RegionLocX + 9) * (int)Constants.RegionSize, |
881 | (int)(m_scene.RegionInfo.RegionLocX + 9), | 924 | (int)(m_scene.RegionInfo.RegionLocY - 9) * (int)Constants.RegionSize, |
882 | (int)(m_scene.RegionInfo.RegionLocY + 9)); | 925 | (int)(m_scene.RegionInfo.RegionLocY + 9) * (int)Constants.RegionSize); |
883 | List<AssetBase> textures = new List<AssetBase>(); | 926 | List<AssetBase> textures = new List<AssetBase>(); |
884 | List<Image> bitImages = new List<Image>(); | 927 | List<Image> bitImages = new List<Image>(); |
885 | 928 | ||
886 | foreach (MapBlockData mapBlock in mapBlocks) | 929 | foreach (GridRegion r in regions) |
887 | { | 930 | { |
931 | MapBlockData mapBlock = new MapBlockData(); | ||
932 | MapBlockFromGridRegion(mapBlock, r); | ||
888 | AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); | 933 | AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); |
889 | 934 | ||
890 | if (texAsset != null) | 935 | if (texAsset != null) |
891 | { | 936 | { |
892 | textures.Add(texAsset); | 937 | textures.Add(texAsset); |
893 | } | 938 | } |
894 | else | 939 | //else |
895 | { | 940 | //{ |
896 | texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); | 941 | // // WHAT?!? This doesn't seem right. Commenting (diva) |
897 | if (texAsset != null) | 942 | // texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); |
898 | { | 943 | // if (texAsset != null) |
899 | textures.Add(texAsset); | 944 | // { |
900 | } | 945 | // textures.Add(texAsset); |
901 | } | 946 | // } |
947 | //} | ||
902 | } | 948 | } |
903 | 949 | ||
904 | foreach (AssetBase asset in textures) | 950 | foreach (AssetBase asset in textures) |