From 7402c2d288045fc817c2da8ae6b336253a57b290 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Mon, 25 Aug 2008 21:26:58 +0000 Subject: * Deal with a WebException thrown if a grid server cannot be contacted for region information --- .../Region/ClientStack/LindenUDP/LLClientView.cs | 2 +- .../Region/Communications/OGS1/OGS1GridServices.cs | 29 +++++++++++++++++----- OpenSim/Region/Environment/Scenes/Scene.cs | 2 ++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 8214045..a30cafd 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -1355,7 +1355,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } /// - /// + /// Inform the client that a teleport attempt has failed /// public void SendTeleportFailed(string reason) { diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index 7baaa16..4346ecb 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs @@ -282,10 +282,14 @@ namespace OpenSim.Region.Communications.OGS1 } /// - /// + /// Request information about a region. /// /// - /// + /// + /// null on a failure to contact or get a response from the grid server + /// FIXME: Might be nicer to return a proper exception here since we could inform the client more about the + /// nature of the faiulre. + /// public RegionInfo RequestNeighbourInfo(LLUUID Region_UUID) { RegionInfo regionInfo; @@ -294,10 +298,23 @@ namespace OpenSim.Region.Communications.OGS1 requestData["authkey"] = serversInfo.GridSendKey; ArrayList SendParams = new ArrayList(); SendParams.Add(requestData); - XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams); - XmlRpcResponse GridResp = GridReq.Send(serversInfo.GridURL, 3000); + XmlRpcRequest gridReq = new XmlRpcRequest("simulator_data_request", SendParams); + XmlRpcResponse gridResp = null; + + try + { + gridResp = gridReq.Send(serversInfo.GridURL, 3000); + } + catch (WebException e) + { + m_log.ErrorFormat( + "[OGS1 GRID SERVICES]: Communication with the grid server at {0} failed, {1}", + serversInfo.GridURL, e); + + return null; + } - Hashtable responseData = (Hashtable) GridResp.Value; + Hashtable responseData = (Hashtable)gridResp.Value; if (responseData.ContainsKey("error")) { @@ -335,7 +352,7 @@ namespace OpenSim.Region.Communications.OGS1 } /// - /// + /// Request information about a region. /// /// /// diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 6f3267a..9b91176 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -2897,12 +2897,14 @@ namespace OpenSim.Region.Environment.Scenes public void RequestTeleportLandmark(IClientAPI remoteClient, LLUUID regionID, LLVector3 position) { RegionInfo info = CommsManager.GridService.RequestNeighbourInfo(regionID); + if (info == null) { // can't find the region: Tell viewer and abort remoteClient.SendTeleportFailed("The teleport destination could not be found."); return; } + lock (m_scenePresences) { if (m_scenePresences.ContainsKey(remoteClient.AgentId)) -- cgit v1.1