diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs index 1bae9f7873..033ae2286d 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/RegionGridServiceConnector.cs @@ -337,6 +337,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid return rinfo; } + public GridRegion GetLocalRegionByName(UUID scopeID, string name) + { + return null; + } + + public GridRegion GetLocalRegionByURI(UUID scopeID, RegionURI uri) + { + return null; + } + public List GetRegionsByName(UUID scopeID, string name, int maxNumber) { var ruri = new RegionURI(name, m_ThisGridInfo); diff --git a/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs index c76d342b33..31c1ef8c42 100644 --- a/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs +++ b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs @@ -65,16 +65,9 @@ namespace OpenSim.Server.Handlers.Hypergrid if (name == null) name = string.Empty; - UUID regionID = UUID.Zero; - string externalName = string.Empty; - string imageURL = string.Empty; - ulong regionHandle = 0; - string reason = string.Empty; - int sizeX = 256; - int sizeY = 256; - m_log.DebugFormat("[HG Handler]: XMLRequest to link to {0} from {1}", (name.Length == 0) ? "default region" : name, remoteClient.Address.ToString()); - bool success = m_GatekeeperService.LinkRegion(name, out regionID, out regionHandle, out externalName, out imageURL, out reason, out sizeX, out sizeY); + bool success = m_GatekeeperService.LinkLocalRegion(name, out UUID regionID, out ulong regionHandle, out string externalName, + out string imageURL, out string reason, out int sizeX, out int sizeY); Hashtable hash = new Hashtable(); hash["result"] = success.ToString(); diff --git a/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs b/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs index 32b95cabba..ec0c3bf8de 100644 --- a/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs +++ b/OpenSim/Services/Connectors/Grid/GridServicesConnector.cs @@ -369,11 +369,20 @@ namespace OpenSim.Services.Connectors return rinfo; } + public GridRegion GetLocalRegionByName(UUID scopeID, string regionName) + { + return null; + } public GridRegion GetRegionByURI(UUID scopeID, RegionURI uri) { return null; } + public GridRegion GetLocalRegionByURI(UUID scopeID, RegionURI uri) + { + return null; + } + public List GetRegionsByName(UUID scopeID, string name, int maxNumber) { Dictionary sendData = new Dictionary(); diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index 41da5ab912..194858bd3e 100755 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs @@ -546,7 +546,7 @@ namespace OpenSim.Services.GridService if (localGrid) { - if(uri.HasRegionName) + if (uri.HasRegionName) { RegionData rdata = m_Database.GetSpecific(uri.RegionName, scopeID); if (rdata != null) @@ -583,6 +583,40 @@ namespace OpenSim.Services.GridService return r; } + public GridRegion GetLocalRegionByName(UUID scopeID, string name) + { + var nameURI = new RegionURI(name); + return GetLocalRegionByURI(scopeID, nameURI); + } + + public GridRegion GetLocalRegionByURI(UUID scopeID, RegionURI uri) + { + if (!uri.IsValid) + return null; + + if (uri.HasHost) + { + if (!uri.ResolveDNS()) + return null; + if(!m_HypergridLinker.IsLocalGrid(uri.HostUrl)) + return null; + } + + if (uri.HasRegionName) + { + RegionData rdata = m_Database.GetSpecific(uri.RegionName, scopeID); + if (rdata != null) + return RegionData2RegionInfo(rdata); + } + else + { + List defregs = GetDefaultRegions(scopeID); + if (defregs != null) + return defregs[0]; + } + return null; + } + public List GetRegionsByName(UUID scopeID, string name, int maxNumber) { // m_log.DebugFormat("[GRID SERVICE]: GetRegionsByName {0}", name); diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs index f0e45d0548..e5dbd6107b 100644 --- a/OpenSim/Services/HypergridService/GatekeeperService.cs +++ b/OpenSim/Services/HypergridService/GatekeeperService.cs @@ -222,7 +222,7 @@ namespace OpenSim.Services.HypergridService } } - public bool LinkRegion(string regionName, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason, out int sizeX, out int sizeY) + public bool LinkLocalRegion(string regionName, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason, out int sizeX, out int sizeY) { regionID = UUID.Zero; regionHandle = 0; @@ -251,7 +251,7 @@ namespace OpenSim.Services.HypergridService } else { - region = m_GridService.GetRegionByName(m_ScopeID, regionName); + region = m_GridService.GetLocalRegionByName(m_ScopeID, regionName); if (region is null) { reason = "Region not found"; diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs index 8982810201..a6bfbc88a9 100644 --- a/OpenSim/Services/Interfaces/IGridService.cs +++ b/OpenSim/Services/Interfaces/IGridService.cs @@ -85,6 +85,9 @@ namespace OpenSim.Services.Interfaces GridRegion GetRegionByName(UUID scopeID, string regionName); GridRegion GetRegionByURI(UUID scopeID, RegionURI uri); + GridRegion GetLocalRegionByName(UUID scopeID, string regionName); + GridRegion GetLocalRegionByURI(UUID scopeID, RegionURI uri); + /// /// Get information about regions starting with the provided name. /// diff --git a/OpenSim/Services/Interfaces/IHypergridServices.cs b/OpenSim/Services/Interfaces/IHypergridServices.cs index e0a63cabe1..bb0b165da4 100644 --- a/OpenSim/Services/Interfaces/IHypergridServices.cs +++ b/OpenSim/Services/Interfaces/IHypergridServices.cs @@ -36,7 +36,7 @@ namespace OpenSim.Services.Interfaces { public interface IGatekeeperService { - bool LinkRegion(string regionDescriptor, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason, out int sizeX, out int sizeY); + bool LinkLocalRegion(string regionDescriptor, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason, out int sizeX, out int sizeY); /// /// Returns the region a Hypergrid visitor should enter.