From d873a043dda68490ee47508c31d4c0f55ca0e21a Mon Sep 17 00:00:00 2001
From: lbsa71
Date: Wed, 12 Mar 2008 09:37:39 +0000
Subject: * Refactored out creation of LoginResponse * Refactored out
ErrorResponse
---
OpenSim/Grid/GridServer/GridManager.cs | 235 +++++++++++++++++----------------
1 file changed, 121 insertions(+), 114 deletions(-)
(limited to 'OpenSim/Grid/GridServer')
diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs
index a6cefbc..69c56d2 100644
--- a/OpenSim/Grid/GridServer/GridManager.cs
+++ b/OpenSim/Grid/GridServer/GridManager.cs
@@ -239,6 +239,15 @@ namespace OpenSim.Grid.GridServer
return validated;
}
+ private XmlRpcResponse ErrorResponse(string error)
+ {
+ XmlRpcResponse errorResponse = new XmlRpcResponse();
+ Hashtable errorResponseData = new Hashtable();
+ errorResponse.Value = errorResponseData;
+ errorResponseData["error"] = error;
+ return errorResponse;
+ }
+
///
/// Performed when a region connects to the grid server initially.
///
@@ -246,9 +255,6 @@ namespace OpenSim.Grid.GridServer
/// Startup parameters
public XmlRpcResponse XmlRpcSimulatorLoginMethod(XmlRpcRequest request)
{
- XmlRpcResponse response = new XmlRpcResponse();
- Hashtable responseData = new Hashtable();
- response.Value = responseData;
RegionProfileData sim;
RegionProfileData existingSim;
@@ -258,13 +264,11 @@ namespace OpenSim.Grid.GridServer
if (requestData.ContainsKey("UUID") && LLUUID.TryParse((string)requestData["UUID"], out uuid))
{
- existingSim = getRegion(uuid);
}
else
{
m_log.Info("[GRID]: Region connected without a UUID, ignoring.");
- responseData["error"] = "No UUID passed to grid server - unable to connect you";
- return response;
+ return ErrorResponse("No UUID passed to grid server - unable to connect you");
}
try
@@ -274,8 +278,7 @@ namespace OpenSim.Grid.GridServer
catch (FormatException e)
{
m_log.Info("[GRID]: Invalid login parameters, ignoring.");
- responseData["error"] = "Wrong format in login parameters. Please verify parameters.";
- return response;
+ return ErrorResponse("Wrong format in login parameters. Please verify parameters.");
}
existingSim = getRegion(sim.regionHandle);
@@ -325,110 +328,10 @@ namespace OpenSim.Grid.GridServer
"Unable to add region " + sim.UUID.ToString() + " via " + kvp.Key);
m_log.Warn("[storage]: " + e.ToString());
}
-
-
- if (getRegion(sim.regionHandle) == null)
- {
- responseData["error"] = "Unable to add new region";
- return response;
- }
}
+ XmlRpcResponse response = CreateLoginResponse(sim);
-
- ArrayList SimNeighboursData = new ArrayList();
-
- RegionProfileData neighbour;
- Hashtable NeighbourBlock;
-
- bool fastMode = false; // Only compatible with MySQL right now
-
- if (fastMode)
- {
- Dictionary neighbours =
- getRegions(sim.regionLocX - 1, sim.regionLocY - 1, sim.regionLocX + 1,
- sim.regionLocY + 1);
-
- foreach (KeyValuePair aSim in neighbours)
- {
- NeighbourBlock = new Hashtable();
- NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(aSim.Value.serverIP.ToString()).ToString();
- NeighbourBlock["sim_port"] = aSim.Value.serverPort.ToString();
- NeighbourBlock["region_locx"] = aSim.Value.regionLocX.ToString();
- NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString();
- NeighbourBlock["UUID"] = aSim.Value.UUID.ToString();
- NeighbourBlock["regionHandle"] = aSim.Value.regionHandle.ToString();
-
- if (aSim.Value.UUID != sim.UUID)
- {
- SimNeighboursData.Add(NeighbourBlock);
- }
- }
- }
- else
- {
- for (int x = -1; x < 2; x++)
- for (int y = -1; y < 2; y++)
- {
- if (
- getRegion(
- Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
- (uint)(sim.regionLocY + y) * Constants.RegionSize)) != null)
- {
- neighbour =
- getRegion(
- Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
- (uint)(sim.regionLocY + y) * Constants.RegionSize));
-
- NeighbourBlock = new Hashtable();
- NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(neighbour.serverIP).ToString();
- NeighbourBlock["sim_port"] = neighbour.serverPort.ToString();
- NeighbourBlock["region_locx"] = neighbour.regionLocX.ToString();
- NeighbourBlock["region_locy"] = neighbour.regionLocY.ToString();
- NeighbourBlock["UUID"] = neighbour.UUID.ToString();
- NeighbourBlock["regionHandle"] = neighbour.regionHandle.ToString();
-
- if (neighbour.UUID != sim.UUID) SimNeighboursData.Add(NeighbourBlock);
- }
- }
- }
-
- responseData["UUID"] = sim.UUID.ToString();
- responseData["region_locx"] = sim.regionLocX.ToString();
- responseData["region_locy"] = sim.regionLocY.ToString();
- responseData["regionname"] = sim.regionName;
- responseData["estate_id"] = "1";
- responseData["neighbours"] = SimNeighboursData;
-
- responseData["sim_ip"] = sim.serverIP;
- responseData["sim_port"] = sim.serverPort.ToString();
- responseData["asset_url"] = sim.regionAssetURI;
- responseData["asset_sendkey"] = sim.regionAssetSendKey;
- responseData["asset_recvkey"] = sim.regionAssetRecvKey;
- responseData["user_url"] = sim.regionUserURI;
- responseData["user_sendkey"] = sim.regionUserSendKey;
- responseData["user_recvkey"] = sim.regionUserRecvKey;
- responseData["authkey"] = sim.regionSecret;
-
- // New! If set, use as URL to local sim storage (ie http://remotehost/region.yap)
- responseData["data_uri"] = sim.regionDataURI;
-
- responseData["allow_forceful_banlines"] = Config.AllowForcefulBanlines;
-
- // Instead of sending a multitude of message servers to the registering sim
- // we should probably be sending a single one and parhaps it's backup
- // that has responsibility over routing it's messages.
-
- // The Sim won't be contacting us again about any of the message server stuff during it's time up.
-
- responseData["messageserver_count"] = _MessageServers.Count;
-
- for (int i = 0; i < _MessageServers.Count; i++)
- {
- responseData["messageserver_uri" + i] = _MessageServers[i].URI;
- responseData["messageserver_sendkey" + i] = _MessageServers[i].sendkey;
- responseData["messageserver_recvkey" + i] = _MessageServers[i].recvkey;
- }
return response;
}
else
@@ -446,18 +349,122 @@ namespace OpenSim.Grid.GridServer
" " + sim.regionLocY + " currently occupied by " + existingSim.regionName);
}
- responseData["error"] =
- "The key required to connect to your region did not match. Please check your send and recieve keys.";
- return response;
+ return ErrorResponse("The key required to connect to your region did not match. Please check your send and recieve keys.");
}
}
else
{
m_log.Warn("[grid]: Failed to add new region " + sim.regionName + " at location " + sim.regionLocX + " " + sim.regionLocY + " currently occupied by " + existingSim.regionName);
- responseData["error"] = "Another region already exists at that location. Try another";
- return response;
+ return ErrorResponse("Another region already exists at that location. Try another");
}
+ }
+ private XmlRpcResponse CreateLoginResponse(RegionProfileData sim)
+ {
+ XmlRpcResponse response = new XmlRpcResponse();
+ Hashtable responseData = new Hashtable();
+ response.Value = responseData;
+
+ ArrayList SimNeighboursData = GetSimNeighboursData(sim);
+
+ responseData["UUID"] = sim.UUID.ToString();
+ responseData["region_locx"] = sim.regionLocX.ToString();
+ responseData["region_locy"] = sim.regionLocY.ToString();
+ responseData["regionname"] = sim.regionName;
+ responseData["estate_id"] = "1";
+ responseData["neighbours"] = SimNeighboursData;
+
+ responseData["sim_ip"] = sim.serverIP;
+ responseData["sim_port"] = sim.serverPort.ToString();
+ responseData["asset_url"] = sim.regionAssetURI;
+ responseData["asset_sendkey"] = sim.regionAssetSendKey;
+ responseData["asset_recvkey"] = sim.regionAssetRecvKey;
+ responseData["user_url"] = sim.regionUserURI;
+ responseData["user_sendkey"] = sim.regionUserSendKey;
+ responseData["user_recvkey"] = sim.regionUserRecvKey;
+ responseData["authkey"] = sim.regionSecret;
+
+ // New! If set, use as URL to local sim storage (ie http://remotehost/region.yap)
+ responseData["data_uri"] = sim.regionDataURI;
+
+ responseData["allow_forceful_banlines"] = Config.AllowForcefulBanlines;
+
+ // Instead of sending a multitude of message servers to the registering sim
+ // we should probably be sending a single one and parhaps it's backup
+ // that has responsibility over routing it's messages.
+
+ // The Sim won't be contacting us again about any of the message server stuff during it's time up.
+
+ responseData["messageserver_count"] = _MessageServers.Count;
+
+ for (int i = 0; i < _MessageServers.Count; i++)
+ {
+ responseData["messageserver_uri" + i] = _MessageServers[i].URI;
+ responseData["messageserver_sendkey" + i] = _MessageServers[i].sendkey;
+ responseData["messageserver_recvkey" + i] = _MessageServers[i].recvkey;
+ }
+ return response;
+ }
+
+ private ArrayList GetSimNeighboursData(RegionProfileData sim)
+ {
+ ArrayList SimNeighboursData = new ArrayList();
+
+ RegionProfileData neighbour;
+ Hashtable NeighbourBlock;
+
+ bool fastMode = false; // Only compatible with MySQL right now
+
+ if (fastMode)
+ {
+ Dictionary neighbours =
+ getRegions(sim.regionLocX - 1, sim.regionLocY - 1, sim.regionLocX + 1,
+ sim.regionLocY + 1);
+
+ foreach (KeyValuePair aSim in neighbours)
+ {
+ NeighbourBlock = new Hashtable();
+ NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(aSim.Value.serverIP.ToString()).ToString();
+ NeighbourBlock["sim_port"] = aSim.Value.serverPort.ToString();
+ NeighbourBlock["region_locx"] = aSim.Value.regionLocX.ToString();
+ NeighbourBlock["region_locy"] = aSim.Value.regionLocY.ToString();
+ NeighbourBlock["UUID"] = aSim.Value.UUID.ToString();
+ NeighbourBlock["regionHandle"] = aSim.Value.regionHandle.ToString();
+
+ if (aSim.Value.UUID != sim.UUID)
+ {
+ SimNeighboursData.Add(NeighbourBlock);
+ }
+ }
+ }
+ else
+ {
+ for (int x = -1; x < 2; x++)
+ for (int y = -1; y < 2; y++)
+ {
+ if (
+ getRegion(
+ Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
+ (uint)(sim.regionLocY + y) * Constants.RegionSize)) != null)
+ {
+ neighbour =
+ getRegion(
+ Helpers.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
+ (uint)(sim.regionLocY + y) * Constants.RegionSize));
+
+ NeighbourBlock = new Hashtable();
+ NeighbourBlock["sim_ip"] = Util.GetHostFromDNS(neighbour.serverIP).ToString();
+ NeighbourBlock["sim_port"] = neighbour.serverPort.ToString();
+ NeighbourBlock["region_locx"] = neighbour.regionLocX.ToString();
+ NeighbourBlock["region_locy"] = neighbour.regionLocY.ToString();
+ NeighbourBlock["UUID"] = neighbour.UUID.ToString();
+ NeighbourBlock["regionHandle"] = neighbour.regionHandle.ToString();
+
+ if (neighbour.UUID != sim.UUID) SimNeighboursData.Add(NeighbourBlock);
+ }
+ }
+ }
+ return SimNeighboursData;
}
private RegionProfileData RegionFromRequest(Hashtable requestData)
--
cgit v1.1