diff options
Diffstat (limited to 'OpenSim/Services/GridService/HypergridLinker.cs')
-rw-r--r-- | OpenSim/Services/GridService/HypergridLinker.cs | 52 |
1 files changed, 29 insertions, 23 deletions
diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs index c273d21..50da1bd 100644 --- a/OpenSim/Services/GridService/HypergridLinker.cs +++ b/OpenSim/Services/GridService/HypergridLinker.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Linq; | ||
30 | using System.Net; | 31 | using System.Net; |
31 | using System.Reflection; | 32 | using System.Reflection; |
32 | using System.Xml; | 33 | using System.Xml; |
@@ -155,6 +156,11 @@ namespace OpenSim.Services.GridService | |||
155 | // From the command line link-region | 156 | // From the command line link-region |
156 | public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, out string reason) | 157 | public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, out string reason) |
157 | { | 158 | { |
159 | return TryLinkRegionToCoords(scopeID, mapName, xloc, yloc, UUID.Zero, out reason); | ||
160 | } | ||
161 | |||
162 | public GridRegion TryLinkRegionToCoords(UUID scopeID, string mapName, int xloc, int yloc, UUID ownerID, out string reason) | ||
163 | { | ||
158 | reason = string.Empty; | 164 | reason = string.Empty; |
159 | string host = "127.0.0.1"; | 165 | string host = "127.0.0.1"; |
160 | string portstr; | 166 | string portstr; |
@@ -190,7 +196,7 @@ namespace OpenSim.Services.GridService | |||
190 | //} | 196 | //} |
191 | 197 | ||
192 | GridRegion regInfo; | 198 | GridRegion regInfo; |
193 | bool success = TryCreateLink(scopeID, xloc, yloc, regionName, port, host, out regInfo, out reason); | 199 | bool success = TryCreateLink(scopeID, xloc, yloc, regionName, port, host, ownerID, out regInfo, out reason); |
194 | if (success) | 200 | if (success) |
195 | { | 201 | { |
196 | regInfo.RegionName = mapName; | 202 | regInfo.RegionName = mapName; |
@@ -200,12 +206,12 @@ namespace OpenSim.Services.GridService | |||
200 | return null; | 206 | return null; |
201 | } | 207 | } |
202 | 208 | ||
203 | public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string externalRegionName, uint externalPort, string externalHostName, out GridRegion regInfo, out string reason) | 209 | public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string externalRegionName, uint externalPort, string externalHostName, UUID ownerID, out GridRegion regInfo, out string reason) |
204 | { | 210 | { |
205 | return TryCreateLink(scopeID, xloc, yloc, externalRegionName, externalPort, externalHostName, null, out regInfo, out reason); | 211 | return TryCreateLink(scopeID, xloc, yloc, externalRegionName, externalPort, externalHostName, null, ownerID, out regInfo, out reason); |
206 | } | 212 | } |
207 | 213 | ||
208 | public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string externalRegionName, uint externalPort, string externalHostName, string serverURI, out GridRegion regInfo, out string reason) | 214 | public bool TryCreateLink(UUID scopeID, int xloc, int yloc, string externalRegionName, uint externalPort, string externalHostName, string serverURI, UUID ownerID, out GridRegion regInfo, out string reason) |
209 | { | 215 | { |
210 | m_log.DebugFormat("[HYPERGRID LINKER]: Link to {0}:{1}:{2}, in {3}-{4}", externalHostName, externalPort, externalRegionName, xloc, yloc); | 216 | m_log.DebugFormat("[HYPERGRID LINKER]: Link to {0}:{1}:{2}, in {3}-{4}", externalHostName, externalPort, externalRegionName, xloc, yloc); |
211 | 217 | ||
@@ -225,6 +231,16 @@ namespace OpenSim.Services.GridService | |||
225 | regInfo.RegionLocX = xloc; | 231 | regInfo.RegionLocX = xloc; |
226 | regInfo.RegionLocY = yloc; | 232 | regInfo.RegionLocY = yloc; |
227 | regInfo.ScopeID = scopeID; | 233 | regInfo.ScopeID = scopeID; |
234 | regInfo.EstateOwner = ownerID; | ||
235 | |||
236 | // Check for free coordinates | ||
237 | GridRegion region = m_GridService.GetRegionByPosition(regInfo.ScopeID, regInfo.RegionLocX, regInfo.RegionLocY); | ||
238 | if (region != null) | ||
239 | { | ||
240 | m_log.WarnFormat("[HYPERGRID LINKER]: Coordinates {0}-{1} are already occupied by region {2} with uuid {3}", regInfo.RegionLocX, regInfo.RegionLocY, region.RegionName, region.RegionID); | ||
241 | reason = "Coordinates are already in use"; | ||
242 | return false; | ||
243 | } | ||
228 | 244 | ||
229 | try | 245 | try |
230 | { | 246 | { |
@@ -247,11 +263,11 @@ namespace OpenSim.Services.GridService | |||
247 | 263 | ||
248 | if (regionID != UUID.Zero) | 264 | if (regionID != UUID.Zero) |
249 | { | 265 | { |
250 | GridRegion r = m_GridService.GetRegionByUUID(scopeID, regionID); | 266 | region = m_GridService.GetRegionByUUID(scopeID, regionID); |
251 | if (r != null) | 267 | if (region != null) |
252 | { | 268 | { |
253 | m_log.DebugFormat("[HYPERGRID LINKER]: Region already exists in coordinates {0} {1}", r.RegionLocX / Constants.RegionSize, r.RegionLocY / Constants.RegionSize); | 269 | m_log.DebugFormat("[HYPERGRID LINKER]: Region already exists in coordinates {0} {1}", region.RegionLocX / Constants.RegionSize, region.RegionLocY / Constants.RegionSize); |
254 | regInfo = r; | 270 | regInfo = region; |
255 | return true; | 271 | return true; |
256 | } | 272 | } |
257 | 273 | ||
@@ -366,17 +382,8 @@ namespace OpenSim.Services.GridService | |||
366 | { | 382 | { |
367 | // Check for regions which are not linked regions | 383 | // Check for regions which are not linked regions |
368 | List<GridRegion> hyperlinks = m_GridService.GetHyperlinks(m_ScopeID); | 384 | List<GridRegion> hyperlinks = m_GridService.GetHyperlinks(m_ScopeID); |
369 | // would like to use .Except, but doesn't seem to exist | 385 | IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks); |
370 | //IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks); | 386 | if (availableRegions.Count() == 0) |
371 | List<GridRegion> availableRegions = regions.FindAll(delegate(GridRegion region) | ||
372 | { | ||
373 | // Ewww! n^2 | ||
374 | if (hyperlinks.Find(delegate(GridRegion r) { return r.RegionID == region.RegionID; }) == null) // not hyperlink. good. | ||
375 | return true; | ||
376 | |||
377 | return false; | ||
378 | }); | ||
379 | if (availableRegions.Count == 0) | ||
380 | return false; | 387 | return false; |
381 | } | 388 | } |
382 | 389 | ||
@@ -458,7 +465,7 @@ namespace OpenSim.Services.GridService | |||
458 | remoteName = cmdparams[3]; | 465 | remoteName = cmdparams[3]; |
459 | string reason = string.Empty; | 466 | string reason = string.Empty; |
460 | GridRegion regInfo; | 467 | GridRegion regInfo; |
461 | TryCreateLink(UUID.Zero, xloc, yloc, remoteName, 0, null, serverURI, out regInfo, out reason); | 468 | TryCreateLink(UUID.Zero, xloc, yloc, remoteName, 0, null, serverURI, UUID.Zero, out regInfo, out reason); |
462 | } | 469 | } |
463 | 470 | ||
464 | private void RunHGCommand(string command, string[] cmdparams) | 471 | private void RunHGCommand(string command, string[] cmdparams) |
@@ -571,7 +578,7 @@ namespace OpenSim.Services.GridService | |||
571 | xloc = xloc * (int)Constants.RegionSize; | 578 | xloc = xloc * (int)Constants.RegionSize; |
572 | yloc = yloc * (int)Constants.RegionSize; | 579 | yloc = yloc * (int)Constants.RegionSize; |
573 | string reason = string.Empty; | 580 | string reason = string.Empty; |
574 | if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, out regInfo, out reason)) | 581 | if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, UUID.Zero, out regInfo, out reason)) |
575 | { | 582 | { |
576 | if (cmdparams.Length >= 5) | 583 | if (cmdparams.Length >= 5) |
577 | { | 584 | { |
@@ -673,8 +680,7 @@ namespace OpenSim.Services.GridService | |||
673 | xloc = xloc * (int)Constants.RegionSize; | 680 | xloc = xloc * (int)Constants.RegionSize; |
674 | yloc = yloc * (int)Constants.RegionSize; | 681 | yloc = yloc * (int)Constants.RegionSize; |
675 | string reason = string.Empty; | 682 | string reason = string.Empty; |
676 | if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, | 683 | if (TryCreateLink(UUID.Zero, xloc, yloc, "", externalPort, externalHostName, UUID.Zero, out regInfo, out reason)) |
677 | externalHostName, out regInfo, out reason)) | ||
678 | { | 684 | { |
679 | regInfo.RegionName = config.GetString("localName", ""); | 685 | regInfo.RegionName = config.GetString("localName", ""); |
680 | } | 686 | } |