From e0d8f42e6be70974c1cdbf6ba3ff80c2eea7294d Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Wed, 30 Jul 2014 11:19:34 -0400
Subject: Simulator Extra Features Service

Provide a means for regions to fetch extra features supported by modern viewers from a central location
.
---
 .../Handlers/Grid/GridExtraFeaturesHandlers.cs     | 118 +++++++++++++++++++++
 .../Grid/GridExtraFeaturesServerInConnector.cs     |  50 +++++++++
 2 files changed, 168 insertions(+)
 create mode 100644 OpenSim/Server/Handlers/Grid/GridExtraFeaturesHandlers.cs
 create mode 100644 OpenSim/Server/Handlers/Grid/GridExtraFeaturesServerInConnector.cs

(limited to 'OpenSim/Server')

diff --git a/OpenSim/Server/Handlers/Grid/GridExtraFeaturesHandlers.cs b/OpenSim/Server/Handlers/Grid/GridExtraFeaturesHandlers.cs
new file mode 100644
index 0000000..8b9890c
--- /dev/null
+++ b/OpenSim/Server/Handlers/Grid/GridExtraFeaturesHandlers.cs
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the OpenSimulator Project nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections;
+using System.IO;
+using System.Net;
+using System.Reflection;
+using System.Security;
+using System.Text;
+using log4net;
+using Nini.Config;
+using Nwc.XmlRpc;
+using OpenSim.Framework;
+using OpenSim.Framework.Servers.HttpServer;
+using OpenMetaverse.StructuredData;
+
+
+namespace OpenSim.Server.Handlers.Grid
+{
+    /// <summary>
+    /// Grid extra features handlers.
+    /// <para>Allows grid level configuration of OpenSimExtra items.</para>
+    /// <para>Option to control region override of these settings.</para>
+    /// </summary>
+    public class GridExtraFeaturesHandlers
+    {
+        private static readonly ILog m_Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+        private Hashtable m_ExtraFeatures = new Hashtable();
+        private bool m_AllowRegionOverride = true;
+
+        public GridExtraFeaturesHandlers(IConfigSource configSource)
+        {
+            try
+            {
+                IConfig featuresCfg = configSource.Configs["GridExtraFeatures"];
+
+                foreach( string key in featuresCfg.GetKeys())
+                {
+                    if(key != "AllowRegionOverride")
+                    {
+                        string value = featuresCfg.GetString(key);
+
+                        // map the value to the viewer supported extra features
+                        // add additional ones here as support is added in the viewer
+                        // and place the configuration option in [GridExtraFeatures].
+                        switch(key)
+                        {
+                            case "SearchServerURI":
+                                m_ExtraFeatures["search-server-url"] = value;
+                                break;
+                            case "MapImageServerURI":
+                                m_ExtraFeatures["map-server-url"] = value;
+                                break;
+                            case "DestinationGuideURI":
+                                m_ExtraFeatures["destination-guide-url"] = value;
+                                break;
+                            case "ExportSupported":
+                                m_ExtraFeatures["ExportSupported"] = value;          
+                                break;
+                            default:
+                                m_Log.InfoFormat("{0} not yet supported.");
+                                break;
+                        }
+                    }
+                    else
+                        m_AllowRegionOverride = featuresCfg.GetBoolean(key);
+                }
+            }
+            catch (Exception)
+            {
+                m_Log.Warn("[GRID EXTRA FEATURES SERVICE]: Cannot get grid features from config source, allowing region override");
+            }
+        }
+
+        public bool JsonGetGridFeaturesMethod(OSDMap json, ref JsonRpcResponse response)
+        {
+            OSDMap features = new OSDMap();
+            OSDMap json_map = new OSDMap();
+            
+            foreach (string key in m_ExtraFeatures.Keys)
+            {
+                features[key] = OSD.FromString(m_ExtraFeatures[key].ToString());
+            }
+
+            json_map["extra_features"] = features;
+            json_map["region_override"] = m_AllowRegionOverride.ToString();
+
+            response.Result = json_map;
+
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/OpenSim/Server/Handlers/Grid/GridExtraFeaturesServerInConnector.cs b/OpenSim/Server/Handlers/Grid/GridExtraFeaturesServerInConnector.cs
new file mode 100644
index 0000000..f57a4b3
--- /dev/null
+++ b/OpenSim/Server/Handlers/Grid/GridExtraFeaturesServerInConnector.cs
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the OpenSimulator Project nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using log4net;
+using OpenMetaverse;
+using Nini.Config;
+using OpenSim.Framework;
+using OpenSim.Framework.Servers.HttpServer;
+using OpenSim.Server.Handlers.Base;
+
+namespace OpenSim.Server.Handlers.Grid
+{
+    public class GridExtraFeaturesServerInConnector : ServiceConnector
+    {
+        public GridExtraFeaturesServerInConnector(IConfigSource config, IHttpServer server, string configName) :
+            base(config, server, configName)
+        {
+            GridExtraFeaturesHandlers handler = new GridExtraFeaturesHandlers(config);
+
+            server.AddJsonRPCHandler("get_extra_features", handler.JsonGetGridFeaturesMethod);
+        }
+    }
+}
-- 
cgit v1.1