예제 #1
0
        protected string ShortRegionInfo(string key, string value)
        {
            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            if (String.IsNullOrEmpty(value) ||
                String.IsNullOrEmpty(key)) return null;

            rxw.WriteStartElement(String.Empty, "region", String.Empty);
            rxw.WriteStartElement(String.Empty, key, String.Empty);
            rxw.WriteString(value);
            rxw.WriteEndDocument();

            return rxw.ToString();
        }
예제 #2
0
        public string CreateRegion(OSHttpRequest request, OSHttpResponse response)
        {
            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            rxw.WriteStartElement(String.Empty, "regions", String.Empty);
            foreach (Scene s in App.SceneManager.Scenes)
            {
                rxw.WriteStartElement(String.Empty, "uuid", String.Empty);
                rxw.WriteString(s.RegionInfo.RegionID.ToString());
                rxw.WriteEndElement();
            }
            rxw.WriteEndElement();

            return(rxw.ToString());
        }
예제 #3
0
        public string GetHandlerRegions(OSHttpResponse httpResponse)
        {
            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            rxw.WriteStartElement(String.Empty, "regions", String.Empty);
            foreach (Scene s in App.SceneManager.Scenes)
            {
                rxw.WriteStartElement(String.Empty, "uuid", String.Empty);
                rxw.WriteString(s.RegionInfo.RegionID.ToString());
                rxw.WriteEndElement();
            }
            rxw.WriteEndElement();

            return rxw.ToString();
        }
예제 #4
0
        protected string ShortRegionInfo(string key, string value)
        {
            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            if (String.IsNullOrEmpty(value) || String.IsNullOrEmpty(key))
            {
                return(null);
            }

            rxw.WriteStartElement(String.Empty, "region", String.Empty);
            rxw.WriteStartElement(String.Empty, key, String.Empty);
            rxw.WriteString(value);
            rxw.WriteEndDocument();

            return(rxw.ToString());
        }
예제 #5
0
        protected string RegionStats(IOSHttpResponse httpResponse, Scene scene)
        {
            int users   = scene.GetRootAgentCount();
            int objects = scene.Entities.Count - users;

            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            rxw.WriteStartElement(String.Empty, "region", String.Empty);
            rxw.WriteStartElement(String.Empty, "stats", String.Empty);

            rxw.WriteStartElement(String.Empty, "users", String.Empty);
            rxw.WriteString(users.ToString());
            rxw.WriteEndElement();

            rxw.WriteStartElement(String.Empty, "objects", String.Empty);
            rxw.WriteString(objects.ToString());
            rxw.WriteEndElement();

            rxw.WriteEndDocument();

            return(rxw.ToString());
        }
예제 #6
0
        public string GetRegionInfoHandlerRegions(IOSHttpResponse httpResponse)
        {
            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            // regions info
            rxw.WriteStartElement(String.Empty, "regions", String.Empty);
            {
                // regions info: number of regions
                rxw.WriteStartAttribute(String.Empty, "number", String.Empty);
                rxw.WriteValue(App.SceneManager.Scenes.Count);
                rxw.WriteEndAttribute();

                // regions info: max number of regions
                rxw.WriteStartAttribute(String.Empty, "max", String.Empty);
                if (App.ConfigSource.Source.Configs["RemoteAdmin"] != null)
                {
                    rxw.WriteValue(App.ConfigSource.Source.Configs["RemoteAdmin"].GetInt("region_limit", -1));
                }
                else
                {
                    rxw.WriteValue(-1);
                }
                rxw.WriteEndAttribute();

                // regions info: region
                foreach (Scene s in App.SceneManager.Scenes)
                {
                    rxw.WriteStartElement(String.Empty, "region", String.Empty);

                    rxw.WriteStartAttribute(String.Empty, "uuid", String.Empty);
                    rxw.WriteString(s.RegionInfo.RegionID.ToString());
                    rxw.WriteEndAttribute();

                    rxw.WriteStartAttribute(String.Empty, "name", String.Empty);
                    rxw.WriteString(s.RegionInfo.RegionName);
                    rxw.WriteEndAttribute();

                    rxw.WriteStartAttribute(String.Empty, "x", String.Empty);
                    rxw.WriteValue(s.RegionInfo.RegionLocX);
                    rxw.WriteEndAttribute();

                    rxw.WriteStartAttribute(String.Empty, "y", String.Empty);
                    rxw.WriteValue(s.RegionInfo.RegionLocY);
                    rxw.WriteEndAttribute();

                    rxw.WriteStartAttribute(String.Empty, "external_hostname", String.Empty);
                    rxw.WriteString(s.RegionInfo.ExternalHostName);
                    rxw.WriteEndAttribute();

                    rxw.WriteStartAttribute(String.Empty, "ip", String.Empty);
                    rxw.WriteString(s.RegionInfo.InternalEndPoint.ToString());
                    rxw.WriteEndAttribute();

                    int users = s.GetRootAgentCount();
                    rxw.WriteStartAttribute(String.Empty, "avatars", String.Empty);
                    rxw.WriteValue(users);
                    rxw.WriteEndAttribute();

                    rxw.WriteStartAttribute(String.Empty, "objects", String.Empty);
                    rxw.WriteValue(s.Entities.Count - users);
                    rxw.WriteEndAttribute();

                    rxw.WriteEndElement();
                }
            }
            return(rxw.ToString());
        }
예제 #7
0
        public string GetRegionInfoHandlerRegions(IOSHttpResponse httpResponse)
        {
            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            // regions info
            rxw.WriteStartElement(String.Empty, "regions", String.Empty);
            {
                // regions info: number of regions
                rxw.WriteStartAttribute(String.Empty, "number", String.Empty);
                rxw.WriteValue(App.SceneManager.Scenes.Count);
                rxw.WriteEndAttribute();

                // regions info: max number of regions
                rxw.WriteStartAttribute(String.Empty, "max", String.Empty);
                if (App.ConfigSource.Source.Configs["RemoteAdmin"] != null)
                {
                    rxw.WriteValue(App.ConfigSource.Source.Configs["RemoteAdmin"].GetInt("region_limit", -1));
                }
                else
                {
                    rxw.WriteValue(-1);
                }
                rxw.WriteEndAttribute();
                
                // regions info: region
                foreach (Scene s in App.SceneManager.Scenes)
                {
                    rxw.WriteStartElement(String.Empty, "region", String.Empty);
                    
                    rxw.WriteStartAttribute(String.Empty, "uuid", String.Empty);
                    rxw.WriteString(s.RegionInfo.RegionID.ToString());
                    rxw.WriteEndAttribute();
                    
                    rxw.WriteStartAttribute(String.Empty, "name", String.Empty);
                    rxw.WriteString(s.RegionInfo.RegionName);
                    rxw.WriteEndAttribute();
                    
                    rxw.WriteStartAttribute(String.Empty, "x", String.Empty);
                    rxw.WriteValue(s.RegionInfo.RegionLocX);
                    rxw.WriteEndAttribute();
                    
                    rxw.WriteStartAttribute(String.Empty, "y", String.Empty);
                    rxw.WriteValue(s.RegionInfo.RegionLocY);
                    rxw.WriteEndAttribute();
                    
                    rxw.WriteStartAttribute(String.Empty, "external_hostname", String.Empty);
                    rxw.WriteString(s.RegionInfo.ExternalHostName);
                    rxw.WriteEndAttribute();
                    
                    rxw.WriteStartAttribute(String.Empty, "ip", String.Empty);
                    rxw.WriteString(s.RegionInfo.InternalEndPoint.ToString());
                    rxw.WriteEndAttribute();
                    
                    int users = s.GetRootAgentCount();
                    rxw.WriteStartAttribute(String.Empty, "avatars", String.Empty);
                    rxw.WriteValue(users);
                    rxw.WriteEndAttribute();
                    
                    rxw.WriteStartAttribute(String.Empty, "objects", String.Empty);
                    rxw.WriteValue(s.Entities.Count - users);
                    rxw.WriteEndAttribute();
                    
                    rxw.WriteEndElement();
                }
            }
            return rxw.ToString();
        }
예제 #8
0
        public string GetHandlerRegion(OSHttpResponse httpResponse, string param)
        {
            // be resilient and don't get confused by a terminating '/'
            param = param.TrimEnd(new char[]{'/'});
            string[] comps = param.Split('/');
            UUID regionID = (UUID)comps[0];

            m_log.DebugFormat("{0} GET region UUID {1}", MsgID, regionID.ToString());

            if (UUID.Zero == regionID) throw new Exception("missing region ID");

            Scene scene = null;
            App.SceneManager.TryGetScene(regionID, out scene);
            if (null == scene) return Failure(httpResponse, OSHttpStatusCode.ClientErrorNotFound,
                                              "GET", "cannot find region {0}", regionID.ToString());

            RegionDetails details = new RegionDetails(scene.RegionInfo);

            // m_log.DebugFormat("{0} GET comps {1}", MsgID, comps.Length);
            // for (int i = 0; i < comps.Length; i++)  m_log.DebugFormat("{0} GET comps[{1}] >{2}<", MsgID, i, comps[i]);

            if (1 == comps.Length)
            {
                // complete region details requested
                RestXmlWriter rxw = new RestXmlWriter(new StringWriter());
                XmlSerializer xs = new XmlSerializer(typeof(RegionDetails));
                xs.Serialize(rxw, details, _xmlNs);
                return rxw.ToString();
            }

            if (2 == comps.Length)
            {
                string resp = ShortRegionInfo(comps[1], details[comps[1]]);
                if (null != resp) return resp;

                // m_log.DebugFormat("{0} GET comps advanced: >{1}<", MsgID, comps[1]);

                // check for {terrain,stats,prims}
                switch (comps[1].ToLower())
                {
                case "terrain":
                    return RegionTerrain(httpResponse, scene);

                case "stats":
                    return RegionStats(httpResponse, scene);

                case "prims":
                    return RegionPrims(httpResponse, scene, Vector3.Zero, Vector3.Zero);
                }
            }

            if (3 == comps.Length)
            {
                switch (comps[1].ToLower())
                {
                case "prims":
                    string[] subregion = comps[2].Split(',');
                    if (subregion.Length == 6)
                    {
                        Vector3 min, max;
                        try
                        {
                            min = new Vector3((float)Double.Parse(subregion[0]), (float)Double.Parse(subregion[1]), (float)Double.Parse(subregion[2]));
                            max = new Vector3((float)Double.Parse(subregion[3]), (float)Double.Parse(subregion[4]), (float)Double.Parse(subregion[5]));
                        }
                        catch (Exception)
                        {
                            return Failure(httpResponse, OSHttpStatusCode.ClientErrorBadRequest,
                                           "GET", "invalid subregion parameter");
                        }
                        return RegionPrims(httpResponse, scene, min, max);
                    }
                    else
                    {
                        return Failure(httpResponse, OSHttpStatusCode.ClientErrorBadRequest,
                                       "GET", "invalid subregion parameter");
                    }
                }
            }

            return Failure(httpResponse, OSHttpStatusCode.ClientErrorBadRequest,
                           "GET", "too many parameters {0}", param);
        }
예제 #9
0
        protected string RegionStats(OSHttpResponse httpResponse, Scene scene)
        {
            int users = scene.GetAvatars().Count;
            int objects = scene.Entities.Count - users;

            RestXmlWriter rxw = new RestXmlWriter(new StringWriter());

            rxw.WriteStartElement(String.Empty, "region", String.Empty);
            rxw.WriteStartElement(String.Empty, "stats", String.Empty);

            rxw.WriteStartElement(String.Empty, "users", String.Empty);
            rxw.WriteString(users.ToString());
            rxw.WriteEndElement();

            rxw.WriteStartElement(String.Empty, "objects", String.Empty);
            rxw.WriteString(objects.ToString());
            rxw.WriteEndElement();

            rxw.WriteEndDocument();

            return rxw.ToString();
        }
예제 #10
0
        public string GetHandlerRegion(IOSHttpResponse httpResponse, string param)
        {
            // be resilient and don't get confused by a terminating '/'
            param = param.TrimEnd(new char[] { '/' });
            string[] comps    = param.Split('/');
            UUID     regionID = (UUID)comps[0];

            m_log.DebugFormat("{0} GET region UUID {1}", MsgID, regionID.ToString());

            if (UUID.Zero == regionID)
            {
                throw new Exception("missing region ID");
            }

            Scene scene = null;

            App.SceneManager.TryGetScene(regionID, out scene);
            if (null == scene)
            {
                return(Failure(httpResponse, OSHttpStatusCode.ClientErrorNotFound,
                               "GET", "cannot find region {0}", regionID.ToString()));
            }

            RegionDetails details = new RegionDetails(scene.RegionInfo);

            // m_log.DebugFormat("{0} GET comps {1}", MsgID, comps.Length);
            // for (int i = 0; i < comps.Length; i++)  m_log.DebugFormat("{0} GET comps[{1}] >{2}<", MsgID, i, comps[i]);

            if (1 == comps.Length)
            {
                // complete region details requested
                RestXmlWriter rxw = new RestXmlWriter(new StringWriter());
                XmlSerializer xs  = new XmlSerializer(typeof(RegionDetails));
                xs.Serialize(rxw, details, _xmlNs);
                return(rxw.ToString());
            }

            if (2 == comps.Length)
            {
                string resp = ShortRegionInfo(comps[1], details[comps[1]]);
                if (null != resp)
                {
                    return(resp);
                }

                // m_log.DebugFormat("{0} GET comps advanced: >{1}<", MsgID, comps[1]);

                // check for {terrain,stats,prims}
                switch (comps[1].ToLower())
                {
                case "terrain":
                    return(RegionTerrain(httpResponse, scene));

                case "stats":
                    return(RegionStats(httpResponse, scene));

                case "prims":
                    return(RegionPrims(httpResponse, scene, Vector3.Zero, Vector3.Zero));
                }
            }

            if (3 == comps.Length)
            {
                switch (comps[1].ToLower())
                {
                case "prims":
                    string[] subregion = comps[2].Split(',');
                    if (subregion.Length == 6)
                    {
                        Vector3 min, max;
                        try
                        {
                            min = new Vector3((float)Double.Parse(subregion[0], Culture.NumberFormatInfo), (float)Double.Parse(subregion[1], Culture.NumberFormatInfo), (float)Double.Parse(subregion[2], Culture.NumberFormatInfo));
                            max = new Vector3((float)Double.Parse(subregion[3], Culture.NumberFormatInfo), (float)Double.Parse(subregion[4], Culture.NumberFormatInfo), (float)Double.Parse(subregion[5], Culture.NumberFormatInfo));
                        }
                        catch (Exception)
                        {
                            return(Failure(httpResponse, OSHttpStatusCode.ClientErrorBadRequest,
                                           "GET", "invalid subregion parameter"));
                        }
                        return(RegionPrims(httpResponse, scene, min, max));
                    }
                    else
                    {
                        return(Failure(httpResponse, OSHttpStatusCode.ClientErrorBadRequest,
                                       "GET", "invalid subregion parameter"));
                    }
                }
            }

            return(Failure(httpResponse, OSHttpStatusCode.ClientErrorBadRequest,
                           "GET", "too many parameters {0}", param));
        }