From d49cc7ca905a54f72707e5fa728c4dfa68a514fb Mon Sep 17 00:00:00 2001 From: Melanie Date: Fri, 15 Jan 2010 21:35:10 +0000 Subject: Implement "Reservation" flag behavior. --- OpenSim/Services/GridService/GridService.cs | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'OpenSim') diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index 6e2c0d7..6826940 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs @@ -90,6 +90,40 @@ namespace OpenSim.Services.GridService // This needs better sanity testing. What if regionInfo is registering in // overlapping coords? RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); + if (region != null) + { + // There is a preexisting record + // + // Get it's flags + // + OpenSim.Data.RegionFlags rflags = (OpenSim.Data.RegionFlags)Convert.ToInt32(region.Data["Flags"]); + + // Is this a reservation? + // + if ((rflags & OpenSim.Data.RegionFlags.Reservation) != 0) + { + // Regions reserved for the null key cannot be taken. + // + if (region.Data["PrincipalID"] == UUID.Zero.ToString()) + return false; + + // Treat it as an auth request + // + // NOTE: Fudging the flags value here, so these flags + // should not be used elsewhere. Don't optimize + // this with the later retrieval of the same flags! + // + rflags |= OpenSim.Data.RegionFlags.Authenticate; + } + + if ((rflags & OpenSim.Data.RegionFlags.Authenticate) != 0) + { + // TODO: Authenticate the principal + + return false; + } + } + if ((region != null) && (region.RegionID != regionInfos.RegionID)) { m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.", -- cgit v1.1