private GridRegion FindAlternativeRegion(UUID scopeID)
        {
            List <GridRegion> hyperlinks = null;
            List <GridRegion> regions    = m_GridService.GetFallbackRegions(scopeID, (int)Util.RegionToWorldLoc(1000), (int)Util.RegionToWorldLoc(1000));

            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);
        }
        public List <GridRegion> GetHyperlinks(UUID scopeID)
        {
            List <GridRegion> rinfo = m_LocalGridService.GetHyperlinks(scopeID);
            //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Local GetHyperlinks {0} found {1} regions", name, rinfo.Count);
            List <GridRegion> grinfo = m_RemoteGridService.GetHyperlinks(scopeID);

            if (grinfo != null)
            {
                //m_log.DebugFormat("[REMOTE GRID CONNECTOR]: Remote GetHyperlinks {0} found {1} regions", name, grinfo.Count);
                foreach (GridRegion r in grinfo)
                {
                    if (rinfo.Find(delegate(GridRegion gr) { return(gr.RegionID == r.RegionID); }) == null)
                    {
                        rinfo.Add(r);
                    }
                }
            }

            return(rinfo);
        }
        byte[] GetHyperlinks(Dictionary <string, object> request)
        {
            //m_log.DebugFormat("[GRID HANDLER]: GetHyperlinks");
            UUID scopeID = UUID.Zero;

            if (request.ContainsKey("SCOPEID"))
            {
                UUID.TryParse(request["SCOPEID"].ToString(), out scopeID);
            }
            else
            {
                m_log.WarnFormat("[GRID HANDLER]: no scopeID in request to get linked regions");
            }

            List <GridRegion> rinfos = m_GridService.GetHyperlinks(scopeID);

            Dictionary <string, object> result = new Dictionary <string, object>();

            if ((rinfos == null) || ((rinfos != null) && (rinfos.Count == 0)))
            {
                result["result"] = "null";
            }
            else
            {
                int i = 0;
                foreach (GridRegion rinfo in rinfos)
                {
                    Dictionary <string, object> rinfoDict = rinfo.ToKeyValuePairs();
                    result["region" + i] = rinfoDict;
                    i++;
                }
            }
            string xmlString = ServerUtils.BuildXmlResponse(result);
            //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString);
            UTF8Encoding encoding = new UTF8Encoding();

            return(encoding.GetBytes(xmlString));
        }
 public List <GridRegion> GetHyperlinks(UUID scopeID)
 {
     return(m_GridService.GetHyperlinks(scopeID));
 }