diff --git a/OpenSim/Framework/RegionURI.cs b/OpenSim/Framework/RegionURI.cs index 07b75f155f..22f47b3252 100644 --- a/OpenSim/Framework/RegionURI.cs +++ b/OpenSim/Framework/RegionURI.cs @@ -513,6 +513,17 @@ namespace OpenSim.Framework } } + public string RegionHostPortSpaceName + { + get + { + string ret = (Flags & URIFlags.HasHost) != 0 ? (Host + ":" + Port + "/ ") : ""; // space needed for compatibility + if ((Flags & URIFlags.HasRegionName) != 0) + ret += RegionName; + return ret; + } + } + // this needs to be set before get public bool IsLocalGrid { diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs index a41cf8601c..d6dc2c07b1 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs @@ -358,7 +358,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid return rinfo; List grinfo = null; - if (!uri.HasRegionName) + if (!uri.HasRegionName && (rinfo == null || rinfo.Count == 0)) { List grinfos = m_RemoteGridService.GetDefaultRegions(scopeID); if (grinfos == null || grinfos.Count == 0) diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs index c73fbdb45f..d9267a3542 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs @@ -141,7 +141,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4)) { // final block, closing the search result - AddFinalBlock(blocks,mapName); + AddFinalBlock(blocks, mapName); // flags are agent flags sent from the viewer. // they have different values depending on different viewers, apparently @@ -171,14 +171,14 @@ namespace OpenSim.Region.CoreModules.World.WorldMap MapBlockData block = new MapBlockData(); WorldMap.MapBlockFromGridRegion(block, info, flags); - if (flags == 2 && regionInfos.Count == 1 && needOriginalName) - block.Name = mapNameOrig; + if (needOriginalName && flags == 2 && regionInfos.Count == 1) + block.Name = mapNameOrig; blocks.Add(block); } } // final block, closing the search result - AddFinalBlock(blocks,mapNameOrig); + AddFinalBlock(blocks, mapNameOrig); // flags are agent flags sent from the viewer. // they have different values depending on different viewers, apparently diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index d53ac977be..f706b4906e 100755 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs @@ -561,21 +561,25 @@ namespace OpenSim.Services.GridService if (!nameURI.IsValid) return new List(); - List rdatas = m_Database.Get("%" + Util.EscapeForLike(nameURI.RegionUrlAndName) + "%", scopeID); - int count = 0; + + string mapname = nameURI.RegionHostPortSpaceName; + List rdatas = m_Database.Get("%" + Util.EscapeForLike(mapname) + "%", scopeID); List rinfos = new List(); if (m_AllowHypergridMapSearch && nameURI.HasHost) { - string mapname = nameURI.RegionUrlAndName; - bool haveMatch = false; if (rdatas != null && (rdatas.Count > 0)) { + bool haveMatch = false; // m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count); foreach (RegionData rdata in rdatas) { - if (mapname.Equals(rdata.RegionName, StringComparison.InvariantCultureIgnoreCase)) + int indx = rdata.RegionName.IndexOf("://"); + if(indx < 0) + continue; + string rname = rdata.RegionName.Substring(indx + 3); + if (mapname.Equals(rname, StringComparison.InvariantCultureIgnoreCase)) { haveMatch = true; rinfos.Insert(0, RegionData2RegionInfo(rdata)); @@ -597,20 +601,32 @@ namespace OpenSim.Services.GridService rinfos.Add(r); } } - else if (rdatas != null && (rdatas.Count > 0)) + else { - string name = nameURI.RegionName; - //m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count); - foreach (RegionData rdata in rdatas) + if (!nameURI.HasRegionName) { - if (name.Equals(rdata.RegionName, StringComparison.InvariantCultureIgnoreCase)) + List dinfos = GetDefaultRegions(scopeID); + if(dinfos != null && dinfos.Count >0) + rinfos.Add(dinfos[0]); + } + else + { + string name = nameURI.RegionName; + if (rdatas != null && (rdatas.Count > 0)) { - rinfos.Insert(0, RegionData2RegionInfo(rdata)); - if (count == maxNumber) - rinfos.RemoveAt(count - 1); + //m_log.DebugFormat("[GRID SERVICE]: Found {0} regions", rdatas.Count); + foreach (RegionData rdata in rdatas) + { + if (name.Equals(rdata.RegionName, StringComparison.InvariantCultureIgnoreCase)) + { + rinfos.Insert(0, RegionData2RegionInfo(rdata)); + if (count == maxNumber) + rinfos.RemoveAt(count - 1); + } + else if (count++ < maxNumber) + rinfos.Add(RegionData2RegionInfo(rdata)); + } } - else if (count++ < maxNumber) - rinfos.Add(RegionData2RegionInfo(rdata)); } } return rinfos; diff --git a/bin/OpenMetaverse.Rendering.Meshmerizer.dll b/bin/OpenMetaverse.Rendering.Meshmerizer.dll index 6c697d3b66..2f64f37b65 100755 Binary files a/bin/OpenMetaverse.Rendering.Meshmerizer.dll and b/bin/OpenMetaverse.Rendering.Meshmerizer.dll differ diff --git a/bin/OpenMetaverse.StructuredData.dll b/bin/OpenMetaverse.StructuredData.dll index e7f7a99336..91d19bf9c7 100755 Binary files a/bin/OpenMetaverse.StructuredData.dll and b/bin/OpenMetaverse.StructuredData.dll differ diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll index 6476a66eb1..c8a7fb2474 100755 Binary files a/bin/OpenMetaverse.dll and b/bin/OpenMetaverse.dll differ diff --git a/bin/OpenMetaverseTypes.dll b/bin/OpenMetaverseTypes.dll index 2c403092e3..69c825bdd0 100755 Binary files a/bin/OpenMetaverseTypes.dll and b/bin/OpenMetaverseTypes.dll differ