/// <summary>
        ///   Add a new Caps Service for the given region if one does not already exist
        /// </summary>
        /// <param name = "regionHandle"></param>
        protected void AddCapsServiceForRegion(ulong regionHandle, string CAPSBase, AgentCircuitData circuitData,
                                               uint port)
        {
            if (m_clientEndPoint == null && circuitData.ClientIPEndPoint != null)
            {
                m_clientEndPoint = circuitData.ClientIPEndPoint;
            }
            if (m_clientEndPoint == null)
            {
                ///Should only happen in grid HG/OpenSim situtations
                IPAddress test = null;
                if (IPAddress.TryParse(circuitData.IPAddress, out test))
                {
                    m_clientEndPoint = new IPEndPoint(test, 0); //Dunno the port, so leave it alone
                }
            }
            if (!m_RegionCapsServices.ContainsKey(regionHandle))
            {
                //Now add this client to the region caps
                //Create if needed
                m_CapsService.AddCapsForRegion(regionHandle);
                IRegionCapsService regionCaps = m_CapsService.GetCapsForRegion(regionHandle);

                PerRegionClientCapsService regionClient = new PerRegionClientCapsService();
                regionClient.Initialise(this, regionCaps, CAPSBase, circuitData, port);
                m_RegionCapsServices[regionHandle] = regionClient;

                //Now get and add them
                regionCaps.AddClientToRegion(regionClient);
            }
        }
Example #2
0
        public void Initialise(IClientCapsService clientCapsService, IRegionCapsService regionCapsService, string capsBase, AgentCircuitData circuitData)
        {
            m_clientCapsService = clientCapsService;
            m_regionCapsService = regionCapsService;
            m_circuitData       = circuitData;
            AddSEEDCap(capsBase);

            AddCAPS();
        }
Example #3
0
        public void LogOutAllAgentsForRegion(ulong requestingRegion)
        {
            IRegionCapsService fullregionCaps = m_registry.RequestModuleInterface <ICapsService>().GetCapsForRegion(requestingRegion);

            if (fullregionCaps != null)
            {
                //Now kill the region in the caps Service, DO THIS FIRST, otherwise you get an infinite loop later in the IClientCapsService when it tries to remove itself from the IRegionCapsService
                m_registry.RequestModuleInterface <ICapsService>().RemoveCapsForRegion(requestingRegion);
                //Close all regions and remove them from the region
                fullregionCaps.Close();
            }
        }
        protected OSDMap OnMessageReceived(OSDMap message)
        {
            //If it is an async message request, make sure that the request is valid and check it
            if (message["Method"] == "AsyncMessageRequest")
            {
                try
                {
                    ICapsService service     = m_registry.RequestModuleInterface <ICapsService>();
                    OSDMap       response    = new OSDMap();
                    OSDMap       mapresponse = new OSDMap();

                    if (message.ContainsKey("RegionHandles"))
                    {
                        OSDArray handles = (OSDArray)message["RegionHandles"];

                        for (int i = 0; i < handles.Count; i += 2)
                        {
                            ulong regionHandle        = handles[i].AsULong();
                            IRegionCapsService region = service.GetCapsForRegion(regionHandle);
                            if (region != null)
                            {
                                bool verified = (region.Region.SessionID == handles[i + 1].AsUUID());
                                if (verified)
                                {
                                    if (m_regionMessages.ContainsKey(regionHandle))
                                    {
                                        //Get the array, then remove it
                                        OSDArray array = m_regionMessages[regionHandle];
                                        m_regionMessages.Remove(regionHandle);
                                        foreach (var test in m_allRegionMessages.Where(u => !u.RegionsPreviouslyPosted.Contains(regionHandle)))
                                        {
                                            array.Add(test.Message);
                                            test.RegionsPreviouslyPosted.Add(regionHandle);
                                        }
                                        mapresponse[regionHandle.ToString()] = array;
                                    }
                                }
                            }
                        }
                    }

                    response["Messages"] = mapresponse;
                    return(response);
                }
                catch
                {
                }
            }
            return(null);
        }
Example #5
0
        public void Initialise(IClientCapsService clientCapsService, IRegionCapsService regionCapsService, string capsBase, AgentCircuitData circuitData, uint port)
        {
            m_clientCapsService = clientCapsService;
            m_regionCapsService = regionCapsService;
            m_circuitData       = circuitData;
            if (port != 0)//Someone requested a non standard port, probably for OpenSim
            {
                ISimulationBase simBase = Registry.RequestModuleInterface <ISimulationBase> ();
                Server = simBase.GetHttpServer(port);
            }
            AddSEEDCap(capsBase);

            AddCAPS();
        }
Example #6
0
        /// <summary>
        ///     Add a new Caps Service for the given region if one does not already exist
        /// </summary>
        /// <param name="regionID"></param>
        /// <param name="capsBase"></param>
        /// <param name="circuitData"></param>
        /// <param name="port"></param>
        protected void AddCapsServiceForRegion(UUID regionID, string capsBase, AgentCircuitData circuitData, uint port)
        {
            if (!m_RegionCapsServices.ContainsKey(regionID))
            {
                //Now add this client to the region caps
                //Create if needed
                m_CapsService.AddCapsForRegion(regionID);
                IRegionCapsService regionCaps = m_CapsService.GetCapsForRegion(regionID);

                PerRegionClientCapsService regionClient = new PerRegionClientCapsService();
                regionClient.Initialize(this, regionCaps, capsBase, circuitData, port);
                m_RegionCapsServices [regionID] = regionClient;

                //Now get and add them
                regionCaps.AddClientToRegion(regionClient);
            }
        }
        /// <summary>
        /// Add a new Caps Service for the given region if one does not already exist
        /// </summary>
        /// <param name="regionHandle"></param>
        protected void AddCapsServiceForRegion(ulong regionHandle, string CAPSBase, AgentCircuitData circuitData)
        {
            if (!m_RegionCapsServices.ContainsKey(regionHandle))
            {
                //Now add this client to the region caps
                //Create if needed
                m_CapsService.AddCapsForRegion(regionHandle);
                IRegionCapsService regionCaps = m_CapsService.GetCapsForRegion(regionHandle);

                PerRegionClientCapsService regionClient = new PerRegionClientCapsService();
                regionClient.Initialise(this, regionCaps, CAPSBase, circuitData);
                m_RegionCapsServices[regionHandle] = regionClient;

                //Now get and add them
                regionCaps.AddClientToRegion(regionClient);
            }
        }
Example #8
0
        public bool EnableChildAgentsForRegion(GridRegion requestingRegion)
        {
            int              count           = 0;
            bool             informed        = true;
            INeighborService neighborService = m_registry.RequestModuleInterface <INeighborService>();

            if (neighborService != null)
            {
                List <GridRegion> neighbors = neighborService.GetNeighbors(requestingRegion, 0);

                foreach (GridRegion neighbor in neighbors)
                {
                    //m_log.WarnFormat("--> Going to send child agent to {0}, new agent {1}", neighbour.RegionName, newAgent);

                    IRegionCapsService regionCaps = m_registry.RequestModuleInterface <ICapsService>().GetCapsForRegion(neighbor.RegionHandle);
                    if (regionCaps == null) //If there isn't a region caps, there isn't an agent in this sim
                    {
                        continue;
                    }
                    List <UUID> usersInformed = new List <UUID>();
                    foreach (IRegionClientCapsService regionClientCaps in regionCaps.GetClients())
                    {
                        if (usersInformed.Contains(regionClientCaps.AgentID)) //Only inform agents once
                        {
                            continue;
                        }

                        AgentCircuitData regionCircuitData = regionClientCaps.CircuitData.Copy();
                        regionCircuitData.child = true; //Fix child agent status
                        string reason;                  //Tell the region about it
                        if (!InformClientOfNeighbor(regionClientCaps.AgentID, requestingRegion.RegionHandle,
                                                    regionCircuitData, requestingRegion, (uint)TeleportFlags.Default, null, out reason))
                        {
                            informed = false;
                        }
                        else
                        {
                            usersInformed.Add(regionClientCaps.AgentID);
                        }
                    }
                    count++;
                }
            }
            return(informed);
        }
        /// <summary>
        ///     Remove the CAPS for the given user in the given region
        /// </summary>
        /// <param name="regionHandle"></param>
        public void RemoveCAPS(UUID regionHandle)
        {
            if (!m_RegionCapsServices.ContainsKey(regionHandle))
            {
                return;
            }

            //Remove the agent from the region caps
            IRegionCapsService regionCaps = m_CapsService.GetCapsForRegion(regionHandle);

            if (regionCaps != null)
            {
                regionCaps.RemoveClientFromRegion(m_RegionCapsServices[regionHandle]);
            }

            //Remove all the CAPS handlers
            m_RegionCapsServices[regionHandle].Close();
            m_RegionCapsServices.Remove(regionHandle);
        }
        public void Initialise(IClientCapsService clientCapsService, IRegionCapsService regionCapsService, string capsBase, AgentCircuitData circuitData, uint port)
        {
            m_clientCapsService = clientCapsService;
            m_regionCapsService = regionCapsService;
            m_circuitData = circuitData;
            if (port != 0)//Someone requested a non standard port, probably for OpenSim
            {
                ISimulationBase simBase = Registry.RequestModuleInterface<ISimulationBase> ();
                Server = simBase.GetHttpServer (port);
            }
            AddSEEDCap(capsBase);

            AddCAPS();
        }
        public void Initialise(IClientCapsService clientCapsService, IRegionCapsService regionCapsService, string capsBase, AgentCircuitData circuitData)
        {
            m_clientCapsService = clientCapsService;
            m_regionCapsService = regionCapsService;
            m_circuitData = circuitData;
            AddSEEDCap(capsBase);

            AddCAPS();
        }
Example #12
0
        /// <summary>
        ///   Get all agent locations for the given region
        /// </summary>
        /// <param name = "X"></param>
        /// <param name = "Y"></param>
        /// <param name = "regionHandle"></param>
        /// <returns></returns>
        private List <mapItemReply> GetItems(int X, int Y, ulong regionHandle)
        {
            GridRegion region = GetRegionByPosition(UUID.Zero, X, Y);

            //if the region is down or doesn't exist, don't check it
            if (region == null || region.Access == (byte)SimAccess.Down ||
                region.Access == (byte)SimAccess.NonExistent)
            {
                return(new List <mapItemReply>());
            }

            ICapsService capsService = m_registryCore.RequestModuleInterface <ICapsService>();

            if (capsService == null)
            {
                return(new List <mapItemReply>());
            }

            IRegionCapsService regionCaps = capsService.GetCapsForRegion(regionHandle);

            if (regionCaps == null)
            {
                return(new List <mapItemReply>());
            }

            Dictionary <Vector3, int> Positions = new Dictionary <Vector3, int>();

            //Get a list of all the clients in the region and add them
            foreach (IRegionClientCapsService clientCaps in regionCaps.GetClients())
            {
                //Only root agents!
                if (clientCaps.RootAgent)
                {
                    //Normalize the positions to 5 meter blocks so that agents stack instead of cover up each other
                    Vector3 position = new Vector3(NormalizePosition(clientCaps.LastPosition.X),
                                                   NormalizePosition(clientCaps.LastPosition.Y), 0);
                    int Number = 0;
                    //Find the number of agents currently at this position
                    if (!Positions.TryGetValue(position, out Number))
                    {
                        Number = 0;
                    }
                    Number++;
                    Positions[position] = Number;
                }
            }
            //Build the mapItemReply blocks
#if (!ISWIN)
            List <mapItemReply> mapItems = new List <mapItemReply>();
            foreach (KeyValuePair <Vector3, int> kvp in Positions)
            {
                mapItems.Add(new mapItemReply
                {
                    x =
                        (uint)
                        (region.RegionLocX + kvp.Key.X),
                    y =
                        (uint)
                        (region.RegionLocY + kvp.Key.Y),
                    id   = UUID.Zero,
                    name =
                        Util.Md5Hash(region.RegionName +
                                     Environment.TickCount.
                                     ToString()),
                    Extra  = kvp.Value,
                    Extra2 = 0
                });
            }
#else
            List <mapItemReply> mapItems = Positions.Select(position => new mapItemReply
            {
                x =
                    (uint)
                    (region.RegionLocX + position.Key.X),
                y =
                    (uint)
                    (region.RegionLocY + position.Key.Y),
                id   = UUID.Zero,
                name =
                    Util.Md5Hash(region.RegionName +
                                 Environment.TickCount.
                                 ToString()),
                Extra  = position.Value,
                Extra2 = 0
            }).ToList();
#endif

            //If there are no agents, we send one blank one to the client
            if (mapItems.Count == 0)
            {
                mapItemReply mapitem = new mapItemReply
                {
                    x      = (uint)(region.RegionLocX + 1),
                    y      = (uint)(region.RegionLocY + 1),
                    id     = UUID.Zero,
                    name   = Util.Md5Hash(region.RegionName + Environment.TickCount.ToString()),
                    Extra  = 0,
                    Extra2 = 0
                };
                mapItems.Add(mapitem);
            }
            return(mapItems);
        }
Example #13
0
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters, ITranslator translator)
        {
            var vars = new Dictionary <string, object>();

            if (httpRequest.Query.ContainsKey("regionid"))
            {
                GridRegion region = webInterface.Registry.RequestModuleInterface <IGridService>().GetRegionByUUID(null,
                                                                                                                  UUID.Parse(httpRequest.Query["regionid"].ToString()));

                IEstateConnector estateConnector = Aurora.DataManager.DataManager.RequestPlugin <IEstateConnector>();
                EstateSettings   estate          = estateConnector.GetEstateSettings(region.RegionID);

                vars.Add("RegionName", region.RegionName);
                vars.Add("OwnerUUID", estate.EstateOwner);
                vars.Add("OwnerName", webInterface.Registry.RequestModuleInterface <IUserAccountService>().
                         GetUserAccount(null, estate.EstateOwner).Name);
                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionType", region.RegionType);
                vars.Add("RegionOnline", (region.Flags & (int)Aurora.Framework.RegionFlags.RegionOnline) == (int)Aurora.Framework.RegionFlags.RegionOnline ?
                         translator.GetTranslatedString("Online") : translator.GetTranslatedString("Offline"));

                ICapsService       capsService = webInterface.Registry.RequestModuleInterface <ICapsService>();
                IRegionCapsService regionCaps  = capsService != null?capsService.GetCapsForRegion(region.RegionHandle) : null;

                if (regionCaps != null)
                {
                    vars.Add("NumberOfUsersInRegion", regionCaps.GetClients().Count);
                    List <Dictionary <string, object> > users = new List <Dictionary <string, object> >();
                    foreach (var client in regionCaps.GetClients())
                    {
                        Dictionary <string, object> user = new Dictionary <string, object>();
                        user.Add("UserNameText", translator.GetTranslatedString("UserNameText"));
                        user.Add("UserUUID", client.AgentID);
                        user.Add("UserName", client.ClientCaps.AccountInfo.Name);
                        users.Add(user);
                    }
                    vars.Add("UsersInRegion", users);
                }
                else
                {
                    vars.Add("NumberOfUsersInRegion", 0);
                    vars.Add("UsersInRegion", new List <Dictionary <string, object> >());
                }
                IDirectoryServiceConnector directoryConnector = Aurora.DataManager.DataManager.RequestPlugin <IDirectoryServiceConnector>();
                if (directoryConnector != null)
                {
                    List <LandData> data = directoryConnector.GetParcelsByRegion(0, 10, region.RegionID, UUID.Zero, ParcelFlags.None, ParcelCategory.Any);
                    List <Dictionary <string, object> > parcels = new List <Dictionary <string, object> >();
                    foreach (var p in data)
                    {
                        Dictionary <string, object> parcel = new Dictionary <string, object>();
                        parcel.Add("ParcelNameText", translator.GetTranslatedString("ParcelNameText"));
                        parcel.Add("ParcelOwnerText", translator.GetTranslatedString("ParcelOwnerText"));
                        parcel.Add("ParcelUUID", p.InfoUUID);
                        parcel.Add("ParcelName", p.Name);
                        parcel.Add("ParcelOwnerUUID", p.OwnerID);
                        IUserAccountService accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService>();
                        if (accountService != null)
                        {
                            var account = accountService.GetUserAccount(null, p.OwnerID);
                            if (account == null)
                            {
                                parcel.Add("ParcelOwnerName", translator.GetTranslatedString("NoAccountFound"));
                            }
                            else
                            {
                                parcel.Add("ParcelOwnerName", account.Name);
                            }
                        }
                        parcels.Add(parcel);
                    }
                    vars.Add("ParcelInRegion", parcels);
                    vars.Add("NumberOfParcelsInRegion", parcels.Count);
                }
                IWebHttpTextureService webTextureService = webInterface.Registry.
                                                           RequestModuleInterface <IWebHttpTextureService>();
                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage));
                }
                else
                {
                    vars.Add("RegionImageURL", "images/icons/no_picture.jpg");
                }

                // Menu Region
                vars.Add("MenuRegionTitle", translator.GetTranslatedString("MenuRegionTitle"));
                vars.Add("MenuParcelTitle", translator.GetTranslatedString("MenuParcelTitle"));
                vars.Add("MenuOwnerTitle", translator.GetTranslatedString("MenuOwnerTitle"));

                vars.Add("RegionInformationText", translator.GetTranslatedString("RegionInformationText"));
                vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText"));
                vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
                vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
                vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
                vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
                vars.Add("RegionInfoText", translator.GetTranslatedString("RegionInfoText"));
                vars.Add("RegionOnlineText", translator.GetTranslatedString("RegionOnlineText"));
                vars.Add("NumberOfUsersInRegionText", translator.GetTranslatedString("NumberOfUsersInRegionText"));
                vars.Add("ParcelsInRegionText", translator.GetTranslatedString("ParcelsInRegionText"));

                // Style Switcher
                vars.Add("styles1", translator.GetTranslatedString("styles1"));
                vars.Add("styles2", translator.GetTranslatedString("styles2"));
                vars.Add("styles3", translator.GetTranslatedString("styles3"));
                vars.Add("styles4", translator.GetTranslatedString("styles4"));
                vars.Add("styles5", translator.GetTranslatedString("styles5"));

                vars.Add("StyleSwitcherStylesText", translator.GetTranslatedString("StyleSwitcherStylesText"));
                vars.Add("StyleSwitcherLanguagesText", translator.GetTranslatedString("StyleSwitcherLanguagesText"));
                vars.Add("StyleSwitcherChoiceText", translator.GetTranslatedString("StyleSwitcherChoiceText"));

                // Language Switcher
                vars.Add("en", translator.GetTranslatedString("en"));
                vars.Add("fr", translator.GetTranslatedString("fr"));
                vars.Add("de", translator.GetTranslatedString("de"));
                vars.Add("it", translator.GetTranslatedString("it"));
                vars.Add("es", translator.GetTranslatedString("es"));
            }

            return(vars);
        }