aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications/OGS1
diff options
context:
space:
mode:
authorTleiades Hax2007-10-18 15:10:43 +0000
committerTleiades Hax2007-10-18 15:10:43 +0000
commit05df8571323c535b5c1ce1b0532e88236b143b7e (patch)
tree6f275d5b682231906315363514e98b7b06557fda /OpenSim/Region/Communications/OGS1
parent* Removed some comments (diff)
downloadopensim-SC-05df8571323c535b5c1ce1b0532e88236b143b7e.zip
opensim-SC-05df8571323c535b5c1ce1b0532e88236b143b7e.tar.gz
opensim-SC-05df8571323c535b5c1ce1b0532e88236b143b7e.tar.bz2
opensim-SC-05df8571323c535b5c1ce1b0532e88236b143b7e.tar.xz
Possible fix for: Remoting exceptions with adjacent non-running sims.
Bugs 449, 454, 408, 244, 197 implemented InformClientOfNeighbours as an asynchroneous process, handling timeouts without blocking the main thread. Improved logging of errors, removed catch all in try catch
Diffstat (limited to 'OpenSim/Region/Communications/OGS1')
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs54
1 files changed, 34 insertions, 20 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index 1264052..1a9584a 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -30,9 +30,12 @@ using System;
30using System.Collections; 30using System.Collections;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using System.Net; 32using System.Net;
33using System.Net.Sockets;
33using System.Runtime.Remoting; 34using System.Runtime.Remoting;
34using System.Runtime.Remoting.Channels; 35using System.Runtime.Remoting.Channels;
35using System.Runtime.Remoting.Channels.Tcp; 36using System.Runtime.Remoting.Channels.Tcp;
37using System.Security.Authentication;
38
36using libsecondlife; 39using libsecondlife;
37using Nwc.XmlRpc; 40using Nwc.XmlRpc;
38using OpenSim.Framework; 41using OpenSim.Framework;
@@ -78,7 +81,7 @@ namespace OpenSim.Region.Communications.OGS1
78 // Login / Authentication 81 // Login / Authentication
79 82
80 GridParams["authkey"] = serversInfo.GridSendKey; 83 GridParams["authkey"] = serversInfo.GridSendKey;
81 GridParams["UUID"] = regionInfo.SimUUID.ToStringHyphenated(); 84 GridParams["UUID"] = regionInfo.RegionID.ToStringHyphenated();
82 GridParams["sim_ip"] = regionInfo.ExternalHostName; 85 GridParams["sim_ip"] = regionInfo.ExternalHostName;
83 GridParams["sim_port"] = regionInfo.InternalEndPoint.Port.ToString(); 86 GridParams["sim_port"] = regionInfo.InternalEndPoint.Port.ToString();
84 GridParams["region_locx"] = regionInfo.RegionLocX.ToString(); 87 GridParams["region_locx"] = regionInfo.RegionLocX.ToString();
@@ -115,12 +118,12 @@ namespace OpenSim.Region.Communications.OGS1
115 /// </summary> 118 /// </summary>
116 /// <param name="regionInfo"></param> 119 /// <param name="regionInfo"></param>
117 /// <returns></returns> 120 /// <returns></returns>
118 public List<RegionInfo> RequestNeighbours(RegionInfo regionInfo) 121 public List<SimpleRegionInfo> RequestNeighbours(uint x, uint y)
119 { 122 {
120 123
121 Hashtable respData = MapBlockQuery((int)regionInfo.RegionLocX - 1, (int)regionInfo.RegionLocY - 1, (int)regionInfo.RegionLocX + 1, (int)regionInfo.RegionLocY + 1); 124 Hashtable respData = MapBlockQuery((int)x - 1, (int)y - 1, (int)x + 1, (int)y + 1);
122 125
123 List<RegionInfo> neighbours = new List<RegionInfo>(); 126 List<SimpleRegionInfo> neighbours = new List<SimpleRegionInfo>();
124 127
125 foreach (ArrayList neighboursList in respData.Values) 128 foreach (ArrayList neighboursList in respData.Values)
126 { 129 {
@@ -128,27 +131,20 @@ namespace OpenSim.Region.Communications.OGS1
128 { 131 {
129 uint regX = Convert.ToUInt32(neighbourData["x"]); 132 uint regX = Convert.ToUInt32(neighbourData["x"]);
130 uint regY = Convert.ToUInt32(neighbourData["y"]); 133 uint regY = Convert.ToUInt32(neighbourData["y"]);
131 if ((regionInfo.RegionLocX != regX) || (regionInfo.RegionLocY != regY)) 134 if ((x != regX) || (y != regY))
132 { 135 {
136
133 string simIp = (string)neighbourData["sim_ip"]; 137 string simIp = (string)neighbourData["sim_ip"];
134 138
135 uint port = Convert.ToUInt32(neighbourData["sim_port"]); 139 int port = Convert.ToInt32(neighbourData["sim_port"]);
136 string externalUri = (string)neighbourData["sim_uri"]; 140 string externalUri = (string)neighbourData["sim_uri"];
137 141
138 string externalIpStr = OpenSim.Framework.Utilities.Util.GetHostFromDNS(simIp).ToString(); 142 string externalIpStr = OpenSim.Framework.Utilities.Util.GetHostFromDNS(simIp).ToString();
139 IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(externalIpStr), (int)port); 143 SimpleRegionInfo sri = new SimpleRegionInfo(regX, regY, simIp, port);
140 string neighbourExternalUri = externalUri; 144 sri.RemotingPort = Convert.ToUInt32(neighbourData["remoting_port"]);
141 RegionInfo neighbour = new RegionInfo(regX, regY, neighbourInternalEndPoint, externalIpStr); 145 sri.RegionID = new LLUUID((string)neighbourData["uuid"]);
142
143 //OGS1
144 //neighbour.RegionHandle = (ulong)n["regionhandle"]; is now calculated locally
145
146 neighbour.RegionName = (string)neighbourData["name"];
147 146
148 //OGS1+ 147 neighbours.Add(sri);
149 neighbour.SimUUID = new LLUUID((string)neighbourData["uuid"]);
150
151 neighbours.Add(neighbour);
152 } 148 }
153 } 149 }
154 } 150 }
@@ -199,7 +195,7 @@ namespace OpenSim.Region.Communications.OGS1
199 regionInfo.RemotingPort = Convert.ToUInt32((string)responseData["remoting_port"]); 195 regionInfo.RemotingPort = Convert.ToUInt32((string)responseData["remoting_port"]);
200 regionInfo.RemotingAddress = internalIpStr; 196 regionInfo.RemotingAddress = internalIpStr;
201 197
202 regionInfo.SimUUID = new LLUUID((string)responseData["region_UUID"]); 198 regionInfo.RegionID = new LLUUID((string)responseData["region_UUID"]);
203 regionInfo.RegionName = (string)responseData["region_name"]; 199 regionInfo.RegionName = (string)responseData["region_name"];
204 200
205 return regionInfo; 201 return regionInfo;
@@ -365,6 +361,7 @@ namespace OpenSim.Region.Communications.OGS1
365 OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject( 361 OGS1InterRegionRemoting remObject = (OGS1InterRegionRemoting)Activator.GetObject(
366 typeof(OGS1InterRegionRemoting), 362 typeof(OGS1InterRegionRemoting),
367 "tcp://" + regInfo.RemotingAddress + ":" + regInfo.RemotingPort + "/InterRegions"); 363 "tcp://" + regInfo.RemotingAddress + ":" + regInfo.RemotingPort + "/InterRegions");
364
368 if (remObject != null) 365 if (remObject != null)
369 { 366 {
370 retValue = remObject.InformRegionOfChildAgent(regionHandle, agentData); 367 retValue = remObject.InformRegionOfChildAgent(regionHandle, agentData);
@@ -386,10 +383,27 @@ namespace OpenSim.Region.Communications.OGS1
386 MainLog.Instance.Error("Remoting Error: Unable to connect to remote region.\n" + e.ToString()); 383 MainLog.Instance.Error("Remoting Error: Unable to connect to remote region.\n" + e.ToString());
387 return false; 384 return false;
388 } 385 }
389 catch 386 catch (SocketException e)
387 {
388 MainLog.Instance.Error("Socket Error: Unable to connect to remote region.\n" + e.ToString());
389 return false;
390 }
391 catch (InvalidCredentialException e)
392 {
393 MainLog.Instance.Error("Invalid Credentials: Unable to connect to remote region.\n" + e.ToString());
394 return false;
395 }
396 catch (AuthenticationException e)
397 {
398 MainLog.Instance.Error("Authentication exception: Unable to connect to remote region.\n" + e.ToString());
399 return false;
400 }
401 catch (Exception e)
390 { 402 {
403 MainLog.Instance.Error("Unknown exception: Unable to connect to remote region.\n" + e.ToString());
391 return false; 404 return false;
392 } 405 }
406 return true;
393 } 407 }
394 408
395 /// <summary> 409 /// <summary>