ok.. another try on the HG uri
parent
853e98d340
commit
e2d46c060c
|
@ -414,6 +414,120 @@ namespace OpenSim.Framework
|
||||||
return regionCoord << 8;
|
return regionCoord << 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool buildHGRegionURI(string inputName, out string serverURI, out string regionName)
|
||||||
|
{
|
||||||
|
serverURI = string.Empty;
|
||||||
|
regionName = string.Empty;
|
||||||
|
|
||||||
|
inputName = inputName.Trim();
|
||||||
|
|
||||||
|
if (!inputName.StartsWith("http") && !inputName.StartsWith("https"))
|
||||||
|
{
|
||||||
|
// Formats: grid.example.com:8002:region name
|
||||||
|
// grid.example.com:region name
|
||||||
|
// grid.example.com:8002
|
||||||
|
// grid.example.com
|
||||||
|
|
||||||
|
string host;
|
||||||
|
uint port = 80;
|
||||||
|
|
||||||
|
string[] parts = inputName.Split(new char[] { ':' });
|
||||||
|
int indx;
|
||||||
|
if(parts.Length == 0)
|
||||||
|
return false;
|
||||||
|
if (parts.Length == 1)
|
||||||
|
{
|
||||||
|
indx = inputName.IndexOf('/');
|
||||||
|
if (indx < 0)
|
||||||
|
serverURI = "http://"+ inputName + "/";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
serverURI = "http://"+ inputName.Substring(0,indx + 1);
|
||||||
|
if(indx + 2 < inputName.Length)
|
||||||
|
regionName = inputName.Substring(indx + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
host = parts[0];
|
||||||
|
|
||||||
|
if (parts.Length >= 2)
|
||||||
|
{
|
||||||
|
indx = parts[1].IndexOf('/');
|
||||||
|
if(indx < 0)
|
||||||
|
{
|
||||||
|
// If it's a number then assume it's a port. Otherwise, it's a region name.
|
||||||
|
if (!UInt32.TryParse(parts[1], out port))
|
||||||
|
{
|
||||||
|
port = 80;
|
||||||
|
regionName = parts[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string portstr = parts[1].Substring(0, indx);
|
||||||
|
if(indx + 2 < parts[1].Length)
|
||||||
|
regionName = parts[1].Substring(indx + 1);
|
||||||
|
if (!UInt32.TryParse(portstr, out port))
|
||||||
|
port = 80;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// always take the last one
|
||||||
|
if (parts.Length >= 3)
|
||||||
|
{
|
||||||
|
regionName = parts[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
serverURI = "http://"+ host +":"+ port.ToString() + "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Formats: http://grid.example.com region name
|
||||||
|
// http://grid.example.com "region name"
|
||||||
|
// http://grid.example.com
|
||||||
|
|
||||||
|
string[] parts = inputName.Split(new char[] { ' ' });
|
||||||
|
|
||||||
|
if (parts.Length == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
serverURI = parts[0];
|
||||||
|
|
||||||
|
int indx = serverURI.LastIndexOf('/');
|
||||||
|
if(indx > 10)
|
||||||
|
{
|
||||||
|
if(indx + 2 < inputName.Length)
|
||||||
|
regionName = inputName.Substring(indx + 1);
|
||||||
|
serverURI = inputName.Substring(0, indx + 1);
|
||||||
|
}
|
||||||
|
else if (parts.Length >= 2)
|
||||||
|
{
|
||||||
|
regionName = inputName.Substring(serverURI.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// use better code for sanity check
|
||||||
|
Uri uri;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
uri = new Uri(serverURI);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!string.IsNullOrEmpty(regionName))
|
||||||
|
regionName = regionName.Trim(new char[] { '"', ' ' });
|
||||||
|
serverURI = uri.AbsoluteUri;
|
||||||
|
if(uri.Port == 80)
|
||||||
|
serverURI = serverURI.Trim(new char[] { '/', ' ' }) +":80/";
|
||||||
|
else if(uri.Port == 443)
|
||||||
|
serverURI = serverURI.Trim(new char[] { '/', ' ' }) +":443/";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public static T Clamp<T>(T x, T min, T max)
|
public static T Clamp<T>(T x, T min, T max)
|
||||||
where T : IComparable<T>
|
where T : IComparable<T>
|
||||||
{
|
{
|
||||||
|
|
|
@ -227,12 +227,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
||||||
return rinfo;
|
return rinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GridRegion GetRegionByName(UUID scopeID, string regionName)
|
public GridRegion GetRegionByName(UUID scopeID, string name)
|
||||||
{
|
{
|
||||||
GridRegion rinfo = m_LocalGridService.GetRegionByName(scopeID, regionName);
|
GridRegion rinfo = m_LocalGridService.GetRegionByName(scopeID, name);
|
||||||
if (rinfo != null)
|
if (rinfo != null)
|
||||||
return rinfo;
|
return rinfo;
|
||||||
|
|
||||||
|
// HG urls should not get here, strip them
|
||||||
|
string regionName = name;
|
||||||
|
if(name.Contains("."))
|
||||||
|
{
|
||||||
|
string regionURI = "";
|
||||||
|
if(!Util.buildHGRegionURI(name, out regionURI, out regionName))
|
||||||
|
return rinfo;
|
||||||
|
}
|
||||||
|
|
||||||
rinfo = m_RemoteGridService.GetRegionByName(scopeID, regionName);
|
rinfo = m_RemoteGridService.GetRegionByName(scopeID, regionName);
|
||||||
m_RegionInfoCache.Cache(scopeID, rinfo);
|
m_RegionInfoCache.Cache(scopeID, rinfo);
|
||||||
return rinfo;
|
return rinfo;
|
||||||
|
@ -242,7 +251,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
|
||||||
{
|
{
|
||||||
List<GridRegion> rinfo = m_LocalGridService.GetRegionsByName(scopeID, name, maxNumber);
|
List<GridRegion> rinfo = m_LocalGridService.GetRegionsByName(scopeID, name, maxNumber);
|
||||||
//m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetRegionsByName {0} found {1} regions", name, rinfo.Count);
|
//m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetRegionsByName {0} found {1} regions", name, rinfo.Count);
|
||||||
List<GridRegion> grinfo = m_RemoteGridService.GetRegionsByName(scopeID, name, maxNumber);
|
|
||||||
|
// HG urls should not get here, strip them
|
||||||
|
// side effect is that local regions with same name as HG may also be found
|
||||||
|
// this mb good or bad
|
||||||
|
string regionName = name;
|
||||||
|
if(name.Contains("."))
|
||||||
|
{
|
||||||
|
string regionURI = "";
|
||||||
|
if(!Util.buildHGRegionURI(name, out regionURI, out regionName))
|
||||||
|
return rinfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<GridRegion> grinfo = m_RemoteGridService.GetRegionsByName(scopeID, regionName, maxNumber);
|
||||||
|
|
||||||
if (grinfo != null)
|
if (grinfo != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -505,11 +505,16 @@ namespace OpenSim.Services.GridService
|
||||||
{
|
{
|
||||||
string regionURI = "";
|
string regionURI = "";
|
||||||
string regionName = "";
|
string regionName = "";
|
||||||
if(!m_HypergridLinker.buildHGRegionURI(name, out regionURI, out regionName))
|
if(!Util.buildHGRegionURI(name, out regionURI, out regionName))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
bool localGrid = string.IsNullOrWhiteSpace(regionURI);
|
string mapname;
|
||||||
string mapname = regionURI + regionName;
|
bool localGrid = m_HypergridLinker.IsLocalGrid(regionURI);
|
||||||
|
if(localGrid)
|
||||||
|
mapname = regionName;
|
||||||
|
else
|
||||||
|
mapname = regionURI + regionName;
|
||||||
|
|
||||||
bool haveMatch = false;
|
bool haveMatch = false;
|
||||||
|
|
||||||
if (rdatas != null && (rdatas.Count > 0))
|
if (rdatas != null && (rdatas.Count > 0))
|
||||||
|
@ -555,7 +560,7 @@ namespace OpenSim.Services.GridService
|
||||||
if(haveMatch)
|
if(haveMatch)
|
||||||
return rinfos;
|
return rinfos;
|
||||||
}
|
}
|
||||||
if(!localGrid)
|
if(!localGrid && !string.IsNullOrWhiteSpace(regionURI))
|
||||||
{
|
{
|
||||||
string HGname = regionURI +" "+ regionName; // include space for compatibility
|
string HGname = regionURI +" "+ regionName; // include space for compatibility
|
||||||
GridRegion r = m_HypergridLinker.LinkRegion(scopeID, HGname);
|
GridRegion r = m_HypergridLinker.LinkRegion(scopeID, HGname);
|
||||||
|
@ -592,15 +597,21 @@ namespace OpenSim.Services.GridService
|
||||||
{
|
{
|
||||||
string regionURI = "";
|
string regionURI = "";
|
||||||
string regionName = "";
|
string regionName = "";
|
||||||
if(!m_HypergridLinker.buildHGRegionURI(name, out regionURI, out regionName))
|
if(!Util.buildHGRegionURI(name, out regionURI, out regionName))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
string mapname = regionURI + regionName;
|
string mapname;
|
||||||
|
bool localGrid = m_HypergridLinker.IsLocalGrid(regionURI);
|
||||||
|
if(localGrid)
|
||||||
|
mapname = regionName;
|
||||||
|
else
|
||||||
|
mapname = regionURI + regionName;
|
||||||
|
|
||||||
List<RegionData> rdatas = m_Database.Get(Util.EscapeForLike(mapname), scopeID);
|
List<RegionData> rdatas = m_Database.Get(Util.EscapeForLike(mapname), scopeID);
|
||||||
if ((rdatas != null) && (rdatas.Count > 0))
|
if ((rdatas != null) && (rdatas.Count > 0))
|
||||||
return RegionData2RegionInfo(rdatas[0]); // get the first
|
return RegionData2RegionInfo(rdatas[0]); // get the first
|
||||||
|
|
||||||
if(!string.IsNullOrWhiteSpace(regionURI))
|
if(!localGrid && !string.IsNullOrWhiteSpace(regionURI))
|
||||||
{
|
{
|
||||||
string HGname = regionURI +" "+ regionName;
|
string HGname = regionURI +" "+ regionName;
|
||||||
return m_HypergridLinker.LinkRegion(scopeID, HGname);
|
return m_HypergridLinker.LinkRegion(scopeID, HGname);
|
||||||
|
|
|
@ -197,122 +197,9 @@ namespace OpenSim.Services.GridService
|
||||||
return TryLinkRegionToCoords(scopeID, mapName, xloc, yloc, UUID.Zero, out reason);
|
return TryLinkRegionToCoords(scopeID, mapName, xloc, yloc, UUID.Zero, out reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool buildHGRegionURI(string inputName, out string serverURI, out string regionName)
|
public bool IsLocalGrid(string serverURI)
|
||||||
{
|
{
|
||||||
serverURI = string.Empty;
|
return serverURI == m_ThisGatekeeper;
|
||||||
regionName = string.Empty;
|
|
||||||
|
|
||||||
inputName = inputName.Trim();
|
|
||||||
|
|
||||||
if (!inputName.StartsWith("http") && !inputName.StartsWith("https"))
|
|
||||||
{
|
|
||||||
// Formats: grid.example.com:8002:region name
|
|
||||||
// grid.example.com:region name
|
|
||||||
// grid.example.com:8002
|
|
||||||
// grid.example.com
|
|
||||||
|
|
||||||
string host;
|
|
||||||
uint port = 80;
|
|
||||||
|
|
||||||
string[] parts = inputName.Split(new char[] { ':' });
|
|
||||||
int indx;
|
|
||||||
if(parts.Length == 0)
|
|
||||||
return false;
|
|
||||||
if (parts.Length == 1)
|
|
||||||
{
|
|
||||||
indx = inputName.IndexOf('/');
|
|
||||||
if (indx < 0)
|
|
||||||
serverURI = "http://"+ inputName + "/";
|
|
||||||
else
|
|
||||||
{
|
|
||||||
serverURI = "http://"+ inputName.Substring(0,indx + 1);
|
|
||||||
if(indx + 2 < inputName.Length)
|
|
||||||
regionName = inputName.Substring(indx + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
host = parts[0];
|
|
||||||
|
|
||||||
if (parts.Length >= 2)
|
|
||||||
{
|
|
||||||
indx = parts[1].IndexOf('/');
|
|
||||||
if(indx < 0)
|
|
||||||
{
|
|
||||||
// If it's a number then assume it's a port. Otherwise, it's a region name.
|
|
||||||
if (!UInt32.TryParse(parts[1], out port))
|
|
||||||
{
|
|
||||||
port = 80;
|
|
||||||
regionName = parts[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string portstr = parts[1].Substring(0, indx);
|
|
||||||
if(indx + 2 < parts[1].Length)
|
|
||||||
regionName = parts[1].Substring(indx + 1);
|
|
||||||
if (!UInt32.TryParse(portstr, out port))
|
|
||||||
port = 80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// always take the last one
|
|
||||||
if (parts.Length >= 3)
|
|
||||||
{
|
|
||||||
regionName = parts[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
serverURI = "http://"+ host +":"+ port.ToString() + "/";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Formats: http://grid.example.com region name
|
|
||||||
// http://grid.example.com "region name"
|
|
||||||
// http://grid.example.com
|
|
||||||
|
|
||||||
string[] parts = inputName.Split(new char[] { ' ' });
|
|
||||||
|
|
||||||
if (parts.Length == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
serverURI = parts[0];
|
|
||||||
|
|
||||||
int indx = serverURI.LastIndexOf('/');
|
|
||||||
if(indx > 10)
|
|
||||||
{
|
|
||||||
if(indx + 2 < inputName.Length)
|
|
||||||
regionName = inputName.Substring(indx + 1);
|
|
||||||
serverURI = inputName.Substring(0, indx + 1);
|
|
||||||
}
|
|
||||||
else if (parts.Length >= 2)
|
|
||||||
{
|
|
||||||
regionName = inputName.Substring(serverURI.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// use better code for sanity check
|
|
||||||
Uri uri;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
uri = new Uri(serverURI);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!string.IsNullOrEmpty(regionName))
|
|
||||||
regionName = regionName.Trim(new char[] { '"', ' ' });
|
|
||||||
serverURI = uri.AbsoluteUri;
|
|
||||||
if(uri.Port == 80)
|
|
||||||
serverURI = serverURI.Trim(new char[] { '/', ' ' }) +":80/";
|
|
||||||
else if(uri.Port == 443)
|
|
||||||
serverURI = serverURI.Trim(new char[] { '/', ' ' }) +":443/";
|
|
||||||
|
|
||||||
if(serverURI == m_ThisGatekeeper)
|
|
||||||
serverURI = ""; // local grid, look for region name only
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, UUID ownerID, out string reason)
|
public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, UUID ownerID, out string reason)
|
||||||
|
@ -323,7 +210,7 @@ namespace OpenSim.Services.GridService
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
string regionName = string.Empty;
|
string regionName = string.Empty;
|
||||||
|
|
||||||
if(!buildHGRegionURI(mapName, out serverURI, out regionName))
|
if(!Util.buildHGRegionURI(mapName, out serverURI, out regionName))
|
||||||
{
|
{
|
||||||
reason = "Wrong URI format for link-region";
|
reason = "Wrong URI format for link-region";
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in New Issue