From 67276589c883fe1a74d8d52057db1431d637dade Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 23 Sep 2009 17:20:07 -0700
Subject: Changed IGridService to use the new GridRegion data structure instead
of old SimpleRegionInfo. Added grid configs to standalones.
---
OpenSim/Services/Interfaces/IGridService.cs | 249 +++++++++++++++++++++++++++-
1 file changed, 240 insertions(+), 9 deletions(-)
(limited to 'OpenSim/Services/Interfaces/IGridService.cs')
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index 8f6c524..a188f7e 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -25,8 +25,11 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-using OpenSim.Framework;
+using System;
using System.Collections.Generic;
+using System.Net;
+using System.Net.Sockets;
+using OpenSim.Framework;
using OpenMetaverse;
namespace OpenSim.Services.Interfaces
@@ -39,7 +42,7 @@ namespace OpenSim.Services.Interfaces
///
///
/// Thrown if region registration failed
- bool RegisterRegion(UUID scopeID, SimpleRegionInfo regionInfos);
+ bool RegisterRegion(UUID scopeID, GridRegion regionInfos);
///
/// Deregister a region with the grid service.
@@ -55,9 +58,9 @@ namespace OpenSim.Services.Interfaces
///
///
///
- List GetNeighbours(UUID scopeID, UUID regionID);
+ List GetNeighbours(UUID scopeID, UUID regionID);
- SimpleRegionInfo GetRegionByUUID(UUID scopeID, UUID regionID);
+ GridRegion GetRegionByUUID(UUID scopeID, UUID regionID);
///
/// Get the region at the given position (in meters)
@@ -66,9 +69,9 @@ namespace OpenSim.Services.Interfaces
///
///
///
- SimpleRegionInfo GetRegionByPosition(UUID scopeID, int x, int y);
-
- SimpleRegionInfo GetRegionByName(UUID scopeID, string regionName);
+ GridRegion GetRegionByPosition(UUID scopeID, int x, int y);
+
+ GridRegion GetRegionByName(UUID scopeID, string regionName);
///
/// Get information about regions starting with the provided name.
@@ -83,9 +86,237 @@ namespace OpenSim.Services.Interfaces
/// A list of s of regions with matching name. If the
/// grid-server couldn't be contacted or returned an error, return null.
///
- List GetRegionsByName(UUID scopeID, string name, int maxNumber);
+ List GetRegionsByName(UUID scopeID, string name, int maxNumber);
- List GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax);
+ List GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax);
}
+
+ public class GridRegion
+ {
+
+ ///
+ /// The port by which http communication occurs with the region
+ ///
+ public uint HttpPort
+ {
+ get { return m_httpPort; }
+ set { m_httpPort = value; }
+ }
+ protected uint m_httpPort;
+
+ ///
+ /// A well-formed URI for the host region server (namely "http://" + ExternalHostName)
+ ///
+ public string ServerURI
+ {
+ get { return m_serverURI; }
+ set { m_serverURI = value; }
+ }
+ protected string m_serverURI;
+
+ public string RegionName
+ {
+ get { return m_regionName; }
+ set { m_regionName = value; }
+ }
+ protected string m_regionName = String.Empty;
+
+ protected bool Allow_Alternate_Ports;
+ public bool m_allow_alternate_ports;
+
+ protected string m_externalHostName;
+
+ protected IPEndPoint m_internalEndPoint;
+
+ public int RegionLocX
+ {
+ get { return m_regionLocX; }
+ set { m_regionLocX = value; }
+ }
+ protected int m_regionLocX;
+
+ public int RegionLocY
+ {
+ get { return m_regionLocY; }
+ set { m_regionLocY = value; }
+ }
+ protected int m_regionLocY;
+
+ public UUID RegionID = UUID.Zero;
+ public UUID ScopeID = UUID.Zero;
+
+ public GridRegion()
+ {
+ }
+
+ public GridRegion(int regionLocX, int regionLocY, IPEndPoint internalEndPoint, string externalUri)
+ {
+ m_regionLocX = regionLocX;
+ m_regionLocY = regionLocY;
+
+ m_internalEndPoint = internalEndPoint;
+ m_externalHostName = externalUri;
+ }
+
+ public GridRegion(int regionLocX, int regionLocY, string externalUri, uint port)
+ {
+ m_regionLocX = regionLocX;
+ m_regionLocY = regionLocY;
+
+ m_externalHostName = externalUri;
+
+ m_internalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), (int)port);
+ }
+
+ public GridRegion(uint xcell, uint ycell)
+ {
+ m_regionLocX = (int)(xcell * Constants.RegionSize);
+ m_regionLocY = (int)(ycell * Constants.RegionSize);
+ }
+
+ public GridRegion(RegionInfo ConvertFrom)
+ {
+ m_regionName = ConvertFrom.RegionName;
+ m_regionLocX = (int)(ConvertFrom.RegionLocX * Constants.RegionSize);
+ m_regionLocY = (int)(ConvertFrom.RegionLocY * Constants.RegionSize);
+ m_internalEndPoint = ConvertFrom.InternalEndPoint;
+ m_externalHostName = ConvertFrom.ExternalHostName;
+ m_httpPort = ConvertFrom.HttpPort;
+ m_allow_alternate_ports = ConvertFrom.m_allow_alternate_ports;
+ RegionID = UUID.Zero;
+ ServerURI = ConvertFrom.ServerURI;
+ }
+
+
+ ///
+ /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw.
+ ///
+ /// XXX Isn't this really doing too much to be a simple getter, rather than an explict method?
+ ///
+ public IPEndPoint ExternalEndPoint
+ {
+ get
+ {
+ // Old one defaults to IPv6
+ //return new IPEndPoint(Dns.GetHostAddresses(m_externalHostName)[0], m_internalEndPoint.Port);
+
+ IPAddress ia = null;
+ // If it is already an IP, don't resolve it - just return directly
+ if (IPAddress.TryParse(m_externalHostName, out ia))
+ return new IPEndPoint(ia, m_internalEndPoint.Port);
+
+ // Reset for next check
+ ia = null;
+ try
+ {
+ foreach (IPAddress Adr in Dns.GetHostAddresses(m_externalHostName))
+ {
+ if (ia == null)
+ ia = Adr;
+
+ if (Adr.AddressFamily == AddressFamily.InterNetwork)
+ {
+ ia = Adr;
+ break;
+ }
+ }
+ }
+ catch (SocketException e)
+ {
+ throw new Exception(
+ "Unable to resolve local hostname " + m_externalHostName + " innerException of type '" +
+ e + "' attached to this exception", e);
+ }
+
+ return new IPEndPoint(ia, m_internalEndPoint.Port);
+ }
+
+ set { m_externalHostName = value.ToString(); }
+ }
+
+ public string ExternalHostName
+ {
+ get { return m_externalHostName; }
+ set { m_externalHostName = value; }
+ }
+
+ public IPEndPoint InternalEndPoint
+ {
+ get { return m_internalEndPoint; }
+ set { m_internalEndPoint = value; }
+ }
+
+ public ulong RegionHandle
+ {
+ get { return Util.UIntsToLong((uint)RegionLocX, (uint)RegionLocY); }
+ }
+
+ public int getInternalEndPointPort()
+ {
+ return m_internalEndPoint.Port;
+ }
+
+ public Dictionary ToKeyValuePairs()
+ {
+ Dictionary kvp = new Dictionary();
+ kvp["uuid"] = RegionID.ToString();
+ kvp["locX"] = RegionLocX.ToString();
+ kvp["locY"] = RegionLocY.ToString();
+ kvp["external_ip_address"] = ExternalEndPoint.Address.ToString();
+ kvp["external_port"] = ExternalEndPoint.Port.ToString();
+ kvp["external_host_name"] = ExternalHostName;
+ kvp["http_port"] = HttpPort.ToString();
+ kvp["internal_ip_address"] = InternalEndPoint.Address.ToString();
+ kvp["internal_port"] = InternalEndPoint.Port.ToString();
+ kvp["alternate_ports"] = m_allow_alternate_ports.ToString();
+ kvp["server_uri"] = ServerURI;
+
+ return kvp;
+ }
+
+ public GridRegion(Dictionary kvp)
+ {
+ if ((kvp["external_ip_address"] != null) && (kvp["external_port"] != null))
+ {
+ int port = 0;
+ Int32.TryParse((string)kvp["external_port"], out port);
+ IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["external_ip_address"]), port);
+ ExternalEndPoint = ep;
+ }
+ else
+ ExternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
+
+ if (kvp["external_host_name"] != null)
+ ExternalHostName = (string)kvp["external_host_name"];
+
+ if (kvp["http_port"] != null)
+ {
+ UInt32 port = 0;
+ UInt32.TryParse((string)kvp["http_port"], out port);
+ HttpPort = port;
+ }
+
+ if ((kvp["internal_ip_address"] != null) && (kvp["internal_port"] != null))
+ {
+ int port = 0;
+ Int32.TryParse((string)kvp["internal_port"], out port);
+ IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["internal_ip_address"]), port);
+ InternalEndPoint = ep;
+ }
+ else
+ InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
+
+ if (kvp["alternate_ports"] != null)
+ {
+ bool alts = false;
+ Boolean.TryParse((string)kvp["alternate_ports"], out alts);
+ m_allow_alternate_ports = alts;
+ }
+
+ if (kvp["server_uri"] != null)
+ ServerURI = (string)kvp["server_uri"];
+ }
+ }
+
}
--
cgit v1.1
From dd3d52ae1faefbca85e2fe8d8cea67f7db4005ac Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Thu, 24 Sep 2009 13:33:58 -0700
Subject: Added test GridClient, which allowed me to remove a few bugs out of
the new code.
---
OpenSim/Services/Interfaces/IGridService.cs | 9 +++++++++
1 file changed, 9 insertions(+)
(limited to 'OpenSim/Services/Interfaces/IGridService.cs')
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index a188f7e..d12276f 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -277,6 +277,15 @@ namespace OpenSim.Services.Interfaces
public GridRegion(Dictionary kvp)
{
+ if (kvp["uuid"] != null)
+ RegionID = new UUID((string)kvp["uuid"]);
+
+ if (kvp["locX"] != null)
+ RegionLocX = Convert.ToInt32((string)kvp["locX"]);
+
+ if (kvp["locY"] != null)
+ RegionLocY = Convert.ToInt32((string)kvp["locY"]);
+
if ((kvp["external_ip_address"] != null) && (kvp["external_port"] != null))
{
int port = 0;
--
cgit v1.1
From 1faaa0a43a851c44af40336336ddbe3a7dbe83af Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Thu, 24 Sep 2009 15:30:00 -0700
Subject: GridServerPostHandler finished. GridClient tests all work. More
guards on getting parameters and replies over the wire.
---
OpenSim/Services/Interfaces/IGridService.cs | 4 ++++
1 file changed, 4 insertions(+)
(limited to 'OpenSim/Services/Interfaces/IGridService.cs')
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index d12276f..4bdcde2 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -263,6 +263,7 @@ namespace OpenSim.Services.Interfaces
kvp["uuid"] = RegionID.ToString();
kvp["locX"] = RegionLocX.ToString();
kvp["locY"] = RegionLocY.ToString();
+ kvp["name"] = RegionName;
kvp["external_ip_address"] = ExternalEndPoint.Address.ToString();
kvp["external_port"] = ExternalEndPoint.Port.ToString();
kvp["external_host_name"] = ExternalHostName;
@@ -286,6 +287,9 @@ namespace OpenSim.Services.Interfaces
if (kvp["locY"] != null)
RegionLocY = Convert.ToInt32((string)kvp["locY"]);
+ if (kvp["name"] != null)
+ RegionName = (string)kvp["name"];
+
if ((kvp["external_ip_address"] != null) && (kvp["external_port"] != null))
{
int port = 0;
--
cgit v1.1
From 6a5d7650d02979c74abcbbb3595729a4a6b55411 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Thu, 24 Sep 2009 18:23:55 -0700
Subject: All tests pass for MySQL/MySQLRegionData. Added
OpenSim.GridServer.ini.example that I have been using for testing the ROBUST
grid service with the GridClient.
---
OpenSim/Services/Interfaces/IGridService.cs | 61 +++++++++--------------------
1 file changed, 18 insertions(+), 43 deletions(-)
(limited to 'OpenSim/Services/Interfaces/IGridService.cs')
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index 4bdcde2..513b1b0 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -263,72 +263,47 @@ namespace OpenSim.Services.Interfaces
kvp["uuid"] = RegionID.ToString();
kvp["locX"] = RegionLocX.ToString();
kvp["locY"] = RegionLocY.ToString();
- kvp["name"] = RegionName;
- kvp["external_ip_address"] = ExternalEndPoint.Address.ToString();
- kvp["external_port"] = ExternalEndPoint.Port.ToString();
- kvp["external_host_name"] = ExternalHostName;
- kvp["http_port"] = HttpPort.ToString();
- kvp["internal_ip_address"] = InternalEndPoint.Address.ToString();
- kvp["internal_port"] = InternalEndPoint.Port.ToString();
- kvp["alternate_ports"] = m_allow_alternate_ports.ToString();
- kvp["server_uri"] = ServerURI;
+ kvp["regionName"] = RegionName;
+ kvp["serverIP"] = ExternalHostName; //ExternalEndPoint.Address.ToString();
+ kvp["serverHttpPort"] = HttpPort.ToString();
+ kvp["serverURI"] = ServerURI;
return kvp;
}
public GridRegion(Dictionary kvp)
{
- if (kvp["uuid"] != null)
+ if (kvp.ContainsKey("uuid"))
RegionID = new UUID((string)kvp["uuid"]);
- if (kvp["locX"] != null)
+ if (kvp.ContainsKey("locX"))
RegionLocX = Convert.ToInt32((string)kvp["locX"]);
- if (kvp["locY"] != null)
+ if (kvp.ContainsKey("locY"))
RegionLocY = Convert.ToInt32((string)kvp["locY"]);
- if (kvp["name"] != null)
- RegionName = (string)kvp["name"];
+ if (kvp.ContainsKey("regionName"))
+ RegionName = (string)kvp["regionName"];
- if ((kvp["external_ip_address"] != null) && (kvp["external_port"] != null))
+ if (kvp.ContainsKey("serverIP"))
{
int port = 0;
- Int32.TryParse((string)kvp["external_port"], out port);
- IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["external_ip_address"]), port);
- ExternalEndPoint = ep;
+ //Int32.TryParse((string)kvp["serverPort"], out port);
+ //IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["serverIP"]), port);
+ ExternalHostName = (string)kvp["serverIP"];
}
else
- ExternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
+ ExternalHostName = "127.0.0.1";
- if (kvp["external_host_name"] != null)
- ExternalHostName = (string)kvp["external_host_name"];
-
- if (kvp["http_port"] != null)
+ if (kvp.ContainsKey("serverHttpPort"))
{
UInt32 port = 0;
- UInt32.TryParse((string)kvp["http_port"], out port);
+ UInt32.TryParse((string)kvp["serverHttpPort"], out port);
HttpPort = port;
}
- if ((kvp["internal_ip_address"] != null) && (kvp["internal_port"] != null))
- {
- int port = 0;
- Int32.TryParse((string)kvp["internal_port"], out port);
- IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["internal_ip_address"]), port);
- InternalEndPoint = ep;
- }
- else
- InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
-
- if (kvp["alternate_ports"] != null)
- {
- bool alts = false;
- Boolean.TryParse((string)kvp["alternate_ports"], out alts);
- m_allow_alternate_ports = alts;
- }
-
- if (kvp["server_uri"] != null)
- ServerURI = (string)kvp["server_uri"];
+ if (kvp.ContainsKey("serverURI"))
+ ServerURI = (string)kvp["serverURI"];
}
}
--
cgit v1.1
From 52e477b41f137ff2a0775722dcbaaa64fa5f3bc3 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Fri, 25 Sep 2009 06:02:41 -0700
Subject: Better guards on RegisterRegion in GridService. Added serverPort to
the fields that get stored (I think this is the UDP port).
---
OpenSim/Services/Interfaces/IGridService.cs | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Services/Interfaces/IGridService.cs')
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs
index 513b1b0..ce432ab 100644
--- a/OpenSim/Services/Interfaces/IGridService.cs
+++ b/OpenSim/Services/Interfaces/IGridService.cs
@@ -267,6 +267,7 @@ namespace OpenSim.Services.Interfaces
kvp["serverIP"] = ExternalHostName; //ExternalEndPoint.Address.ToString();
kvp["serverHttpPort"] = HttpPort.ToString();
kvp["serverURI"] = ServerURI;
+ kvp["serverPort"] = InternalEndPoint.Port.ToString();
return kvp;
}
@@ -287,7 +288,7 @@ namespace OpenSim.Services.Interfaces
if (kvp.ContainsKey("serverIP"))
{
- int port = 0;
+ //int port = 0;
//Int32.TryParse((string)kvp["serverPort"], out port);
//IPEndPoint ep = new IPEndPoint(IPAddress.Parse((string)kvp["serverIP"]), port);
ExternalHostName = (string)kvp["serverIP"];
@@ -295,6 +296,13 @@ namespace OpenSim.Services.Interfaces
else
ExternalHostName = "127.0.0.1";
+ if (kvp.ContainsKey("serverPort"))
+ {
+ Int32 port = 0;
+ Int32.TryParse((string)kvp["serverPort"], out port);
+ InternalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), port);
+ }
+
if (kvp.ContainsKey("serverHttpPort"))
{
UInt32 port = 0;
--
cgit v1.1