diff options
author | Melanie | 2011-06-20 03:08:56 +0200 |
---|---|---|
committer | Melanie | 2011-06-20 03:08:56 +0200 |
commit | f4f55c4d6bdbe9a86b5343159916977b331fefe0 (patch) | |
tree | 08fb85f2aa0193bf8549e684b98501c2c52faa1a /OpenSim/Region/CoreModules/Framework | |
parent | Add some flags to control content in search better (diff) | |
parent | Merge branch 'master' into careminster-presence-refactor (diff) | |
download | opensim-SC-f4f55c4d6bdbe9a86b5343159916977b331fefe0.zip opensim-SC-f4f55c4d6bdbe9a86b5343159916977b331fefe0.tar.gz opensim-SC-f4f55c4d6bdbe9a86b5343159916977b331fefe0.tar.bz2 opensim-SC-f4f55c4d6bdbe9a86b5343159916977b331fefe0.tar.xz |
Merge branch 'careminster-presence-refactor' of ssh://3dhosting.de/var/git/careminster into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework')
5 files changed, 301 insertions, 22 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 1fb346e..02efcd8 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -52,6 +52,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
52 | 52 | ||
53 | protected bool m_Enabled = false; | 53 | protected bool m_Enabled = false; |
54 | protected Scene m_aScene; | 54 | protected Scene m_aScene; |
55 | protected List<Scene> m_Scenes = new List<Scene>(); | ||
55 | protected List<UUID> m_agentsInTransit; | 56 | protected List<UUID> m_agentsInTransit; |
56 | private ExpiringCache<UUID, ExpiringCache<ulong, DateTime>> m_bannedRegions = | 57 | private ExpiringCache<UUID, ExpiringCache<ulong, DateTime>> m_bannedRegions = |
57 | new ExpiringCache<UUID, ExpiringCache<ulong, DateTime>>(); | 58 | new ExpiringCache<UUID, ExpiringCache<ulong, DateTime>>(); |
@@ -96,13 +97,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
96 | if (m_aScene == null) | 97 | if (m_aScene == null) |
97 | m_aScene = scene; | 98 | m_aScene = scene; |
98 | 99 | ||
100 | m_Scenes.Add(scene); | ||
99 | scene.RegisterModuleInterface<IEntityTransferModule>(this); | 101 | scene.RegisterModuleInterface<IEntityTransferModule>(this); |
100 | scene.EventManager.OnNewClient += OnNewClient; | 102 | scene.EventManager.OnNewClient += OnNewClient; |
101 | } | 103 | } |
102 | 104 | ||
103 | protected virtual void OnNewClient(IClientAPI client) | 105 | protected virtual void OnNewClient(IClientAPI client) |
104 | { | 106 | { |
105 | client.OnTeleportHomeRequest += TeleportHomeFired; | 107 | client.OnTeleportHomeRequest += TriggerTeleportHome; |
108 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; | ||
106 | } | 109 | } |
107 | 110 | ||
108 | public virtual void Close() | 111 | public virtual void Close() |
@@ -118,6 +121,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
118 | return; | 121 | return; |
119 | if (scene == m_aScene) | 122 | if (scene == m_aScene) |
120 | m_aScene = null; | 123 | m_aScene = null; |
124 | |||
125 | m_Scenes.Remove(scene); | ||
121 | } | 126 | } |
122 | 127 | ||
123 | public virtual void RegionLoaded(Scene scene) | 128 | public virtual void RegionLoaded(Scene scene) |
@@ -127,7 +132,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
127 | 132 | ||
128 | } | 133 | } |
129 | 134 | ||
130 | |||
131 | #endregion | 135 | #endregion |
132 | 136 | ||
133 | #region Agent Teleports | 137 | #region Agent Teleports |
@@ -249,7 +253,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
249 | } | 253 | } |
250 | } | 254 | } |
251 | 255 | ||
252 | protected void DoTeleport(ScenePresence sp, GridRegion reg, GridRegion finalDestination, Vector3 position, Vector3 lookAt, uint teleportFlags, IEventQueue eq) | 256 | public void DoTeleport(ScenePresence sp, GridRegion reg, GridRegion finalDestination, Vector3 position, Vector3 lookAt, uint teleportFlags, IEventQueue eq) |
253 | { | 257 | { |
254 | if (reg == null || finalDestination == null) | 258 | if (reg == null || finalDestination == null) |
255 | { | 259 | { |
@@ -557,9 +561,32 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
557 | 561 | ||
558 | #endregion | 562 | #endregion |
559 | 563 | ||
564 | #region Landmark Teleport | ||
565 | /// <summary> | ||
566 | /// Tries to teleport agent to landmark. | ||
567 | /// </summary> | ||
568 | /// <param name="remoteClient"></param> | ||
569 | /// <param name="regionHandle"></param> | ||
570 | /// <param name="position"></param> | ||
571 | public virtual void RequestTeleportLandmark(IClientAPI remoteClient, AssetLandmark lm) | ||
572 | { | ||
573 | GridRegion info = m_aScene.GridService.GetRegionByUUID(UUID.Zero, lm.RegionID); | ||
574 | |||
575 | if (info == null) | ||
576 | { | ||
577 | // can't find the region: Tell viewer and abort | ||
578 | remoteClient.SendTeleportFailed("The teleport destination could not be found."); | ||
579 | return; | ||
580 | } | ||
581 | ((Scene)(remoteClient.Scene)).RequestTeleportLocation(remoteClient, info.RegionHandle, lm.Position, | ||
582 | Vector3.Zero, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark)); | ||
583 | } | ||
584 | |||
585 | #endregion | ||
586 | |||
560 | #region Teleport Home | 587 | #region Teleport Home |
561 | 588 | ||
562 | public void TeleportHomeFired(UUID id, IClientAPI client) | 589 | public virtual void TriggerTeleportHome(UUID id, IClientAPI client) |
563 | { | 590 | { |
564 | TeleportHome(id, client); | 591 | TeleportHome(id, client); |
565 | } | 592 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 1ccbcfd..8858ad5 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs | |||
@@ -86,7 +86,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
86 | 86 | ||
87 | protected override void OnNewClient(IClientAPI client) | 87 | protected override void OnNewClient(IClientAPI client) |
88 | { | 88 | { |
89 | client.OnTeleportHomeRequest += TeleportHomeFired; | 89 | client.OnTeleportHomeRequest += TriggerTeleportHome; |
90 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; | ||
90 | client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed); | 91 | client.OnConnectionClosed += new Action<IClientAPI>(OnConnectionClosed); |
91 | } | 92 | } |
92 | 93 | ||
@@ -146,8 +147,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
146 | { | 147 | { |
147 | base.AgentHasMovedAway(sp, logout); | 148 | base.AgentHasMovedAway(sp, logout); |
148 | if (logout) | 149 | if (logout) |
150 | { | ||
149 | // Log them out of this grid | 151 | // Log them out of this grid |
150 | m_aScene.PresenceService.LogoutAgent(sp.ControllingClient.SessionId); | 152 | m_aScene.PresenceService.LogoutAgent(sp.ControllingClient.SessionId); |
153 | } | ||
151 | } | 154 | } |
152 | 155 | ||
153 | protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout) | 156 | protected override bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout) |
@@ -178,7 +181,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
178 | return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason); | 181 | return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason); |
179 | } | 182 | } |
180 | 183 | ||
181 | public void TeleportHomeFired(UUID id, IClientAPI client) | 184 | public void TriggerTeleportHome(UUID id, IClientAPI client) |
182 | { | 185 | { |
183 | TeleportHome(id, client); | 186 | TeleportHome(id, client); |
184 | } | 187 | } |
@@ -233,6 +236,57 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
233 | DoTeleport(sp, homeGatekeeper, finalDestination, position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome), eq); | 236 | DoTeleport(sp, homeGatekeeper, finalDestination, position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome), eq); |
234 | return true; | 237 | return true; |
235 | } | 238 | } |
239 | |||
240 | /// <summary> | ||
241 | /// Tries to teleport agent to landmark. | ||
242 | /// </summary> | ||
243 | /// <param name="remoteClient"></param> | ||
244 | /// <param name="regionHandle"></param> | ||
245 | /// <param name="position"></param> | ||
246 | public override void RequestTeleportLandmark(IClientAPI remoteClient, AssetLandmark lm) | ||
247 | { | ||
248 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Teleporting agent via landmark to {0} region {1} position {2}", | ||
249 | (lm.Gatekeeper == string.Empty) ? "local" : lm.Gatekeeper, lm.RegionID, lm.Position); | ||
250 | if (lm.Gatekeeper == string.Empty) | ||
251 | { | ||
252 | base.RequestTeleportLandmark(remoteClient, lm); | ||
253 | return; | ||
254 | } | ||
255 | |||
256 | GridRegion info = m_aScene.GridService.GetRegionByUUID(UUID.Zero, lm.RegionID); | ||
257 | |||
258 | // Local region? | ||
259 | if (info != null) | ||
260 | { | ||
261 | ((Scene)(remoteClient.Scene)).RequestTeleportLocation(remoteClient, info.RegionHandle, lm.Position, | ||
262 | Vector3.Zero, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark)); | ||
263 | return; | ||
264 | } | ||
265 | else | ||
266 | { | ||
267 | // Foreign region | ||
268 | Scene scene = (Scene)(remoteClient.Scene); | ||
269 | GatekeeperServiceConnector gConn = new GatekeeperServiceConnector(); | ||
270 | GridRegion gatekeeper = new GridRegion(); | ||
271 | gatekeeper.ServerURI = lm.Gatekeeper; | ||
272 | GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(lm.RegionID)); | ||
273 | if (finalDestination != null) | ||
274 | { | ||
275 | ScenePresence sp = scene.GetScenePresence(remoteClient.AgentId); | ||
276 | IEntityTransferModule transferMod = scene.RequestModuleInterface<IEntityTransferModule>(); | ||
277 | IEventQueue eq = sp.Scene.RequestModuleInterface<IEventQueue>(); | ||
278 | if (transferMod != null && sp != null && eq != null) | ||
279 | transferMod.DoTeleport(sp, gatekeeper, finalDestination, lm.Position, | ||
280 | Vector3.UnitX, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark), eq); | ||
281 | } | ||
282 | |||
283 | } | ||
284 | |||
285 | // can't find the region: Tell viewer and abort | ||
286 | remoteClient.SendTeleportFailed("The teleport destination could not be found."); | ||
287 | |||
288 | } | ||
289 | |||
236 | #endregion | 290 | #endregion |
237 | 291 | ||
238 | #region IUserAgentVerificationModule | 292 | #region IUserAgentVerificationModule |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index 52791cb..49d484b 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs | |||
@@ -56,6 +56,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
56 | 56 | ||
57 | private string m_ProfileServerURI; | 57 | private string m_ProfileServerURI; |
58 | private bool m_OutboundPermission; | 58 | private bool m_OutboundPermission; |
59 | private string m_ThisGatekeeper; | ||
59 | 60 | ||
60 | // private bool m_Initialized = false; | 61 | // private bool m_Initialized = false; |
61 | 62 | ||
@@ -85,6 +86,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
85 | { | 86 | { |
86 | m_ProfileServerURI = thisModuleConfig.GetString("ProfileServerURI", string.Empty); | 87 | m_ProfileServerURI = thisModuleConfig.GetString("ProfileServerURI", string.Empty); |
87 | m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); | 88 | m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); |
89 | m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty); | ||
88 | } | 90 | } |
89 | else | 91 | else |
90 | m_log.Warn("[HG INVENTORY ACCESS MODULE]: HGInventoryAccessModule configs not found. ProfileServerURI not set!"); | 92 | m_log.Warn("[HG INVENTORY ACCESS MODULE]: HGInventoryAccessModule configs not found. ProfileServerURI not set!"); |
@@ -110,7 +112,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
110 | public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel) | 112 | public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel) |
111 | { | 113 | { |
112 | string userAssetServer = string.Empty; | 114 | string userAssetServer = string.Empty; |
113 | if (IsForeignUser(avatarID, out userAssetServer) && m_OutboundPermission) | 115 | if (IsForeignUser(avatarID, out userAssetServer) && userAssetServer != string.Empty && m_OutboundPermission) |
114 | { | 116 | { |
115 | Util.FireAndForget(delegate { m_assMapper.Post(assetID, avatarID, userAssetServer); }); | 117 | Util.FireAndForget(delegate { m_assMapper.Post(assetID, avatarID, userAssetServer); }); |
116 | } | 118 | } |
@@ -119,6 +121,24 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
119 | #endregion | 121 | #endregion |
120 | 122 | ||
121 | #region Overrides of Basic Inventory Access methods | 123 | #region Overrides of Basic Inventory Access methods |
124 | |||
125 | protected override string GenerateLandmark(ScenePresence presence, out string prefix, out string suffix) | ||
126 | { | ||
127 | UserAccount account = m_Scene.UserAccountService.GetUserAccount(m_Scene.RegionInfo.ScopeID, presence.UUID); | ||
128 | if (account == null) | ||
129 | prefix = "HG "; | ||
130 | else | ||
131 | prefix = string.Empty; | ||
132 | suffix = " @ " + m_ThisGatekeeper; | ||
133 | Vector3 pos = presence.AbsolutePosition; | ||
134 | return String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\ngatekeeper {5}\n", | ||
135 | presence.Scene.RegionInfo.RegionID, | ||
136 | pos.X, pos.Y, pos.Z, | ||
137 | presence.RegionHandle, | ||
138 | m_ThisGatekeeper); | ||
139 | } | ||
140 | |||
141 | |||
122 | /// | 142 | /// |
123 | /// CapsUpdateInventoryItemAsset | 143 | /// CapsUpdateInventoryItemAsset |
124 | /// | 144 | /// |
@@ -180,10 +200,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
180 | public override void TransferInventoryAssets(InventoryItemBase item, UUID sender, UUID receiver) | 200 | public override void TransferInventoryAssets(InventoryItemBase item, UUID sender, UUID receiver) |
181 | { | 201 | { |
182 | string userAssetServer = string.Empty; | 202 | string userAssetServer = string.Empty; |
183 | if (IsForeignUser(sender, out userAssetServer)) | 203 | if (IsForeignUser(sender, out userAssetServer) && userAssetServer != string.Empty) |
184 | m_assMapper.Get(item.AssetID, sender, userAssetServer); | 204 | m_assMapper.Get(item.AssetID, sender, userAssetServer); |
185 | 205 | ||
186 | if (IsForeignUser(receiver, out userAssetServer) && m_OutboundPermission) | 206 | if (IsForeignUser(receiver, out userAssetServer) && userAssetServer != string.Empty && m_OutboundPermission) |
187 | m_assMapper.Post(item.AssetID, receiver, userAssetServer); | 207 | m_assMapper.Post(item.AssetID, receiver, userAssetServer); |
188 | } | 208 | } |
189 | 209 | ||
@@ -203,9 +223,15 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
203 | if (aCircuit.ServiceURLs.ContainsKey("AssetServerURI")) | 223 | if (aCircuit.ServiceURLs.ContainsKey("AssetServerURI")) |
204 | { | 224 | { |
205 | assetServerURL = aCircuit.ServiceURLs["AssetServerURI"].ToString(); | 225 | assetServerURL = aCircuit.ServiceURLs["AssetServerURI"].ToString(); |
206 | assetServerURL = assetServerURL.Trim(new char[] { '/' }); return true; | 226 | assetServerURL = assetServerURL.Trim(new char[] { '/' }); |
207 | } | 227 | } |
208 | } | 228 | } |
229 | else | ||
230 | { | ||
231 | assetServerURL = UserManagementModule.GetUserServerURL(userID, "AssetServerURI"); | ||
232 | assetServerURL = assetServerURL.Trim(new char[] { '/' }); | ||
233 | } | ||
234 | return true; | ||
209 | } | 235 | } |
210 | 236 | ||
211 | return false; | 237 | return false; |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 184b223..7bad814 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -30,6 +30,7 @@ using System.Collections.Generic; | |||
30 | using System.Net; | 30 | using System.Net; |
31 | using System.Xml; | 31 | using System.Xml; |
32 | using System.Reflection; | 32 | using System.Reflection; |
33 | using System.Text; | ||
33 | using System.Threading; | 34 | using System.Threading; |
34 | 35 | ||
35 | using OpenSim.Framework; | 36 | using OpenSim.Framework; |
@@ -128,7 +129,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
128 | 129 | ||
129 | protected virtual void OnNewClient(IClientAPI client) | 130 | protected virtual void OnNewClient(IClientAPI client) |
130 | { | 131 | { |
131 | 132 | client.OnCreateNewInventoryItem += CreateNewInventoryItem; | |
132 | } | 133 | } |
133 | 134 | ||
134 | public virtual void Close() | 135 | public virtual void Close() |
@@ -157,6 +158,87 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
157 | #region Inventory Access | 158 | #region Inventory Access |
158 | 159 | ||
159 | /// <summary> | 160 | /// <summary> |
161 | /// Create a new inventory item. Called when the client creates a new item directly within their | ||
162 | /// inventory (e.g. by selecting a context inventory menu option). | ||
163 | /// </summary> | ||
164 | /// <param name="remoteClient"></param> | ||
165 | /// <param name="transactionID"></param> | ||
166 | /// <param name="folderID"></param> | ||
167 | /// <param name="callbackID"></param> | ||
168 | /// <param name="description"></param> | ||
169 | /// <param name="name"></param> | ||
170 | /// <param name="invType"></param> | ||
171 | /// <param name="type"></param> | ||
172 | /// <param name="wearableType"></param> | ||
173 | /// <param name="nextOwnerMask"></param> | ||
174 | public void CreateNewInventoryItem(IClientAPI remoteClient, UUID transactionID, UUID folderID, | ||
175 | uint callbackID, string description, string name, sbyte invType, | ||
176 | sbyte assetType, | ||
177 | byte wearableType, uint nextOwnerMask, int creationDate) | ||
178 | { | ||
179 | m_log.DebugFormat("[AGENT INVENTORY]: Received request to create inventory item {0} in folder {1}", name, folderID); | ||
180 | |||
181 | if (!m_Scene.Permissions.CanCreateUserInventory(invType, remoteClient.AgentId)) | ||
182 | return; | ||
183 | |||
184 | InventoryFolderBase f = new InventoryFolderBase(folderID, remoteClient.AgentId); | ||
185 | InventoryFolderBase folder = m_Scene.InventoryService.GetFolder(f); | ||
186 | |||
187 | if (folder == null || folder.Owner != remoteClient.AgentId) | ||
188 | return; | ||
189 | |||
190 | if (transactionID == UUID.Zero) | ||
191 | { | ||
192 | ScenePresence presence; | ||
193 | if (m_Scene.TryGetScenePresence(remoteClient.AgentId, out presence)) | ||
194 | { | ||
195 | byte[] data = null; | ||
196 | |||
197 | if (invType == (sbyte)InventoryType.Landmark && presence != null) | ||
198 | { | ||
199 | string suffix = string.Empty, prefix = string.Empty; | ||
200 | string strdata = GenerateLandmark(presence, out prefix, out suffix); | ||
201 | data = Encoding.ASCII.GetBytes(strdata); | ||
202 | name = prefix + name; | ||
203 | description += suffix; | ||
204 | } | ||
205 | |||
206 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); | ||
207 | m_Scene.AssetService.Store(asset); | ||
208 | |||
209 | m_Scene.CreateNewInventoryItem(remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, asset.Name, 0, callbackID, asset, invType, nextOwnerMask, creationDate); | ||
210 | } | ||
211 | else | ||
212 | { | ||
213 | m_log.ErrorFormat( | ||
214 | "ScenePresence for agent uuid {0} unexpectedly not found in CreateNewInventoryItem", | ||
215 | remoteClient.AgentId); | ||
216 | } | ||
217 | } | ||
218 | else | ||
219 | { | ||
220 | IAgentAssetTransactions agentTransactions = m_Scene.RequestModuleInterface<IAgentAssetTransactions>(); | ||
221 | if (agentTransactions != null) | ||
222 | { | ||
223 | agentTransactions.HandleItemCreationFromTransaction( | ||
224 | remoteClient, transactionID, folderID, callbackID, description, | ||
225 | name, invType, assetType, wearableType, nextOwnerMask); | ||
226 | } | ||
227 | } | ||
228 | } | ||
229 | |||
230 | protected virtual string GenerateLandmark(ScenePresence presence, out string prefix, out string suffix) | ||
231 | { | ||
232 | prefix = string.Empty; | ||
233 | suffix = string.Empty; | ||
234 | Vector3 pos = presence.AbsolutePosition; | ||
235 | return String.Format("Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", | ||
236 | presence.Scene.RegionInfo.RegionID, | ||
237 | pos.X, pos.Y, pos.Z, | ||
238 | presence.RegionHandle); | ||
239 | } | ||
240 | |||
241 | /// <summary> | ||
160 | /// Capability originating call to update the asset of an item in an agent's inventory | 242 | /// Capability originating call to update the asset of an item in an agent's inventory |
161 | /// </summary> | 243 | /// </summary> |
162 | /// <param name="remoteClient"></param> | 244 | /// <param name="remoteClient"></param> |
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index 4cc6905..accd094 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -30,11 +30,13 @@ using System.IO; | |||
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | 31 | ||
32 | using OpenSim.Framework; | 32 | using OpenSim.Framework; |
33 | using OpenSim.Framework.Console; | ||
33 | 34 | ||
34 | using OpenSim.Region.Framework; | 35 | using OpenSim.Region.Framework; |
35 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
36 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
37 | using OpenSim.Services.Interfaces; | 38 | using OpenSim.Services.Interfaces; |
39 | using OpenSim.Services.Connectors.Hypergrid; | ||
38 | 40 | ||
39 | using OpenMetaverse; | 41 | using OpenMetaverse; |
40 | using log4net; | 42 | using log4net; |
@@ -47,7 +49,8 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
47 | public UUID Id; | 49 | public UUID Id; |
48 | public string FirstName; | 50 | public string FirstName; |
49 | public string LastName; | 51 | public string LastName; |
50 | public string ProfileURL; | 52 | public string HomeURL; |
53 | public Dictionary<string, object> ServerURLs; | ||
51 | } | 54 | } |
52 | 55 | ||
53 | public class UserManagementModule : ISharedRegionModule, IUserManagement | 56 | public class UserManagementModule : ISharedRegionModule, IUserManagement |
@@ -78,6 +81,14 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
78 | // } | 81 | // } |
79 | // } | 82 | // } |
80 | //} | 83 | //} |
84 | MainConsole.Instance.Commands.AddCommand("grid", true, | ||
85 | "show names", | ||
86 | "show names", | ||
87 | "Show the bindings between user UUIDs and user names", | ||
88 | String.Empty, | ||
89 | HandleShowUsers); | ||
90 | |||
91 | |||
81 | } | 92 | } |
82 | 93 | ||
83 | public bool IsSharedModule | 94 | public bool IsSharedModule |
@@ -101,6 +112,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
101 | 112 | ||
102 | scene.RegisterModuleInterface<IUserManagement>(this); | 113 | scene.RegisterModuleInterface<IUserManagement>(this); |
103 | scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient); | 114 | scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient); |
115 | scene.EventManager.OnPrimsLoaded += new EventManager.PrimsLoaded(EventManager_OnPrimsLoaded); | ||
104 | } | 116 | } |
105 | 117 | ||
106 | public void RemoveRegion(Scene scene) | 118 | public void RemoveRegion(Scene scene) |
@@ -109,18 +121,12 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
109 | m_Scenes.Remove(scene); | 121 | m_Scenes.Remove(scene); |
110 | } | 122 | } |
111 | 123 | ||
112 | public void RegionLoaded(Scene scene) | 124 | public void RegionLoaded(Scene s) |
113 | { | 125 | { |
114 | } | 126 | } |
115 | 127 | ||
116 | public void PostInitialise() | 128 | public void PostInitialise() |
117 | { | 129 | { |
118 | foreach (Scene s in m_Scenes) | ||
119 | { | ||
120 | // let's sniff all the user names referenced by objects in the scene | ||
121 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: Caching creators' data from {0} ({1} objects)...", s.RegionInfo.RegionName, s.GetEntities().Length); | ||
122 | s.ForEachSOG(delegate(SceneObjectGroup sog) { CacheCreators(sog); }); | ||
123 | } | ||
124 | } | 130 | } |
125 | 131 | ||
126 | public void Close() | 132 | public void Close() |
@@ -134,6 +140,14 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
134 | 140 | ||
135 | #region Event Handlers | 141 | #region Event Handlers |
136 | 142 | ||
143 | void EventManager_OnPrimsLoaded(Scene s) | ||
144 | { | ||
145 | // let's sniff all the user names referenced by objects in the scene | ||
146 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: Caching creators' data from {0} ({1} objects)...", s.RegionInfo.RegionName, s.GetEntities().Length); | ||
147 | s.ForEachSOG(delegate(SceneObjectGroup sog) { CacheCreators(sog); }); | ||
148 | } | ||
149 | |||
150 | |||
137 | void EventManager_OnNewClient(IClientAPI client) | 151 | void EventManager_OnNewClient(IClientAPI client) |
138 | { | 152 | { |
139 | client.OnNameFromUUIDRequest += new UUIDNameRequest(HandleUUIDNameRequest); | 153 | client.OnNameFromUUIDRequest += new UUIDNameRequest(HandleUUIDNameRequest); |
@@ -150,6 +164,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
150 | string[] names = GetUserNames(uuid); | 164 | string[] names = GetUserNames(uuid); |
151 | if (names.Length == 2) | 165 | if (names.Length == 2) |
152 | { | 166 | { |
167 | //m_log.DebugFormat("[XXX] HandleUUIDNameRequest {0} is {1} {2}", uuid, names[0], names[1]); | ||
153 | remote_client.SendNameReply(uuid, names[0], names[1]); | 168 | remote_client.SendNameReply(uuid, names[0], names[1]); |
154 | } | 169 | } |
155 | 170 | ||
@@ -210,6 +225,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
210 | 225 | ||
211 | public string GetUserName(UUID uuid) | 226 | public string GetUserName(UUID uuid) |
212 | { | 227 | { |
228 | //m_log.DebugFormat("[XXX] GetUserName {0}", uuid); | ||
213 | string[] names = GetUserNames(uuid); | 229 | string[] names = GetUserNames(uuid); |
214 | if (names.Length == 2) | 230 | if (names.Length == 2) |
215 | { | 231 | { |
@@ -222,6 +238,60 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
222 | return "(hippos)"; | 238 | return "(hippos)"; |
223 | } | 239 | } |
224 | 240 | ||
241 | public string GetUserHomeURL(UUID userID) | ||
242 | { | ||
243 | if (m_UserCache.ContainsKey(userID)) | ||
244 | return m_UserCache[userID].HomeURL; | ||
245 | |||
246 | return string.Empty; | ||
247 | } | ||
248 | |||
249 | public string GetUserServerURL(UUID userID, string serverType) | ||
250 | { | ||
251 | if (m_UserCache.ContainsKey(userID)) | ||
252 | { | ||
253 | UserData userdata = m_UserCache[userID]; | ||
254 | if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null) | ||
255 | return userdata.ServerURLs[serverType].ToString(); | ||
256 | |||
257 | if (userdata.HomeURL != string.Empty) | ||
258 | { | ||
259 | UserAgentServiceConnector uConn = new UserAgentServiceConnector(userdata.HomeURL); | ||
260 | userdata.ServerURLs = uConn.GetServerURLs(userID); | ||
261 | if (userdata.ServerURLs != null && userdata.ServerURLs.ContainsKey(serverType) && userdata.ServerURLs[serverType] != null) | ||
262 | return userdata.ServerURLs[serverType].ToString(); | ||
263 | } | ||
264 | } | ||
265 | |||
266 | return string.Empty; | ||
267 | } | ||
268 | |||
269 | public string GetUserUUI(UUID userID) | ||
270 | { | ||
271 | UserAccount account = m_Scenes[0].UserAccountService.GetUserAccount(m_Scenes[0].RegionInfo.ScopeID, userID); | ||
272 | if (account != null) | ||
273 | return userID.ToString(); | ||
274 | |||
275 | if (m_UserCache.ContainsKey(userID)) | ||
276 | { | ||
277 | UserData ud = m_UserCache[userID]; | ||
278 | string homeURL = ud.HomeURL; | ||
279 | string first = ud.FirstName, last = ud.LastName; | ||
280 | if (ud.LastName.StartsWith("@")) | ||
281 | { | ||
282 | string[] parts = ud.FirstName.Split('.'); | ||
283 | if (parts.Length >= 2) | ||
284 | { | ||
285 | first = parts[0]; | ||
286 | last = parts[1]; | ||
287 | } | ||
288 | return userID + ";" + homeURL + ";" + first + " " + last; | ||
289 | } | ||
290 | } | ||
291 | |||
292 | return userID.ToString(); | ||
293 | } | ||
294 | |||
225 | public void AddUser(UUID id, string creatorData) | 295 | public void AddUser(UUID id, string creatorData) |
226 | { | 296 | { |
227 | if (m_UserCache.ContainsKey(id)) | 297 | if (m_UserCache.ContainsKey(id)) |
@@ -247,13 +317,13 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
247 | string[] parts = creatorData.Split(';'); | 317 | string[] parts = creatorData.Split(';'); |
248 | if (parts.Length >= 1) | 318 | if (parts.Length >= 1) |
249 | { | 319 | { |
250 | user.ProfileURL = parts[0]; | 320 | user.HomeURL = parts[0]; |
251 | try | 321 | try |
252 | { | 322 | { |
253 | Uri uri = new Uri(parts[0]); | 323 | Uri uri = new Uri(parts[0]); |
254 | user.LastName = "@" + uri.Authority; | 324 | user.LastName = "@" + uri.Authority; |
255 | } | 325 | } |
256 | catch | 326 | catch (UriFormatException) |
257 | { | 327 | { |
258 | m_log.DebugFormat("[SCENE]: Unable to parse Uri {0}", parts[0]); | 328 | m_log.DebugFormat("[SCENE]: Unable to parse Uri {0}", parts[0]); |
259 | user.LastName = "@unknown"; | 329 | user.LastName = "@unknown"; |
@@ -272,7 +342,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
272 | lock (m_UserCache) | 342 | lock (m_UserCache) |
273 | m_UserCache[id] = user; | 343 | m_UserCache[id] = user; |
274 | 344 | ||
275 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: Added user {0} {1} {2} {3}", user.Id, user.FirstName, user.LastName, user.ProfileURL); | 345 | m_log.DebugFormat("[USER MANAGEMENT MODULE]: Added user {0} {1} {2} {3}", user.Id, user.FirstName, user.LastName, user.HomeURL); |
276 | } | 346 | } |
277 | 347 | ||
278 | public void AddUser(UUID uuid, string first, string last, string profileURL) | 348 | public void AddUser(UUID uuid, string first, string last, string profileURL) |
@@ -311,5 +381,25 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
311 | //} | 381 | //} |
312 | 382 | ||
313 | #endregion IUserManagement | 383 | #endregion IUserManagement |
384 | |||
385 | private void HandleShowUsers(string module, string[] cmd) | ||
386 | { | ||
387 | if (m_UserCache.Count == 0) | ||
388 | { | ||
389 | MainConsole.Instance.Output("No users not found"); | ||
390 | return; | ||
391 | } | ||
392 | |||
393 | MainConsole.Instance.Output("UUID User Name"); | ||
394 | MainConsole.Instance.Output("-----------------------------------------------------------------------------"); | ||
395 | foreach (KeyValuePair<UUID, UserData> kvp in m_UserCache) | ||
396 | { | ||
397 | MainConsole.Instance.Output(String.Format("{0} {1} {2}", | ||
398 | kvp.Key, kvp.Value.FirstName, kvp.Value.LastName)); | ||
399 | } | ||
400 | return; | ||
401 | } | ||
402 | |||
403 | |||
314 | } | 404 | } |
315 | } | 405 | } |