moving GridInfo application plugin into a common standalone/grid
service, adding a plain REST GET handler returning XML (no LLSD), adding appropriate add handler calls to OpenSimBase and UserServer.0.6.0-stable
							parent
							
								
									23eaa950ab
								
							
						
					
					
						commit
						03efaff60e
					
				| 
						 | 
				
			
			@ -0,0 +1,125 @@
 | 
			
		|||
/*
 | 
			
		||||
 * 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 OpenSim 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.Reflection;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using log4net;
 | 
			
		||||
using Nini.Config;
 | 
			
		||||
using Nwc.XmlRpc;
 | 
			
		||||
using OpenSim.Framework.Servers;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Common.Communications
 | 
			
		||||
{
 | 
			
		||||
    public class GridInfoService
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        private Hashtable _info = new Hashtable();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Instantiate a GridInfoService object.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="configPath">path to config path containing
 | 
			
		||||
        /// grid information</param>
 | 
			
		||||
        /// <remarks>
 | 
			
		||||
        /// GridInfoService uses the [GridInfo] section of the
 | 
			
		||||
        /// standard OpenSim.ini file --- which is not optimal, but
 | 
			
		||||
        /// anything else requires a general redesign of the config
 | 
			
		||||
        /// system. 
 | 
			
		||||
        /// </remarks>
 | 
			
		||||
        public GridInfoService(string configPath)
 | 
			
		||||
        {
 | 
			
		||||
            _info["platform"] = "OpenSim";
 | 
			
		||||
            if (File.Exists(configPath))
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    IConfigSource _configSource = new IniConfigSource(configPath);
 | 
			
		||||
                    IConfig startupCfg = _configSource.Configs["Startup"];
 | 
			
		||||
                    IConfig gridCfg = _configSource.Configs["GridInfo"];
 | 
			
		||||
                    
 | 
			
		||||
                    if (!startupCfg.GetBoolean("gridmode", false)) 
 | 
			
		||||
                        _info["mode"] = "standalone";
 | 
			
		||||
                    else 
 | 
			
		||||
                        _info["mode"] = "grid";
 | 
			
		||||
                    
 | 
			
		||||
                    foreach (string k in gridCfg.GetKeys())
 | 
			
		||||
                    {
 | 
			
		||||
                        _info[k] = gridCfg.GetString(k);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception)
 | 
			
		||||
                {
 | 
			
		||||
                    _log.DebugFormat("[GridInfoService] cannot get grid info from {0}, using minimal defaults", configPath);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            _log.InfoFormat("[GridInfoService] Grid info service initialized with {0} keys", _info.Count);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Default constructor, uses OpenSim.ini.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public GridInfoService() : this(Path.Combine(Util.configDir(), "OpenSim.ini"))
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public XmlRpcResponse XmlRpcGridInfoMethod(XmlRpcRequest request)
 | 
			
		||||
        {
 | 
			
		||||
            XmlRpcResponse response = new XmlRpcResponse();
 | 
			
		||||
            Hashtable responseData = new Hashtable();
 | 
			
		||||
 | 
			
		||||
            _log.Info("[GridInfo]: Request for grid info");
 | 
			
		||||
 | 
			
		||||
            foreach (string k in _info.Keys)
 | 
			
		||||
            {
 | 
			
		||||
                responseData[k] = _info[k];
 | 
			
		||||
            }
 | 
			
		||||
            response.Value = responseData;
 | 
			
		||||
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string RestGetGridInfoMethod(string request, string path, string param,
 | 
			
		||||
                                            OSHttpRequest httpRequest, OSHttpResponse httpResponse)
 | 
			
		||||
        {
 | 
			
		||||
            StringBuilder sb = new StringBuilder();
 | 
			
		||||
 | 
			
		||||
            sb.Append("<gridinfo>\n");
 | 
			
		||||
            foreach (string k in _info.Keys)
 | 
			
		||||
            {
 | 
			
		||||
                sb.AppendFormat("<{0}>{1}</{0}>\n", k, _info[k]);
 | 
			
		||||
            }
 | 
			
		||||
            sb.Append("</gridinfo>\n");
 | 
			
		||||
 | 
			
		||||
            return sb.ToString();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +88,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
            {
 | 
			
		||||
                if (!m_streamHandlers.ContainsKey(handlerKey))
 | 
			
		||||
                {
 | 
			
		||||
                    //m_log.DebugFormat("[BASE HTTP SERVER]: Adding handler key {0}", handlerKey);
 | 
			
		||||
                    // m_log.DebugFormat("[BASE HTTP SERVER]: Adding handler key {0}", handlerKey);
 | 
			
		||||
                    m_streamHandlers.Add(handlerKey, handler);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                string path = request.RawUrl;
 | 
			
		||||
                string handlerKey = GetHandlerKey(request.HttpMethod, path);
 | 
			
		||||
 | 
			
		||||
                //m_log.DebugFormat("[BASE HTTP SERVER]: Handling {0} request for {1}", request.HttpMethod, path);
 | 
			
		||||
                // m_log.DebugFormat("[BASE HTTP SERVER]: Handling {0} request for {1}", request.HttpMethod, path);
 | 
			
		||||
 | 
			
		||||
                if (TryGetStreamHandler(handlerKey, out requestHandler))
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,6 +39,7 @@ using OpenSim.Framework.Communications.Cache;
 | 
			
		|||
using OpenSim.Framework.Console;
 | 
			
		||||
using OpenSim.Framework.Servers;
 | 
			
		||||
using OpenSim.Framework.Statistics;
 | 
			
		||||
using OpenSim.Common.Communications;
 | 
			
		||||
using OpenSim.Grid.Communications.OGS1;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Grid.UserServer
 | 
			
		||||
| 
						 | 
				
			
			@ -53,6 +54,7 @@ namespace OpenSim.Grid.UserServer
 | 
			
		|||
 | 
			
		||||
        public UserManager m_userManager;
 | 
			
		||||
        public UserLoginService m_loginService;
 | 
			
		||||
        public GridInfoService m_gridInfoService;
 | 
			
		||||
        public MessageServersConnector m_messagesService;
 | 
			
		||||
        protected IInterServiceInventoryServices m_interServiceInventoryService;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,6 +102,8 @@ namespace OpenSim.Grid.UserServer
 | 
			
		|||
            m_userManager._config = Cfg;
 | 
			
		||||
            m_userManager.AddPlugin(Cfg.DatabaseProvider, Cfg.DatabaseConnect);
 | 
			
		||||
 | 
			
		||||
            m_gridInfoService = new GridInfoService();
 | 
			
		||||
 | 
			
		||||
            m_interServiceInventoryService = new OGS1InterServiceInventoryService(m_userManager._config.InventoryUrl);            
 | 
			
		||||
 | 
			
		||||
            m_loginService = new UserLoginService(
 | 
			
		||||
| 
						 | 
				
			
			@ -148,6 +152,9 @@ namespace OpenSim.Grid.UserServer
 | 
			
		|||
            m_httpServer.AddXmlRPCHandler("agent_change_region", m_messagesService.XmlRPCUserMovedtoRegion);
 | 
			
		||||
            m_httpServer.AddXmlRPCHandler("deregister_messageserver", m_messagesService.XmlRPCDeRegisterMessageServer);
 | 
			
		||||
 | 
			
		||||
            m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", m_gridInfoService.RestGetGridInfoMethod));
 | 
			
		||||
            m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            m_httpServer.AddStreamHandler(
 | 
			
		||||
                new RestStreamHandler("DELETE", "/usersessions/", m_userManager.RestDeleteUserSessionMethod));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,6 +40,7 @@ using OpenSim.Framework.Communications.Cache;
 | 
			
		|||
using OpenSim.Framework.Console;
 | 
			
		||||
using OpenSim.Framework.Servers;
 | 
			
		||||
using OpenSim.Framework.Statistics;
 | 
			
		||||
using OpenSim.Common.Communications;
 | 
			
		||||
using OpenSim.Region.ClientStack;
 | 
			
		||||
using OpenSim.Region.Communications.Local;
 | 
			
		||||
using OpenSim.Region.Communications.OGS1;
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +80,7 @@ namespace OpenSim
 | 
			
		|||
        public bool m_see_into_region_from_neighbor;
 | 
			
		||||
 | 
			
		||||
        protected LocalLoginService m_loginService;
 | 
			
		||||
        protected GridInfoService m_gridInfoService;
 | 
			
		||||
 | 
			
		||||
        protected string m_storageDll;
 | 
			
		||||
        protected string m_clientstackDll;
 | 
			
		||||
| 
						 | 
				
			
			@ -382,6 +384,11 @@ namespace OpenSim
 | 
			
		|||
                // Provides the LLSD login
 | 
			
		||||
                m_httpServer.SetLLSDHandler(m_loginService.LLSDLoginMethod);
 | 
			
		||||
 | 
			
		||||
                // provide grid info
 | 
			
		||||
                m_gridInfoService = new GridInfoService();
 | 
			
		||||
                m_httpServer.AddXmlRPCHandler("get_grid_info", m_gridInfoService.XmlRpcGridInfoMethod);
 | 
			
		||||
                m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/get_grid_info", m_gridInfoService.RestGetGridInfoMethod));
 | 
			
		||||
 | 
			
		||||
                CreateAccount = localComms.doCreate;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										60
									
								
								prebuild.xml
								
								
								
								
							
							
						
						
									
										60
									
								
								prebuild.xml
								
								
								
								
							| 
						 | 
				
			
			@ -466,6 +466,31 @@
 | 
			
		|||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Common.Communications" path="OpenSim/Common/Communications" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../bin/</ReferencePath>
 | 
			
		||||
      <Reference name="System"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Servers"/>
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="XMLRPC.dll"/>
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="true"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.Region.Physics.Manager" path="OpenSim/Region/Physics/Manager" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
| 
						 | 
				
			
			@ -1026,6 +1051,7 @@
 | 
			
		|||
      <Reference name="OpenSim.Region.Environment"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ClientStack"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Common.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Communications.OGS1"/>
 | 
			
		||||
      <Reference name="XMLRPC.dll"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Communications.Local"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -1103,39 +1129,6 @@
 | 
			
		|||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <Project name="OpenSim.ApplicationPlugins.GridInfo" path="OpenSim/ApplicationPlugins/GridInfo" type="Library">
 | 
			
		||||
      <Configuration name="Debug">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
      <Configuration name="Release">
 | 
			
		||||
        <Options>
 | 
			
		||||
          <OutputPath>../../../bin/</OutputPath>
 | 
			
		||||
        </Options>
 | 
			
		||||
      </Configuration>
 | 
			
		||||
 | 
			
		||||
      <ReferencePath>../../../bin/</ReferencePath>
 | 
			
		||||
      <Reference name="Mono.Addins.dll" />
 | 
			
		||||
      <Reference name="System"/>
 | 
			
		||||
      <Reference name="System.Xml"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll" />
 | 
			
		||||
      <Reference name="Nini.dll" />
 | 
			
		||||
      <Reference name="XMLRPC.dll" />
 | 
			
		||||
      <Reference name="OpenSim"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.ClientStack"/>
 | 
			
		||||
      <Reference name="OpenSim.Region.Environment"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Servers"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Console"/>
 | 
			
		||||
      <Reference name="log4net.dll"/>
 | 
			
		||||
 | 
			
		||||
      <Files>
 | 
			
		||||
        <Match pattern="*.cs" recurse="true"/>
 | 
			
		||||
      </Files>
 | 
			
		||||
    </Project>
 | 
			
		||||
 | 
			
		||||
    <!-- REST plugins -->
 | 
			
		||||
    <Project name="OpenSim.ApplicationPlugins.Rest" 
 | 
			
		||||
             path="OpenSim/ApplicationPlugins/Rest" type="Library">
 | 
			
		||||
| 
						 | 
				
			
			@ -1820,6 +1813,7 @@
 | 
			
		|||
      <Reference name="OpenSim.Data"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Servers"/>
 | 
			
		||||
      <Reference name="OpenSim.Framework.Statistics"/>
 | 
			
		||||
      <Reference name="OpenSim.Common.Communications"/>
 | 
			
		||||
      <Reference name="OpenSim.Grid.Communications.OGS1"/>
 | 
			
		||||
      <Reference name="libsecondlife.dll"/>
 | 
			
		||||
      <Reference name="XMLRPC.dll"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue