Merge branch 'master' into httptests
commit
ebbb918404
|
@ -128,20 +128,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
m_Clients.Add(remoteClient.AgentId);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
OnMapNameRequest(remoteClient, mapName, flags);
|
||||
}
|
||||
finally
|
||||
{
|
||||
lock (m_Clients)
|
||||
m_Clients.Remove(remoteClient.AgentId);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnMapNameRequest(IClientAPI remoteClient, string mapName, uint flags)
|
||||
{
|
||||
Util.FireAndForget(x =>
|
||||
{
|
||||
try
|
||||
{
|
||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||
if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4))
|
||||
|
@ -224,8 +218,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
|||
{
|
||||
if (regionInfos.Count == 0)
|
||||
remoteClient.SendAgentAlertMessage("No regions found with that name.", true);
|
||||
// else if (regionInfos.Count == 1)
|
||||
// remoteClient.SendAgentAlertMessage("Region found!", false);
|
||||
// else if (regionInfos.Count == 1)
|
||||
// remoteClient.SendAgentAlertMessage("Region found!", false);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
lock (m_Clients)
|
||||
m_Clients.Remove(remoteClient.AgentId);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -13758,6 +13758,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
case ScriptBaseClass.OBJECT_LAST_OWNER_ID:
|
||||
ret.Add(new LSL_Key(ScriptBaseClass.NULL_KEY));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_CLICK_ACTION:
|
||||
ret.Add(new LSL_Integer(0));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_OMEGA:
|
||||
ret.Add(new LSL_Vector(Vector3.Zero));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_PRIM_COUNT:
|
||||
List<SceneObjectGroup> Attachments = av.GetAttachments();
|
||||
int count = 0;
|
||||
try
|
||||
{
|
||||
foreach (SceneObjectGroup Attachment in Attachments)
|
||||
count += Attachment.PrimCount;
|
||||
} catch { };
|
||||
ret.Add(new LSL_Integer(count));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_TOTAL_INVENTORY_COUNT:
|
||||
List<SceneObjectGroup> invAttachments = av.GetAttachments();
|
||||
int invcount = 0;
|
||||
try
|
||||
{
|
||||
foreach (SceneObjectGroup Attachment in invAttachments)
|
||||
{
|
||||
SceneObjectPart[] parts = Attachment.Parts;
|
||||
int nparts = parts.Count();
|
||||
for(int i = 0; i < nparts; i++)
|
||||
invcount += parts[i].Inventory.Count;
|
||||
}
|
||||
} catch { };
|
||||
ret.Add(new LSL_Integer(invcount));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_GROUP_TAG:
|
||||
ret.Add(new LSL_String(av.Grouptitle));
|
||||
break;
|
||||
default:
|
||||
// Invalid or unhandled constant.
|
||||
ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL));
|
||||
|
@ -13930,6 +13964,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
case ScriptBaseClass.OBJECT_LAST_OWNER_ID:
|
||||
ret.Add(new LSL_Key(obj.ParentGroup.LastOwnerID.ToString()));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_CLICK_ACTION:
|
||||
ret.Add(new LSL_Integer(obj.ClickAction));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_OMEGA:
|
||||
ret.Add(new LSL_Vector(obj.AngularVelocity));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_PRIM_COUNT:
|
||||
ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_TOTAL_INVENTORY_COUNT:
|
||||
SceneObjectPart[] parts = obj.ParentGroup.Parts;
|
||||
int nparts = parts.Count();
|
||||
int count = 0;
|
||||
for(int i = 0; i < nparts; i++)
|
||||
count += parts[i].Inventory.Count;
|
||||
ret.Add(new LSL_Integer(count));
|
||||
break;
|
||||
case ScriptBaseClass.OBJECT_GROUP_TAG:
|
||||
ret.Add(new LSL_String(String.Empty));
|
||||
break;
|
||||
default:
|
||||
// Invalid or unhandled constant.
|
||||
ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL));
|
||||
|
|
|
@ -636,6 +636,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
public const int OBJECT_HOVER_HEIGHT = 25;
|
||||
public const int OBJECT_BODY_SHAPE_TYPE = 26;
|
||||
public const int OBJECT_LAST_OWNER_ID = 27;
|
||||
public const int OBJECT_CLICK_ACTION = 28;
|
||||
public const int OBJECT_OMEGA = 29;
|
||||
public const int OBJECT_PRIM_COUNT = 30;
|
||||
public const int OBJECT_TOTAL_INVENTORY_COUNT = 31;
|
||||
public const int OBJECT_GROUP_TAG = 33;
|
||||
|
||||
// Pathfinding types
|
||||
public const int OPT_OTHER = -1;
|
||||
|
|
|
@ -579,7 +579,70 @@ namespace OpenSim.Services.GridService
|
|||
int count = 0;
|
||||
List<GridRegion> rinfos = new List<GridRegion>();
|
||||
|
||||
if (rdatas != null)
|
||||
if (count < maxNumber && m_AllowHypergridMapSearch && name.Contains("."))
|
||||
{
|
||||
string regionURI = "";
|
||||
string regionName = "";
|
||||
if(!m_HypergridLinker.buildHGRegionURI(name, out regionURI, out regionName))
|
||||
return null;
|
||||
|
||||
string mapname = regionURI + regionName;
|
||||
bool haveMatch = false;
|
||||
|
||||
if (rdatas != null && (rdatas.Count > 0))
|
||||
{
|
||||
// m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count);
|
||||
foreach (RegionData rdata in rdatas)
|
||||
{
|
||||
if (count++ < maxNumber)
|
||||
rinfos.Add(RegionData2RegionInfo(rdata));
|
||||
if(rdata.RegionName == mapname)
|
||||
{
|
||||
haveMatch = true;
|
||||
if(count == maxNumber)
|
||||
{
|
||||
rinfos.RemoveAt(count - 1);
|
||||
rinfos.Add(RegionData2RegionInfo(rdata));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(haveMatch)
|
||||
return rinfos;
|
||||
}
|
||||
|
||||
rdatas = m_Database.Get(Util.EscapeForLike(mapname)+ "%", scopeID);
|
||||
if (rdatas != null && (rdatas.Count > 0))
|
||||
{
|
||||
// m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count);
|
||||
foreach (RegionData rdata in rdatas)
|
||||
{
|
||||
if (count++ < maxNumber)
|
||||
rinfos.Add(RegionData2RegionInfo(rdata));
|
||||
if(rdata.RegionName == mapname)
|
||||
{
|
||||
haveMatch = true;
|
||||
if(count == maxNumber)
|
||||
{
|
||||
rinfos.RemoveAt(count - 1);
|
||||
rinfos.Add(RegionData2RegionInfo(rdata));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(haveMatch)
|
||||
return rinfos;
|
||||
}
|
||||
|
||||
string HGname = regionURI +" "+ regionName;
|
||||
GridRegion r = m_HypergridLinker.LinkRegion(scopeID, HGname);
|
||||
if (r != null)
|
||||
{
|
||||
if( count == maxNumber)
|
||||
rinfos.RemoveAt(count - 1);
|
||||
rinfos.Add(r);
|
||||
}
|
||||
}
|
||||
else if (rdatas != null && (rdatas.Count > 0))
|
||||
{
|
||||
// m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count);
|
||||
foreach (RegionData rdata in rdatas)
|
||||
|
@ -589,13 +652,6 @@ namespace OpenSim.Services.GridService
|
|||
}
|
||||
}
|
||||
|
||||
if (m_AllowHypergridMapSearch && (rdatas == null || (rdatas != null && rdatas.Count == 0)))
|
||||
{
|
||||
GridRegion r = GetHypergridRegionByName(scopeID, name);
|
||||
if (r != null)
|
||||
rinfos.Add(r);
|
||||
}
|
||||
|
||||
return rinfos;
|
||||
}
|
||||
|
||||
|
@ -608,7 +664,20 @@ namespace OpenSim.Services.GridService
|
|||
protected GridRegion GetHypergridRegionByName(UUID scopeID, string name)
|
||||
{
|
||||
if (name.Contains("."))
|
||||
return m_HypergridLinker.LinkRegion(scopeID, name);
|
||||
{
|
||||
string regionURI = "";
|
||||
string regionName = "";
|
||||
if(!m_HypergridLinker.buildHGRegionURI(name, out regionURI, out regionName))
|
||||
return null;
|
||||
|
||||
string mapname = regionURI + regionName;
|
||||
List<RegionData> rdatas = m_Database.Get(Util.EscapeForLike(mapname), scopeID);
|
||||
if ((rdatas != null) && (rdatas.Count > 0))
|
||||
return RegionData2RegionInfo(rdatas[0]); // get the first
|
||||
|
||||
string HGname = regionURI +" "+ regionName;
|
||||
return m_HypergridLinker.LinkRegion(scopeID, HGname);
|
||||
}
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -191,14 +191,14 @@ namespace OpenSim.Services.GridService
|
|||
return TryLinkRegionToCoords(scopeID, mapName, xloc, yloc, UUID.Zero, out reason);
|
||||
}
|
||||
|
||||
public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, UUID ownerID, out string reason)
|
||||
public bool buildHGRegionURI(string inputName, out string serverURI, out string regionName)
|
||||
{
|
||||
reason = string.Empty;
|
||||
GridRegion regInfo = null;
|
||||
serverURI = string.Empty;
|
||||
regionName = string.Empty;
|
||||
|
||||
mapName = mapName.Trim();
|
||||
inputName = inputName.Trim();
|
||||
|
||||
if (!mapName.StartsWith("http") && !mapName.StartsWith("https"))
|
||||
if (!inputName.StartsWith("http") && !inputName.StartsWith("https"))
|
||||
{
|
||||
// Formats: grid.example.com:8002:region name
|
||||
// grid.example.com:region name
|
||||
|
@ -207,37 +207,58 @@ namespace OpenSim.Services.GridService
|
|||
|
||||
string host;
|
||||
uint port = 80;
|
||||
string regionName = "";
|
||||
|
||||
string[] parts = mapName.Split(new char[] { ':' });
|
||||
|
||||
if (parts.Length == 0)
|
||||
string[] parts = inputName.Split(new char[] { ':' });
|
||||
int indx;
|
||||
if(parts.Length == 0)
|
||||
return false;
|
||||
if (parts.Length == 1)
|
||||
{
|
||||
reason = "Wrong format for link-region";
|
||||
return null;
|
||||
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];
|
||||
}
|
||||
|
||||
string serverURI = "http://"+ host +":"+ port.ToString() + "/";
|
||||
// bool success = TryCreateLink(scopeID, xloc, yloc, regionName, port, host, ownerID, out regInfo, out reason);
|
||||
if(TryCreateLink(scopeID, xloc, yloc, regionName, 0, null, serverURI, ownerID, out regInfo, out reason))
|
||||
{
|
||||
regInfo.RegionName = mapName;
|
||||
return regInfo;
|
||||
if(port == 80)
|
||||
serverURI = "http://"+ host + "/";
|
||||
else
|
||||
serverURI = "http://"+ host +":"+ port.ToString() + "/";
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -246,33 +267,62 @@ namespace OpenSim.Services.GridService
|
|||
// http://grid.example.com "region name"
|
||||
// http://grid.example.com
|
||||
|
||||
string serverURI;
|
||||
string regionName = "";
|
||||
|
||||
string[] parts = mapName.Split(new char[] { ' ' });
|
||||
string[] parts = inputName.Split(new char[] { ' ' });
|
||||
|
||||
if (parts.Length == 0)
|
||||
{
|
||||
reason = "Wrong format for link-region";
|
||||
return null;
|
||||
}
|
||||
return false;
|
||||
|
||||
serverURI = parts[0];
|
||||
if (!serverURI.EndsWith("/"))
|
||||
serverURI = serverURI + "/";
|
||||
|
||||
if (parts.Length >= 2)
|
||||
int indx = serverURI.LastIndexOf('/');
|
||||
if(indx > 10)
|
||||
{
|
||||
regionName = mapName.Substring(serverURI.Length);
|
||||
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;
|
||||
return true;
|
||||
}
|
||||
|
||||
public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, UUID ownerID, out string reason)
|
||||
{
|
||||
reason = string.Empty;
|
||||
GridRegion regInfo = null;
|
||||
|
||||
string serverURI = string.Empty;
|
||||
string regionName = string.Empty;
|
||||
|
||||
if(!buildHGRegionURI(mapName, out serverURI, out regionName))
|
||||
{
|
||||
reason = "Wrong URI format for link-region";
|
||||
return null;
|
||||
}
|
||||
|
||||
if (TryCreateLink(scopeID, xloc, yloc, regionName, 0, null, serverURI, ownerID, out regInfo, out reason))
|
||||
{
|
||||
regInfo.RegionName = mapName;
|
||||
regInfo.RegionName = serverURI + regionName;
|
||||
return regInfo;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue