diff options
8 files changed, 74 insertions, 16 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs index a34f2d2..317f0e9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs | |||
@@ -239,16 +239,27 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | |||
239 | GatekeeperServiceConnector gConn = new GatekeeperServiceConnector(); | 239 | GatekeeperServiceConnector gConn = new GatekeeperServiceConnector(); |
240 | GridRegion gatekeeper = new GridRegion(); | 240 | GridRegion gatekeeper = new GridRegion(); |
241 | gatekeeper.ServerURI = url; | 241 | gatekeeper.ServerURI = url; |
242 | GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(im.RegionID)); | 242 | string message; |
243 | GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(im.RegionID), out message); | ||
243 | if (finalDestination != null) | 244 | if (finalDestination != null) |
244 | { | 245 | { |
245 | ScenePresence sp = scene.GetScenePresence(client.AgentId); | 246 | ScenePresence sp = scene.GetScenePresence(client.AgentId); |
246 | IEntityTransferModule transferMod = scene.RequestModuleInterface<IEntityTransferModule>(); | 247 | IEntityTransferModule transferMod = scene.RequestModuleInterface<IEntityTransferModule>(); |
247 | 248 | ||
248 | if (transferMod != null && sp != null) | 249 | if (transferMod != null && sp != null) |
250 | { | ||
251 | if (message != null) | ||
252 | sp.ControllingClient.SendAgentAlertMessage(message, true); | ||
253 | |||
249 | transferMod.DoTeleport( | 254 | transferMod.DoTeleport( |
250 | sp, gatekeeper, finalDestination, im.Position + new Vector3(0.5f, 0.5f, 0f), | 255 | sp, gatekeeper, finalDestination, im.Position + new Vector3(0.5f, 0.5f, 0f), |
251 | Vector3.UnitX, teleportflags); | 256 | Vector3.UnitX, teleportflags); |
257 | } | ||
258 | } | ||
259 | else | ||
260 | { | ||
261 | m_log.InfoFormat("[HG LURE MODULE]: Lure failed: {0}", message); | ||
262 | client.SendAgentAlertMessage(message, true); | ||
252 | } | 263 | } |
253 | } | 264 | } |
254 | } | 265 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index caeb4f8..92ea62c 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -529,14 +529,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
529 | 529 | ||
530 | if (reg != null) | 530 | if (reg != null) |
531 | { | 531 | { |
532 | finalDestination = GetFinalDestination(reg); | 532 | string message; |
533 | finalDestination = GetFinalDestination(reg, out message); | ||
533 | 534 | ||
534 | if (finalDestination == null) | 535 | if (finalDestination == null) |
535 | { | 536 | { |
536 | m_log.WarnFormat( "{0} Final destination is having problems. Unable to teleport {1} {2}", | 537 | m_log.WarnFormat( "{0} Final destination is having problems. Unable to teleport {1} {2}: {3}", |
537 | LogHeader, sp.Name, sp.UUID); | 538 | LogHeader, sp.Name, sp.UUID, message); |
538 | 539 | ||
539 | sp.ControllingClient.SendTeleportFailed("Problem at destination"); | 540 | sp.ControllingClient.SendTeleportFailed(message); |
540 | return; | 541 | return; |
541 | } | 542 | } |
542 | 543 | ||
@@ -557,6 +558,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
557 | return; | 558 | return; |
558 | } | 559 | } |
559 | 560 | ||
561 | if (message != null) | ||
562 | sp.ControllingClient.SendAgentAlertMessage(message, true); | ||
563 | |||
560 | // | 564 | // |
561 | // This is it | 565 | // This is it |
562 | // | 566 | // |
@@ -1327,8 +1331,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1327 | scene.SendKillObject(new List<uint> { localID }); | 1331 | scene.SendKillObject(new List<uint> { localID }); |
1328 | } | 1332 | } |
1329 | 1333 | ||
1330 | protected virtual GridRegion GetFinalDestination(GridRegion region) | 1334 | protected virtual GridRegion GetFinalDestination(GridRegion region, out string message) |
1331 | { | 1335 | { |
1336 | message = null; | ||
1332 | return region; | 1337 | return region; |
1333 | } | 1338 | } |
1334 | 1339 | ||
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index e354522..fa05c90 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs | |||
@@ -225,19 +225,20 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
225 | 225 | ||
226 | #region HG overrides of IEntiryTransferModule | 226 | #region HG overrides of IEntiryTransferModule |
227 | 227 | ||
228 | protected override GridRegion GetFinalDestination(GridRegion region) | 228 | protected override GridRegion GetFinalDestination(GridRegion region, out string message) |
229 | { | 229 | { |
230 | int flags = Scene.GridService.GetRegionFlags(Scene.RegionInfo.ScopeID, region.RegionID); | 230 | int flags = Scene.GridService.GetRegionFlags(Scene.RegionInfo.ScopeID, region.RegionID); |
231 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: region {0} flags: {1}", region.RegionName, flags); | 231 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: region {0} flags: {1}", region.RegionName, flags); |
232 | message = null; | ||
232 | 233 | ||
233 | if ((flags & (int)OpenSim.Framework.RegionFlags.Hyperlink) != 0) | 234 | if ((flags & (int)OpenSim.Framework.RegionFlags.Hyperlink) != 0) |
234 | { | 235 | { |
235 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Destination region is hyperlink"); | 236 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Destination region is hyperlink"); |
236 | GridRegion real_destination = m_GatekeeperConnector.GetHyperlinkRegion(region, region.RegionID); | 237 | GridRegion real_destination = m_GatekeeperConnector.GetHyperlinkRegion(region, region.RegionID, out message); |
237 | if (real_destination != null) | 238 | if (real_destination != null) |
238 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: GetFinalDestination serveruri -> {0}", real_destination.ServerURI); | 239 | m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: GetFinalDestination: ServerURI={0}", real_destination.ServerURI); |
239 | else | 240 | else |
240 | m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: GetHyperlinkRegion to Gatekeeper {0} failed", region.ServerURI); | 241 | m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: GetHyperlinkRegion of region {0} from Gatekeeper {1} failed: {2}", region.RegionID, region.ServerURI, message); |
241 | return real_destination; | 242 | return real_destination; |
242 | } | 243 | } |
243 | 244 | ||
@@ -533,7 +534,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
533 | GatekeeperServiceConnector gConn = new GatekeeperServiceConnector(); | 534 | GatekeeperServiceConnector gConn = new GatekeeperServiceConnector(); |
534 | GridRegion gatekeeper = new GridRegion(); | 535 | GridRegion gatekeeper = new GridRegion(); |
535 | gatekeeper.ServerURI = lm.Gatekeeper; | 536 | gatekeeper.ServerURI = lm.Gatekeeper; |
536 | GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(lm.RegionID)); | 537 | string message; |
538 | GridRegion finalDestination = gConn.GetHyperlinkRegion(gatekeeper, new UUID(lm.RegionID), out message); | ||
537 | 539 | ||
538 | if (finalDestination != null) | 540 | if (finalDestination != null) |
539 | { | 541 | { |
@@ -541,9 +543,19 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
541 | IEntityTransferModule transferMod = scene.RequestModuleInterface<IEntityTransferModule>(); | 543 | IEntityTransferModule transferMod = scene.RequestModuleInterface<IEntityTransferModule>(); |
542 | 544 | ||
543 | if (transferMod != null && sp != null) | 545 | if (transferMod != null && sp != null) |
546 | { | ||
547 | if (message != null) | ||
548 | sp.ControllingClient.SendAgentAlertMessage(message, true); | ||
549 | |||
544 | transferMod.DoTeleport( | 550 | transferMod.DoTeleport( |
545 | sp, gatekeeper, finalDestination, lm.Position, Vector3.UnitX, | 551 | sp, gatekeeper, finalDestination, lm.Position, Vector3.UnitX, |
546 | (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark)); | 552 | (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark)); |
553 | } | ||
554 | } | ||
555 | else | ||
556 | { | ||
557 | remoteClient.SendTeleportFailed(message); | ||
558 | return; | ||
547 | } | 559 | } |
548 | 560 | ||
549 | } | 561 | } |
diff --git a/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs index f25e6e0..a89d7f7 100644 --- a/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs +++ b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs | |||
@@ -94,11 +94,14 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
94 | UUID regionID = UUID.Zero; | 94 | UUID regionID = UUID.Zero; |
95 | UUID.TryParse(regionID_str, out regionID); | 95 | UUID.TryParse(regionID_str, out regionID); |
96 | 96 | ||
97 | GridRegion regInfo = m_GatekeeperService.GetHyperlinkRegion(regionID); | 97 | string message; |
98 | GridRegion regInfo = m_GatekeeperService.GetHyperlinkRegion(regionID, out message); | ||
98 | 99 | ||
99 | Hashtable hash = new Hashtable(); | 100 | Hashtable hash = new Hashtable(); |
100 | if (regInfo == null) | 101 | if (regInfo == null) |
102 | { | ||
101 | hash["result"] = "false"; | 103 | hash["result"] = "false"; |
104 | } | ||
102 | else | 105 | else |
103 | { | 106 | { |
104 | hash["result"] = "true"; | 107 | hash["result"] = "true"; |
@@ -112,6 +115,10 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
112 | hash["http_port"] = regInfo.HttpPort.ToString(); | 115 | hash["http_port"] = regInfo.HttpPort.ToString(); |
113 | hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString(); | 116 | hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString(); |
114 | } | 117 | } |
118 | |||
119 | if (message != null) | ||
120 | hash["message"] = message; | ||
121 | |||
115 | XmlRpcResponse response = new XmlRpcResponse(); | 122 | XmlRpcResponse response = new XmlRpcResponse(); |
116 | response.Value = hash; | 123 | response.Value = hash; |
117 | return response; | 124 | return response; |
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs index 5d7dcfd..8b1cc27 100644 --- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs | |||
@@ -202,7 +202,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
202 | return mapTile; | 202 | return mapTile; |
203 | } | 203 | } |
204 | 204 | ||
205 | public GridRegion GetHyperlinkRegion(GridRegion gatekeeper, UUID regionID) | 205 | public GridRegion GetHyperlinkRegion(GridRegion gatekeeper, UUID regionID, out string message) |
206 | { | 206 | { |
207 | Hashtable hash = new Hashtable(); | 207 | Hashtable hash = new Hashtable(); |
208 | hash["region_uuid"] = regionID.ToString(); | 208 | hash["region_uuid"] = regionID.ToString(); |
@@ -219,12 +219,14 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
219 | } | 219 | } |
220 | catch (Exception e) | 220 | catch (Exception e) |
221 | { | 221 | { |
222 | message = "Error contacting grid."; | ||
222 | m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Exception " + e.Message); | 223 | m_log.Debug("[GATEKEEPER SERVICE CONNECTOR]: Exception " + e.Message); |
223 | return null; | 224 | return null; |
224 | } | 225 | } |
225 | 226 | ||
226 | if (response.IsFault) | 227 | if (response.IsFault) |
227 | { | 228 | { |
229 | message = "Error contacting grid."; | ||
228 | m_log.ErrorFormat("[GATEKEEPER SERVICE CONNECTOR]: remote call returned an error: {0}", response.FaultString); | 230 | m_log.ErrorFormat("[GATEKEEPER SERVICE CONNECTOR]: remote call returned an error: {0}", response.FaultString); |
229 | return null; | 231 | return null; |
230 | } | 232 | } |
@@ -236,6 +238,14 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
236 | { | 238 | { |
237 | bool success = false; | 239 | bool success = false; |
238 | Boolean.TryParse((string)hash["result"], out success); | 240 | Boolean.TryParse((string)hash["result"], out success); |
241 | |||
242 | if (hash["message"] != null) | ||
243 | message = (string)hash["message"]; | ||
244 | else if (success) | ||
245 | message = null; | ||
246 | else | ||
247 | message = "The teleport destination could not be found."; // probably the dest grid is old and doesn't send 'message', but the most common problem is that the region is unavailable | ||
248 | |||
239 | if (success) | 249 | if (success) |
240 | { | 250 | { |
241 | GridRegion region = new GridRegion(); | 251 | GridRegion region = new GridRegion(); |
@@ -305,6 +315,7 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
305 | } | 315 | } |
306 | catch (Exception e) | 316 | catch (Exception e) |
307 | { | 317 | { |
318 | message = "Error parsing response from grid."; | ||
308 | m_log.Error("[GATEKEEPER SERVICE CONNECTOR]: Got exception while parsing hyperlink response " + e.StackTrace); | 319 | m_log.Error("[GATEKEEPER SERVICE CONNECTOR]: Got exception while parsing hyperlink response " + e.StackTrace); |
309 | return null; | 320 | return null; |
310 | } | 321 | } |
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs index 7a0228b..e9d41c7 100644 --- a/OpenSim/Services/HypergridService/GatekeeperService.cs +++ b/OpenSim/Services/HypergridService/GatekeeperService.cs | |||
@@ -204,15 +204,26 @@ namespace OpenSim.Services.HypergridService | |||
204 | return true; | 204 | return true; |
205 | } | 205 | } |
206 | 206 | ||
207 | public GridRegion GetHyperlinkRegion(UUID regionID) | 207 | public GridRegion GetHyperlinkRegion(UUID regionID, out string message) |
208 | { | 208 | { |
209 | m_log.DebugFormat("[GATEKEEPER SERVICE]: Request to get hyperlink region {0}", regionID); | 209 | m_log.DebugFormat("[GATEKEEPER SERVICE]: Request to get hyperlink region {0}", regionID); |
210 | message = null; | ||
210 | 211 | ||
211 | if (!m_AllowTeleportsToAnyRegion) | 212 | if (!m_AllowTeleportsToAnyRegion) |
213 | { | ||
212 | // Don't even check the given regionID | 214 | // Don't even check the given regionID |
215 | message = "Teleporting to the default region."; | ||
213 | return m_DefaultGatewayRegion; | 216 | return m_DefaultGatewayRegion; |
217 | } | ||
214 | 218 | ||
215 | GridRegion region = m_GridService.GetRegionByUUID(m_ScopeID, regionID); | 219 | GridRegion region = m_GridService.GetRegionByUUID(m_ScopeID, regionID); |
220 | |||
221 | if (region == null) | ||
222 | { | ||
223 | message = "The teleport destination could not be found."; | ||
224 | return null; | ||
225 | } | ||
226 | |||
216 | return region; | 227 | return region; |
217 | } | 228 | } |
218 | 229 | ||
diff --git a/OpenSim/Services/Interfaces/IHypergridServices.cs b/OpenSim/Services/Interfaces/IHypergridServices.cs index bece4c7..a846bad 100644 --- a/OpenSim/Services/Interfaces/IHypergridServices.cs +++ b/OpenSim/Services/Interfaces/IHypergridServices.cs | |||
@@ -37,7 +37,7 @@ namespace OpenSim.Services.Interfaces | |||
37 | public interface IGatekeeperService | 37 | public interface IGatekeeperService |
38 | { | 38 | { |
39 | bool LinkRegion(string regionDescriptor, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason); | 39 | bool LinkRegion(string regionDescriptor, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason); |
40 | GridRegion GetHyperlinkRegion(UUID regionID); | 40 | GridRegion GetHyperlinkRegion(UUID regionID, out string message); |
41 | 41 | ||
42 | bool LoginAgent(AgentCircuitData aCircuit, GridRegion destination, out string reason); | 42 | bool LoginAgent(AgentCircuitData aCircuit, GridRegion destination, out string reason); |
43 | 43 | ||
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index b61b5e8..6d6e3d6 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -750,9 +750,10 @@ namespace OpenSim.Services.LLLoginService | |||
750 | UUID regionID; | 750 | UUID regionID; |
751 | ulong handle; | 751 | ulong handle; |
752 | string imageURL = string.Empty, reason = string.Empty; | 752 | string imageURL = string.Empty, reason = string.Empty; |
753 | string message; | ||
753 | if (m_GatekeeperConnector.LinkRegion(gatekeeper, out regionID, out handle, out domainName, out imageURL, out reason)) | 754 | if (m_GatekeeperConnector.LinkRegion(gatekeeper, out regionID, out handle, out domainName, out imageURL, out reason)) |
754 | { | 755 | { |
755 | GridRegion destination = m_GatekeeperConnector.GetHyperlinkRegion(gatekeeper, regionID); | 756 | GridRegion destination = m_GatekeeperConnector.GetHyperlinkRegion(gatekeeper, regionID, out message); |
756 | return destination; | 757 | return destination; |
757 | } | 758 | } |
758 | 759 | ||