aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Communications/OGS1/OGS1GridServices.cs')
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs62
1 files changed, 36 insertions, 26 deletions
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index cc56078..9e74148 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -50,6 +50,7 @@ namespace OpenSim.Region.Communications.OGS1
50 public class OGS1GridServices : IGridServices, IInterRegionCommunications 50 public class OGS1GridServices : IGridServices, IInterRegionCommunications
51 { 51 {
52 private LocalBackEndServices m_localBackend = new LocalBackEndServices(); 52 private LocalBackEndServices m_localBackend = new LocalBackEndServices();
53 private Dictionary<ulong, RegionInfo> m_remoteRegionInfoCache = new Dictionary<ulong, RegionInfo>();
53 54
54 public BaseHttpServer httpListener; 55 public BaseHttpServer httpListener;
55 public NetworkServersInfo serversInfo; 56 public NetworkServersInfo serversInfo;
@@ -89,7 +90,7 @@ namespace OpenSim.Region.Communications.OGS1
89 GridParams["sim_name"] = regionInfo.RegionName; 90 GridParams["sim_name"] = regionInfo.RegionName;
90 GridParams["http_port"] = serversInfo.HttpListenerPort.ToString(); 91 GridParams["http_port"] = serversInfo.HttpListenerPort.ToString();
91 GridParams["remoting_port"] = serversInfo.RemotingListenerPort.ToString(); 92 GridParams["remoting_port"] = serversInfo.RemotingListenerPort.ToString();
92 GridParams["map-image-id"] = regionInfo.estateSettings.terrainImageID.ToStringHyphenated(); 93 GridParams["map-image-id"] = regionInfo.EstateSettings.terrainImageID.ToStringHyphenated();
93 94
94 // Package into an XMLRPC Request 95 // Package into an XMLRPC Request
95 ArrayList SendParams = new ArrayList(); 96 ArrayList SendParams = new ArrayList();
@@ -152,6 +153,7 @@ namespace OpenSim.Region.Communications.OGS1
152 return neighbours; 153 return neighbours;
153 } 154 }
154 155
156
155 /// <summary> 157 /// <summary>
156 /// 158 ///
157 /// </summary> 159 /// </summary>
@@ -166,37 +168,45 @@ namespace OpenSim.Region.Communications.OGS1
166 return regionInfo; 168 return regionInfo;
167 } 169 }
168 170
169 Hashtable requestData = new Hashtable(); 171 if (m_remoteRegionInfoCache.TryGetValue(regionHandle, out regionInfo))
170 requestData["region_handle"] = regionHandle.ToString();
171 requestData["authkey"] = this.serversInfo.GridSendKey;
172 ArrayList SendParams = new ArrayList();
173 SendParams.Add(requestData);
174 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
175 XmlRpcResponse GridResp = GridReq.Send(this.serversInfo.GridURL, 3000);
176
177 Hashtable responseData = (Hashtable)GridResp.Value;
178
179 if (responseData.ContainsKey("error"))
180 { 172 {
181 Console.WriteLine("error received from grid server" + responseData["error"]);
182 return null;
183 } 173 }
174 else
175 {
176 Hashtable requestData = new Hashtable();
177 requestData["region_handle"] = regionHandle.ToString();
178 requestData["authkey"] = this.serversInfo.GridSendKey;
179 ArrayList SendParams = new ArrayList();
180 SendParams.Add(requestData);
181 XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);
182 XmlRpcResponse GridResp = GridReq.Send(this.serversInfo.GridURL, 3000);
184 183
185 uint regX = Convert.ToUInt32((string)responseData["region_locx"]); 184 Hashtable responseData = (Hashtable) GridResp.Value;
186 uint regY = Convert.ToUInt32((string)responseData["region_locy"]);
187 string internalIpStr = (string)responseData["sim_ip"];
188 uint port = Convert.ToUInt32(responseData["sim_port"]);
189 string externalUri = (string)responseData["sim_uri"];
190 185
191 IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int)port); 186 if (responseData.ContainsKey("error"))
192 string neighbourExternalUri = externalUri; 187 {
193 regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr); 188 Console.WriteLine("error received from grid server" + responseData["error"]);
189 return null;
190 }
191
192 uint regX = Convert.ToUInt32((string) responseData["region_locx"]);
193 uint regY = Convert.ToUInt32((string) responseData["region_locy"]);
194 string internalIpStr = (string) responseData["sim_ip"];
195 uint port = Convert.ToUInt32(responseData["sim_port"]);
196 string externalUri = (string) responseData["sim_uri"];
194 197
195 regionInfo.RemotingPort = Convert.ToUInt32((string)responseData["remoting_port"]); 198 IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int) port);
196 regionInfo.RemotingAddress = internalIpStr; 199 string neighbourExternalUri = externalUri;
200 regionInfo = new RegionInfo(regX, regY, neighbourInternalEndPoint, internalIpStr);
197 201
198 regionInfo.RegionID = new LLUUID((string)responseData["region_UUID"]); 202 regionInfo.RemotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
199 regionInfo.RegionName = (string)responseData["region_name"]; 203 regionInfo.RemotingAddress = internalIpStr;
204
205 regionInfo.RegionID = new LLUUID((string) responseData["region_UUID"]);
206 regionInfo.RegionName = (string) responseData["region_name"];
207
208 m_remoteRegionInfoCache.Add( regionHandle, regionInfo );
209 }
200 210
201 return regionInfo; 211 return regionInfo;
202 } 212 }