diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Services/GridService/GridService.cs | 99 |
1 files changed, 51 insertions, 48 deletions
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index aab403a..ee3b858 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs | |||
@@ -137,20 +137,25 @@ namespace OpenSim.Services.GridService | |||
137 | if (regionInfos.RegionID == UUID.Zero) | 137 | if (regionInfos.RegionID == UUID.Zero) |
138 | return "Invalid RegionID - cannot be zero UUID"; | 138 | return "Invalid RegionID - cannot be zero UUID"; |
139 | 139 | ||
140 | // This needs better sanity testing. What if regionInfo is registering in | ||
141 | // overlapping coords? | ||
142 | RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | 140 | RegionData region = m_Database.Get(regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); |
141 | if ((region != null) && (region.RegionID != regionInfos.RegionID)) | ||
142 | { | ||
143 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.", | ||
144 | regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | ||
145 | return "Region overlaps another region"; | ||
146 | } | ||
147 | |||
143 | if (region != null) | 148 | if (region != null) |
144 | { | 149 | { |
145 | // There is a preexisting record | 150 | // There is a preexisting record |
146 | // | 151 | // |
147 | // Get it's flags | 152 | // Get it's flags |
148 | // | 153 | // |
149 | OpenSim.Data.RegionFlags rflags = (OpenSim.Data.RegionFlags)Convert.ToInt32(region.Data["flags"]); | 154 | OpenSim.Framework.RegionFlags rflags = (OpenSim.Framework.RegionFlags)Convert.ToInt32(region.Data["flags"]); |
150 | 155 | ||
151 | // Is this a reservation? | 156 | // Is this a reservation? |
152 | // | 157 | // |
153 | if ((rflags & OpenSim.Data.RegionFlags.Reservation) != 0) | 158 | if ((rflags & OpenSim.Framework.RegionFlags.Reservation) != 0) |
154 | { | 159 | { |
155 | // Regions reserved for the null key cannot be taken. | 160 | // Regions reserved for the null key cannot be taken. |
156 | if ((string)region.Data["PrincipalID"] == UUID.Zero.ToString()) | 161 | if ((string)region.Data["PrincipalID"] == UUID.Zero.ToString()) |
@@ -161,10 +166,10 @@ namespace OpenSim.Services.GridService | |||
161 | // NOTE: Fudging the flags value here, so these flags | 166 | // NOTE: Fudging the flags value here, so these flags |
162 | // should not be used elsewhere. Don't optimize | 167 | // should not be used elsewhere. Don't optimize |
163 | // this with the later retrieval of the same flags! | 168 | // this with the later retrieval of the same flags! |
164 | rflags |= OpenSim.Data.RegionFlags.Authenticate; | 169 | rflags |= OpenSim.Framework.RegionFlags.Authenticate; |
165 | } | 170 | } |
166 | 171 | ||
167 | if ((rflags & OpenSim.Data.RegionFlags.Authenticate) != 0) | 172 | if ((rflags & OpenSim.Framework.RegionFlags.Authenticate) != 0) |
168 | { | 173 | { |
169 | // Can we authenticate at all? | 174 | // Can we authenticate at all? |
170 | // | 175 | // |
@@ -176,19 +181,36 @@ namespace OpenSim.Services.GridService | |||
176 | } | 181 | } |
177 | } | 182 | } |
178 | 183 | ||
179 | if ((region != null) && (region.RegionID != regionInfos.RegionID)) | 184 | // If we get here, the destination is clear. Now for the real check. |
185 | |||
186 | if (!m_AllowDuplicateNames) | ||
180 | { | 187 | { |
181 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register in coordinates {1}, {2} which are already in use in scope {3}.", | 188 | List<RegionData> dupe = m_Database.Get(regionInfos.RegionName, scopeID); |
182 | regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY, scopeID); | 189 | if (dupe != null && dupe.Count > 0) |
183 | return "Region overlaps another region"; | 190 | { |
191 | foreach (RegionData d in dupe) | ||
192 | { | ||
193 | if (d.RegionID != regionInfos.RegionID) | ||
194 | { | ||
195 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register duplicate name with ID {1}.", | ||
196 | regionInfos.RegionName, regionInfos.RegionID); | ||
197 | return "Duplicate region name"; | ||
198 | } | ||
199 | } | ||
200 | } | ||
184 | } | 201 | } |
185 | 202 | ||
203 | // If there is an old record for us, delete it if it is elsewhere. | ||
204 | region = m_Database.Get(regionInfos.RegionID, scopeID); | ||
186 | if ((region != null) && (region.RegionID == regionInfos.RegionID) && | 205 | if ((region != null) && (region.RegionID == regionInfos.RegionID) && |
187 | ((region.posX != regionInfos.RegionLocX) || (region.posY != regionInfos.RegionLocY))) | 206 | ((region.posX != regionInfos.RegionLocX) || (region.posY != regionInfos.RegionLocY))) |
188 | { | 207 | { |
189 | if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Data.RegionFlags.NoMove) != 0) | 208 | if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Framework.RegionFlags.NoMove) != 0) |
190 | return "Can't move this region"; | 209 | return "Can't move this region"; |
191 | 210 | ||
211 | if ((Convert.ToInt32(region.Data["flags"]) & (int)OpenSim.Framework.RegionFlags.LockedOut) != 0) | ||
212 | return "Region locked out"; | ||
213 | |||
192 | // Region reregistering in other coordinates. Delete the old entry | 214 | // Region reregistering in other coordinates. Delete the old entry |
193 | m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) was previously registered at {2}-{3}. Deleting old entry.", | 215 | m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) was previously registered at {2}-{3}. Deleting old entry.", |
194 | regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY); | 216 | regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionLocX, regionInfos.RegionLocY); |
@@ -203,23 +225,6 @@ namespace OpenSim.Services.GridService | |||
203 | } | 225 | } |
204 | } | 226 | } |
205 | 227 | ||
206 | if (!m_AllowDuplicateNames) | ||
207 | { | ||
208 | List<RegionData> dupe = m_Database.Get(regionInfos.RegionName, scopeID); | ||
209 | if (dupe != null && dupe.Count > 0) | ||
210 | { | ||
211 | foreach (RegionData d in dupe) | ||
212 | { | ||
213 | if (d.RegionID != regionInfos.RegionID) | ||
214 | { | ||
215 | m_log.WarnFormat("[GRID SERVICE]: Region {0} tried to register duplicate name with ID {1}.", | ||
216 | regionInfos.RegionName, regionInfos.RegionID); | ||
217 | return "Duplicate region name"; | ||
218 | } | ||
219 | } | ||
220 | } | ||
221 | } | ||
222 | |||
223 | // Everything is ok, let's register | 228 | // Everything is ok, let's register |
224 | RegionData rdata = RegionInfo2RegionData(regionInfos); | 229 | RegionData rdata = RegionInfo2RegionData(regionInfos); |
225 | rdata.ScopeID = scopeID; | 230 | rdata.ScopeID = scopeID; |
@@ -227,10 +232,8 @@ namespace OpenSim.Services.GridService | |||
227 | if (region != null) | 232 | if (region != null) |
228 | { | 233 | { |
229 | int oldFlags = Convert.ToInt32(region.Data["flags"]); | 234 | int oldFlags = Convert.ToInt32(region.Data["flags"]); |
230 | if ((oldFlags & (int)OpenSim.Data.RegionFlags.LockedOut) != 0) | ||
231 | return "Region locked out"; | ||
232 | 235 | ||
233 | oldFlags &= ~(int)OpenSim.Data.RegionFlags.Reservation; | 236 | oldFlags &= ~(int)OpenSim.Framework.RegionFlags.Reservation; |
234 | 237 | ||
235 | rdata.Data["flags"] = oldFlags.ToString(); // Preserve flags | 238 | rdata.Data["flags"] = oldFlags.ToString(); // Preserve flags |
236 | } | 239 | } |
@@ -249,7 +252,7 @@ namespace OpenSim.Services.GridService | |||
249 | } | 252 | } |
250 | 253 | ||
251 | int flags = Convert.ToInt32(rdata.Data["flags"]); | 254 | int flags = Convert.ToInt32(rdata.Data["flags"]); |
252 | flags |= (int)OpenSim.Data.RegionFlags.RegionOnline; | 255 | flags |= (int)OpenSim.Framework.RegionFlags.RegionOnline; |
253 | rdata.Data["flags"] = flags.ToString(); | 256 | rdata.Data["flags"] = flags.ToString(); |
254 | 257 | ||
255 | try | 258 | try |
@@ -280,9 +283,9 @@ namespace OpenSim.Services.GridService | |||
280 | 283 | ||
281 | int flags = Convert.ToInt32(region.Data["flags"]); | 284 | int flags = Convert.ToInt32(region.Data["flags"]); |
282 | 285 | ||
283 | if (!m_DeleteOnUnregister || (flags & (int)OpenSim.Data.RegionFlags.Persistent) != 0) | 286 | if (!m_DeleteOnUnregister || (flags & (int)OpenSim.Framework.RegionFlags.Persistent) != 0) |
284 | { | 287 | { |
285 | flags &= ~(int)OpenSim.Data.RegionFlags.RegionOnline; | 288 | flags &= ~(int)OpenSim.Framework.RegionFlags.RegionOnline; |
286 | region.Data["flags"] = flags.ToString(); | 289 | region.Data["flags"] = flags.ToString(); |
287 | region.Data["last_seen"] = Util.UnixTimeSinceEpoch(); | 290 | region.Data["last_seen"] = Util.UnixTimeSinceEpoch(); |
288 | try | 291 | try |
@@ -317,7 +320,7 @@ namespace OpenSim.Services.GridService | |||
317 | if (rdata.RegionID != regionID) | 320 | if (rdata.RegionID != regionID) |
318 | { | 321 | { |
319 | int flags = Convert.ToInt32(rdata.Data["flags"]); | 322 | int flags = Convert.ToInt32(rdata.Data["flags"]); |
320 | if ((flags & (int)Data.RegionFlags.Hyperlink) == 0) // no hyperlinks as neighbours | 323 | if ((flags & (int)Framework.RegionFlags.Hyperlink) == 0) // no hyperlinks as neighbours |
321 | rinfos.Add(RegionData2RegionInfo(rdata)); | 324 | rinfos.Add(RegionData2RegionInfo(rdata)); |
322 | } | 325 | } |
323 | } | 326 | } |
@@ -467,7 +470,7 @@ namespace OpenSim.Services.GridService | |||
467 | 470 | ||
468 | foreach (RegionData r in regions) | 471 | foreach (RegionData r in regions) |
469 | { | 472 | { |
470 | if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Data.RegionFlags.RegionOnline) != 0) | 473 | if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Framework.RegionFlags.RegionOnline) != 0) |
471 | ret.Add(RegionData2RegionInfo(r)); | 474 | ret.Add(RegionData2RegionInfo(r)); |
472 | } | 475 | } |
473 | 476 | ||
@@ -483,7 +486,7 @@ namespace OpenSim.Services.GridService | |||
483 | 486 | ||
484 | foreach (RegionData r in regions) | 487 | foreach (RegionData r in regions) |
485 | { | 488 | { |
486 | if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Data.RegionFlags.RegionOnline) != 0) | 489 | if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Framework.RegionFlags.RegionOnline) != 0) |
487 | ret.Add(RegionData2RegionInfo(r)); | 490 | ret.Add(RegionData2RegionInfo(r)); |
488 | } | 491 | } |
489 | 492 | ||
@@ -499,7 +502,7 @@ namespace OpenSim.Services.GridService | |||
499 | 502 | ||
500 | foreach (RegionData r in regions) | 503 | foreach (RegionData r in regions) |
501 | { | 504 | { |
502 | if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Data.RegionFlags.RegionOnline) != 0) | 505 | if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Framework.RegionFlags.RegionOnline) != 0) |
503 | ret.Add(RegionData2RegionInfo(r)); | 506 | ret.Add(RegionData2RegionInfo(r)); |
504 | } | 507 | } |
505 | 508 | ||
@@ -626,7 +629,7 @@ namespace OpenSim.Services.GridService | |||
626 | 629 | ||
627 | private void OutputRegionToConsole(RegionData r) | 630 | private void OutputRegionToConsole(RegionData r) |
628 | { | 631 | { |
629 | OpenSim.Data.RegionFlags flags = (OpenSim.Data.RegionFlags)Convert.ToInt32(r.Data["flags"]); | 632 | OpenSim.Framework.RegionFlags flags = (OpenSim.Framework.RegionFlags)Convert.ToInt32(r.Data["flags"]); |
630 | 633 | ||
631 | ConsoleDisplayList dispList = new ConsoleDisplayList(); | 634 | ConsoleDisplayList dispList = new ConsoleDisplayList(); |
632 | dispList.AddRow("Region Name", r.RegionName); | 635 | dispList.AddRow("Region Name", r.RegionName); |
@@ -656,7 +659,7 @@ namespace OpenSim.Services.GridService | |||
656 | 659 | ||
657 | foreach (RegionData r in regions) | 660 | foreach (RegionData r in regions) |
658 | { | 661 | { |
659 | OpenSim.Data.RegionFlags flags = (OpenSim.Data.RegionFlags)Convert.ToInt32(r.Data["flags"]); | 662 | OpenSim.Framework.RegionFlags flags = (OpenSim.Framework.RegionFlags)Convert.ToInt32(r.Data["flags"]); |
660 | dispTable.AddRow( | 663 | dispTable.AddRow( |
661 | r.RegionName, | 664 | r.RegionName, |
662 | r.RegionID.ToString(), | 665 | r.RegionID.ToString(), |
@@ -670,7 +673,7 @@ namespace OpenSim.Services.GridService | |||
670 | 673 | ||
671 | private int ParseFlags(int prev, string flags) | 674 | private int ParseFlags(int prev, string flags) |
672 | { | 675 | { |
673 | OpenSim.Data.RegionFlags f = (OpenSim.Data.RegionFlags)prev; | 676 | OpenSim.Framework.RegionFlags f = (OpenSim.Framework.RegionFlags)prev; |
674 | 677 | ||
675 | string[] parts = flags.Split(new char[] {',', ' '}, StringSplitOptions.RemoveEmptyEntries); | 678 | string[] parts = flags.Split(new char[] {',', ' '}, StringSplitOptions.RemoveEmptyEntries); |
676 | 679 | ||
@@ -682,18 +685,18 @@ namespace OpenSim.Services.GridService | |||
682 | { | 685 | { |
683 | if (p.StartsWith("+")) | 686 | if (p.StartsWith("+")) |
684 | { | 687 | { |
685 | val = (int)Enum.Parse(typeof(OpenSim.Data.RegionFlags), p.Substring(1)); | 688 | val = (int)Enum.Parse(typeof(OpenSim.Framework.RegionFlags), p.Substring(1)); |
686 | f |= (OpenSim.Data.RegionFlags)val; | 689 | f |= (OpenSim.Framework.RegionFlags)val; |
687 | } | 690 | } |
688 | else if (p.StartsWith("-")) | 691 | else if (p.StartsWith("-")) |
689 | { | 692 | { |
690 | val = (int)Enum.Parse(typeof(OpenSim.Data.RegionFlags), p.Substring(1)); | 693 | val = (int)Enum.Parse(typeof(OpenSim.Framework.RegionFlags), p.Substring(1)); |
691 | f &= ~(OpenSim.Data.RegionFlags)val; | 694 | f &= ~(OpenSim.Framework.RegionFlags)val; |
692 | } | 695 | } |
693 | else | 696 | else |
694 | { | 697 | { |
695 | val = (int)Enum.Parse(typeof(OpenSim.Data.RegionFlags), p); | 698 | val = (int)Enum.Parse(typeof(OpenSim.Framework.RegionFlags), p); |
696 | f |= (OpenSim.Data.RegionFlags)val; | 699 | f |= (OpenSim.Framework.RegionFlags)val; |
697 | } | 700 | } |
698 | } | 701 | } |
699 | catch (Exception) | 702 | catch (Exception) |
@@ -725,7 +728,7 @@ namespace OpenSim.Services.GridService | |||
725 | int flags = Convert.ToInt32(r.Data["flags"]); | 728 | int flags = Convert.ToInt32(r.Data["flags"]); |
726 | flags = ParseFlags(flags, cmd[4]); | 729 | flags = ParseFlags(flags, cmd[4]); |
727 | r.Data["flags"] = flags.ToString(); | 730 | r.Data["flags"] = flags.ToString(); |
728 | OpenSim.Data.RegionFlags f = (OpenSim.Data.RegionFlags)flags; | 731 | OpenSim.Framework.RegionFlags f = (OpenSim.Framework.RegionFlags)flags; |
729 | 732 | ||
730 | MainConsole.Instance.Output(String.Format("Set region {0} to {1}", r.RegionName, f)); | 733 | MainConsole.Instance.Output(String.Format("Set region {0} to {1}", r.RegionName, f)); |
731 | m_Database.Store(r); | 734 | m_Database.Store(r); |