Do not include hyperlinks in a random region search during a login.
Before a random region is chosen, available fallback regions are used for the login.viewer-2-initial-appearance
parent
2368aab534
commit
98f29a47c0
|
@ -28,6 +28,7 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
|
@ -427,14 +428,11 @@ namespace OpenSim.Services.LLLoginService
|
|||
{
|
||||
m_log.WarnFormat("[LLOGIN SERVICE]: User {0} {1} does not have a valid home and this grid does not have default locations. Attempting to find random region",
|
||||
account.FirstName, account.LastName);
|
||||
defaults = m_GridService.GetRegionsByName(scopeID, "", 1);
|
||||
if (defaults != null && defaults.Count > 0)
|
||||
{
|
||||
region = defaults[0];
|
||||
region = FindAlternativeRegion(scopeID);
|
||||
if (region != null)
|
||||
where = "safe";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return region;
|
||||
}
|
||||
|
@ -459,13 +457,10 @@ namespace OpenSim.Services.LLLoginService
|
|||
else
|
||||
{
|
||||
m_log.Info("[LLOGIN SERVICE]: Last Region Not Found Attempting to find random region");
|
||||
defaults = m_GridService.GetRegionsByName(scopeID, "", 1);
|
||||
if (defaults != null && defaults.Count > 0)
|
||||
{
|
||||
region = defaults[0];
|
||||
region = FindAlternativeRegion(scopeID);
|
||||
if (region != null)
|
||||
where = "safe";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
|
@ -564,6 +559,31 @@ namespace OpenSim.Services.LLLoginService
|
|||
|
||||
}
|
||||
|
||||
private GridRegion FindAlternativeRegion(UUID scopeID)
|
||||
{
|
||||
List<GridRegion> hyperlinks = null;
|
||||
List<GridRegion> regions = m_GridService.GetFallbackRegions(scopeID, 1000 * (int)Constants.RegionSize, 1000 * (int)Constants.RegionSize);
|
||||
if (regions != null && regions.Count > 0)
|
||||
{
|
||||
hyperlinks = m_GridService.GetHyperlinks(scopeID);
|
||||
IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks);
|
||||
if (availableRegions.Count() > 0)
|
||||
return availableRegions.ElementAt(0);
|
||||
}
|
||||
// No fallbacks, try to find an arbitrary region that is not a hyperlink
|
||||
// maxNumber is fixed for now; maybe use some search pattern with increasing maxSize here?
|
||||
regions = m_GridService.GetRegionsByName(scopeID, "", 10);
|
||||
if (regions != null && regions.Count > 0)
|
||||
{
|
||||
if (hyperlinks == null)
|
||||
hyperlinks = m_GridService.GetHyperlinks(scopeID);
|
||||
IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks);
|
||||
if (availableRegions.Count() > 0)
|
||||
return availableRegions.ElementAt(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private GridRegion FindForeignRegion(string domainName, uint port, string regionName, out GridRegion gatekeeper)
|
||||
{
|
||||
gatekeeper = new GridRegion();
|
||||
|
|
|
@ -1214,6 +1214,7 @@
|
|||
|
||||
<ReferencePath>../../../bin/</ReferencePath>
|
||||
<Reference name="System"/>
|
||||
<Reference name="System.Core"/>
|
||||
<Reference name="OpenSim.Framework"/>
|
||||
<Reference name="OpenSim.Framework.Capabilities"/>
|
||||
<Reference name="OpenSim.Framework.Console"/>
|
||||
|
|
Loading…
Reference in New Issue