All grid servers deleted, including user server. They served us well.

slimupdates
Diva Canto 2010-01-10 20:17:37 -08:00
parent 2415d36bed
commit 5cf6d6fa79
59 changed files with 61 additions and 10047 deletions

View File

@ -1,87 +0,0 @@
/*
* 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 OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers.HttpServer;
namespace OpenSim.Grid.Communications.OGS1
{
/// <summary>
/// OGS1 implementation of the inter-service inventory service
/// </summary>
public class OGS1InterServiceInventoryService : IInterServiceInventoryServices
{
protected Uri m_inventoryServerUrl;
public OGS1InterServiceInventoryService(Uri inventoryServerUrl)
{
m_inventoryServerUrl = inventoryServerUrl;
}
/// <summary>
/// <see cref="OpenSim.Framework.Communications.IInterServiceInventoryServices"/>
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public bool CreateNewUserInventory(UUID userId)
{
return SynchronousRestObjectPoster.BeginPostObject<Guid, bool>(
"POST", m_inventoryServerUrl + "CreateInventory/", userId.Guid);
}
/// <summary>
/// <see cref="OpenSim.Framework.Communications.IInterServiceInventoryServices"/>
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
{
return SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryFolderBase>>(
"POST", m_inventoryServerUrl + "RootFolders/", userId.Guid);
}
/// <summary>
/// Returns a list of all the active gestures in a user's inventory.
/// </summary>
/// <param name="userId">
/// The <see cref="UUID"/> of the user
/// </param>
/// <returns>
/// A flat list of the gesture items.
/// </returns>
public List<InventoryItemBase> GetActiveGestures(UUID userId)
{
return SynchronousRestObjectPoster.BeginPostObject<Guid, List<InventoryItemBase>>(
"POST", m_inventoryServerUrl + "ActiveGestures/", userId.Guid);
}
}
}

View File

@ -1,40 +0,0 @@
/*
* 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 OpenSim.Framework.Servers.HttpServer;
namespace OpenSim.Grid.Framework
{
public interface IGridServiceCore
{
T Get<T>();
void RegisterInterface<T>(T iface);
bool TryGet<T>(out T iface);
BaseHttpServer GetHttpServer();
}
}

View File

@ -1,40 +0,0 @@
/*
* 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 OpenSim.Framework.Servers.HttpServer;
namespace OpenSim.Grid.Framework
{
public interface IGridServiceModule
{
void Close();
void Initialise(IGridServiceCore core);
void PostInitialise();
void RegisterHandlers(BaseHttpServer httpServer);
}
}

View File

@ -1,35 +0,0 @@
/*
* 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;
namespace OpenSim.Grid.Framework
{
public interface IInterServiceUserService
{
bool SendToUserServer(System.Collections.Hashtable request, string method);
}
}

View File

@ -1,38 +0,0 @@
/*
* 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 OpenSim.Data;
namespace OpenSim.Grid.Framework
{
public interface IMessageRegionLookup
{
int ClearRegionCache();
RegionProfileData GetRegionInfo(ulong regionhandle);
}
}

View File

@ -1,40 +0,0 @@
/*
* 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 OpenSim.Framework.Servers;
namespace OpenSim.Grid.Framework
{
public interface IMessagingServerDiscovery
{
List<MessageServerInfo> GetMessageServersList();
void RegisterMessageServer(MessageServerInfo m);
void DeRegisterMessageServer(MessageServerInfo m);
}
}

View File

@ -1,110 +0,0 @@
/*
* 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.IO;
using System.Reflection;
using log4net;
using OpenMetaverse;
using OpenSim.Framework.Servers.HttpServer;
namespace OpenSim.Grid.Framework
{
public class XMPPHTTPStreamHandler : BaseStreamHandler
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Constructor.
/// </summary>
/// <param name="assetManager"></param>
/// <param name="assetProvider"></param>
public XMPPHTTPStreamHandler()
: base("GET", "/presence")
{
m_log.Info("[REST]: In Get Request");
}
public override byte[] Handle(string path, Stream request,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
string param = GetParam(path);
byte[] result = new byte[] {};
try
{
string[] p = param.Split(new char[] {'/', '?', '&'}, StringSplitOptions.RemoveEmptyEntries);
if (p.Length > 0)
{
UUID assetID = UUID.Zero;
if (!UUID.TryParse(p[0], out assetID))
{
m_log.InfoFormat(
"[REST]: GET:/presence ignoring request with malformed UUID {0}", p[0]);
return result;
}
}
}
catch (Exception e)
{
m_log.Error(e.ToString());
}
return result;
}
}
public class PostXMPPStreamHandler : BaseStreamHandler
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public override byte[] Handle(string path, Stream request,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
string param = GetParam(path);
UUID assetId;
if (param.Length > 0)
UUID.TryParse(param, out assetId);
// byte[] txBuffer = new byte[4096];
// TODO: Read POST serialize XMPP stanzas
return new byte[] {};
}
public PostXMPPStreamHandler()
: base("POST", "/presence")
{
}
}
}

View File

@ -1,284 +0,0 @@
/*
* 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.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Xml;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers;
namespace OpenSim.Grid.GridServer.Modules
{
public class GridDBService : IRegionProfileService
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private List<IGridDataPlugin> _plugins = new List<IGridDataPlugin>();
private List<ILogDataPlugin> _logplugins = new List<ILogDataPlugin>();
/// <summary>
/// Adds a list of grid and log data plugins, as described by
/// `provider' and `connect', to `_plugins' and `_logplugins',
/// respectively.
/// </summary>
/// <param name="provider">
/// The filename of the inventory server plugin DLL.
/// </param>
/// <param name="connect">
/// The connection string for the storage backend.
/// </param>
public void AddPlugin(string provider, string connect)
{
_plugins = DataPluginFactory.LoadDataPlugins<IGridDataPlugin>(provider, connect);
_logplugins = DataPluginFactory.LoadDataPlugins<ILogDataPlugin>(provider, connect);
}
public int GetNumberOfPlugins()
{
return _plugins.Count;
}
/// <summary>
/// Logs a piece of information to the database
/// </summary>
/// <param name="target">What you were operating on (in grid server, this will likely be the region UUIDs)</param>
/// <param name="method">Which method is being called?</param>
/// <param name="args">What arguments are being passed?</param>
/// <param name="priority">How high priority is this? 1 = Max, 6 = Verbose</param>
/// <param name="message">The message to log</param>
private void logToDB(string target, string method, string args, int priority, string message)
{
foreach (ILogDataPlugin plugin in _logplugins)
{
try
{
plugin.saveLog("Gridserver", target, method, args, priority, message);
}
catch (Exception)
{
m_log.Warn("[storage]: Unable to write log via " + plugin.Name);
}
}
}
/// <summary>
/// Returns a region by argument
/// </summary>
/// <param name="uuid">A UUID key of the region to return</param>
/// <returns>A SimProfileData for the region</returns>
public RegionProfileData GetRegion(UUID uuid)
{
foreach (IGridDataPlugin plugin in _plugins)
{
try
{
return plugin.GetProfileByUUID(uuid);
}
catch (Exception e)
{
m_log.Warn("[storage]: GetRegion - " + e.Message);
}
}
return null;
}
/// <summary>
/// Returns a region by argument
/// </summary>
/// <param name="uuid">A regionHandle of the region to return</param>
/// <returns>A SimProfileData for the region</returns>
public RegionProfileData GetRegion(ulong handle)
{
foreach (IGridDataPlugin plugin in _plugins)
{
try
{
return plugin.GetProfileByHandle(handle);
}
catch (Exception ex)
{
m_log.Debug("[storage]: " + ex.Message);
m_log.Warn("[storage]: Unable to find region " + handle.ToString() + " via " + plugin.Name);
}
}
return null;
}
/// <summary>
/// Returns a region by argument
/// </summary>
/// <param name="regionName">A partial regionName of the region to return</param>
/// <returns>A SimProfileData for the region</returns>
public RegionProfileData GetRegion(string regionName)
{
foreach (IGridDataPlugin plugin in _plugins)
{
try
{
return plugin.GetProfileByString(regionName);
}
catch
{
m_log.Warn("[storage]: Unable to find region " + regionName + " via " + plugin.Name);
}
}
return null;
}
public List<RegionProfileData> GetRegions(uint xmin, uint ymin, uint xmax, uint ymax)
{
List<RegionProfileData> regions = new List<RegionProfileData>();
foreach (IGridDataPlugin plugin in _plugins)
{
try
{
regions.AddRange(plugin.GetProfilesInRange(xmin, ymin, xmax, ymax));
}
catch
{
m_log.Warn("[storage]: Unable to query regionblock via " + plugin.Name);
}
}
return regions;
}
public List<RegionProfileData> GetRegions(string name, int maxNum)
{
List<RegionProfileData> regions = new List<RegionProfileData>();
foreach (IGridDataPlugin plugin in _plugins)
{
try
{
int num = maxNum - regions.Count;
List<RegionProfileData> profiles = plugin.GetRegionsByName(name, (uint)num);
if (profiles != null) regions.AddRange(profiles);
}
catch
{
m_log.Warn("[storage]: Unable to query regionblock via " + plugin.Name);
}
}
return regions;
}
public DataResponse AddUpdateRegion(RegionProfileData sim, RegionProfileData existingSim)
{
DataResponse insertResponse = DataResponse.RESPONSE_ERROR;
foreach (IGridDataPlugin plugin in _plugins)
{
try
{
if (existingSim == null)
{
insertResponse = plugin.StoreProfile(sim);
}
else
{
insertResponse = plugin.StoreProfile(sim);
}
}
catch (Exception e)
{
m_log.Warn("[LOGIN END]: " +
"Unable to login region " + sim.ToString() + " via " + plugin.Name);
m_log.Warn("[LOGIN END]: " + e.ToString());
}
}
return insertResponse;
}
public DataResponse DeleteRegion(string uuid)
{
DataResponse insertResponse = DataResponse.RESPONSE_ERROR;
foreach (IGridDataPlugin plugin in _plugins)
{
//OpenSim.Data.MySQL.MySQLGridData dbengine = new OpenSim.Data.MySQL.MySQLGridData();
try
{
//Nice are we not using multiple databases?
//MySQLGridData mysqldata = (MySQLGridData)(plugin);
//DataResponse insertResponse = mysqldata.DeleteProfile(TheSim);
insertResponse = plugin.DeleteProfile(uuid);
}
catch (Exception)
{
m_log.Error("storage Unable to delete region " + uuid + " via " + plugin.Name);
//MainLog.Instance.Warn("storage", e.ToString());
insertResponse = DataResponse.RESPONSE_ERROR;
}
}
return insertResponse;
}
public string CheckReservations(RegionProfileData theSim, XmlNode authkeynode)
{
foreach (IGridDataPlugin plugin in _plugins)
{
try
{
//Check reservations
ReservationData reserveData =
plugin.GetReservationAtPoint(theSim.regionLocX, theSim.regionLocY);
if ((reserveData != null && reserveData.gridRecvKey == theSim.regionRecvKey) ||
(reserveData == null && authkeynode.InnerText != theSim.regionRecvKey))
{
plugin.StoreProfile(theSim);
m_log.Info("[grid]: New sim added to grid (" + theSim.regionName + ")");
logToDB(theSim.ToString(), "RestSetSimMethod", String.Empty, 5,
"Region successfully updated and connected to grid.");
}
else
{
m_log.Warn("[grid]: " +
"Unable to update region (RestSetSimMethod): Incorrect reservation auth key.");
// Wanted: " + reserveData.gridRecvKey + ", Got: " + theSim.regionRecvKey + ".");
return "Unable to update region (RestSetSimMethod): Incorrect auth key.";
}
}
catch (Exception e)
{
m_log.Warn("[GRID]: GetRegionPlugin Handle " + plugin.Name + " unable to add new sim: " +
e.ToString());
}
}
return "OK";
}
}
}

View File

@ -1,164 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using System.Text;
using Nwc.XmlRpc;
using log4net;
using OpenSim.Data;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Framework;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.GridServer.Modules
{
public class GridMessagingModule : IMessagingServerDiscovery
{
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected IRegionProfileService m_gridDBService;
protected IGridServiceCore m_gridCore;
protected GridConfig m_config;
/// <value>
/// Used to notify old regions as to which OpenSim version to upgrade to
/// </value>
//private string m_opensimVersion;
protected BaseHttpServer m_httpServer;
// This is here so that the grid server can hand out MessageServer settings to regions on registration
private List<MessageServerInfo> m_messageServers = new List<MessageServerInfo>();
public GridMessagingModule()
{
}
public void Initialise(string opensimVersion, IRegionProfileService gridDBService, IGridServiceCore gridCore, GridConfig config)
{
//m_opensimVersion = opensimVersion;
m_gridDBService = gridDBService;
m_gridCore = gridCore;
m_config = config;
m_gridCore.RegisterInterface<IMessagingServerDiscovery>(this);
RegisterHandlers();
}
public void PostInitialise()
{
}
public void RegisterHandlers()
{
//have these in separate method as some servers restart the http server and reregister all the handlers.
m_httpServer = m_gridCore.GetHttpServer();
// Message Server ---> Grid Server
m_httpServer.AddXmlRPCHandler("register_messageserver", XmlRPCRegisterMessageServer);
m_httpServer.AddXmlRPCHandler("deregister_messageserver", XmlRPCDeRegisterMessageServer);
}
public List<MessageServerInfo> GetMessageServersList()
{
lock (m_messageServers)
{
return new List<MessageServerInfo>(m_messageServers);
}
}
public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
if (requestData.Contains("uri"))
{
string URI = (string)requestData["URI"];
string sendkey = (string)requestData["sendkey"];
string recvkey = (string)requestData["recvkey"];
MessageServerInfo m = new MessageServerInfo();
m.URI = URI;
m.sendkey = sendkey;
m.recvkey = recvkey;
RegisterMessageServer(m);
responseData["responsestring"] = "TRUE";
response.Value = responseData;
}
return response;
}
public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
if (requestData.Contains("uri"))
{
string URI = (string)requestData["uri"];
string sendkey = (string)requestData["sendkey"];
string recvkey = (string)requestData["recvkey"];
MessageServerInfo m = new MessageServerInfo();
m.URI = URI;
m.sendkey = sendkey;
m.recvkey = recvkey;
DeRegisterMessageServer(m);
responseData["responsestring"] = "TRUE";
response.Value = responseData;
}
return response;
}
public void RegisterMessageServer(MessageServerInfo m)
{
lock (m_messageServers)
{
if (!m_messageServers.Contains(m))
m_messageServers.Add(m);
}
}
public void DeRegisterMessageServer(MessageServerInfo m)
{
lock (m_messageServers)
{
if (m_messageServers.Contains(m))
m_messageServers.Remove(m);
}
}
}
}

View File

@ -1,282 +0,0 @@
/*
* 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.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Xml;
using log4net;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.GridServer.Modules
{
public class GridRestModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private GridDBService m_gridDBService;
private IGridServiceCore m_gridCore;
protected GridConfig m_config;
/// <value>
/// Used to notify old regions as to which OpenSim version to upgrade to
/// </value>
//private string m_opensimVersion;
protected BaseHttpServer m_httpServer;
/// <summary>
/// Constructor
/// </summary>
/// <param name="opensimVersion">
/// Used to notify old regions as to which OpenSim version to upgrade to
/// </param>
public GridRestModule()
{
}
public void Initialise(string opensimVersion, GridDBService gridDBService, IGridServiceCore gridCore, GridConfig config)
{
//m_opensimVersion = opensimVersion;
m_gridDBService = gridDBService;
m_gridCore = gridCore;
m_config = config;
RegisterHandlers();
}
public void PostInitialise()
{
}
public void RegisterHandlers()
{
//have these in separate method as some servers restart the http server and reregister all the handlers.
m_httpServer = m_gridCore.GetHttpServer();
m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/sims/", RestGetSimMethod));
m_httpServer.AddStreamHandler(new RestStreamHandler("POST", "/sims/", RestSetSimMethod));
m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/regions/", RestGetRegionMethod));
m_httpServer.AddStreamHandler(new RestStreamHandler("POST", "/regions/", RestSetRegionMethod));
}
/// <summary>
/// Performs a REST Get Operation
/// </summary>
/// <param name="request"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <param name="httpRequest">HTTP request header object</param>
/// <param name="httpResponse">HTTP response header object</param>
/// <returns></returns>
public string RestGetRegionMethod(string request, string path, string param,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
return RestGetSimMethod(String.Empty, "/sims/", param, httpRequest, httpResponse);
}
/// <summary>
/// Performs a REST Set Operation
/// </summary>
/// <param name="request"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <param name="httpRequest">HTTP request header object</param>
/// <param name="httpResponse">HTTP response header object</param>
/// <returns></returns>
public string RestSetRegionMethod(string request, string path, string param,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
return RestSetSimMethod(String.Empty, "/sims/", param, httpRequest, httpResponse);
}
/// <summary>
/// Returns information about a sim via a REST Request
/// </summary>
/// <param name="request"></param>
/// <param name="path"></param>
/// <param name="param">A string representing the sim's UUID</param>
/// <param name="httpRequest">HTTP request header object</param>
/// <param name="httpResponse">HTTP response header object</param>
/// <returns>Information about the sim in XML</returns>
public string RestGetSimMethod(string request, string path, string param,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
string respstring = String.Empty;
RegionProfileData TheSim;
UUID UUID;
if (UUID.TryParse(param, out UUID))
{
TheSim = m_gridDBService.GetRegion(UUID);
if (!(TheSim == null))
{
respstring = "<Root>";
respstring += "<authkey>" + TheSim.regionSendKey + "</authkey>";
respstring += "<sim>";
respstring += "<uuid>" + TheSim.UUID.ToString() + "</uuid>";
respstring += "<regionname>" + TheSim.regionName + "</regionname>";
respstring += "<sim_ip>" + TheSim.serverIP + "</sim_ip>";
respstring += "<sim_port>" + TheSim.serverPort.ToString() + "</sim_port>";
respstring += "<region_locx>" + TheSim.regionLocX.ToString() + "</region_locx>";
respstring += "<region_locy>" + TheSim.regionLocY.ToString() + "</region_locy>";
respstring += "<estate_id>1</estate_id>";
respstring += "</sim>";
respstring += "</Root>";
}
}
else
{
respstring = "<Root>";
respstring += "<error>Param must be a UUID</error>";
respstring += "</Root>";
}
return respstring;
}
/// <summary>
/// Creates or updates a sim via a REST Method Request
/// BROKEN with SQL Update
/// </summary>
/// <param name="request"></param>
/// <param name="path"></param>
/// <param name="param"></param>
/// <param name="httpRequest">HTTP request header object</param>
/// <param name="httpResponse">HTTP response header object</param>
/// <returns>"OK" or an error</returns>
public string RestSetSimMethod(string request, string path, string param,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
m_log.Info("Processing region update via REST method");
RegionProfileData theSim;
theSim = m_gridDBService.GetRegion(new UUID(param));
if (theSim == null)
{
theSim = new RegionProfileData();
UUID UUID = new UUID(param);
theSim.UUID = UUID;
theSim.regionRecvKey = m_config.SimRecvKey;
}
XmlDocument doc = new XmlDocument();
doc.LoadXml(request);
XmlNode rootnode = doc.FirstChild;
XmlNode authkeynode = rootnode.ChildNodes[0];
if (authkeynode.Name != "authkey")
{
return "ERROR! bad XML - expected authkey tag";
}
XmlNode simnode = rootnode.ChildNodes[1];
if (simnode.Name != "sim")
{
return "ERROR! bad XML - expected sim tag";
}
//theSim.regionSendKey = Cfg;
theSim.regionRecvKey = m_config.SimRecvKey;
theSim.regionSendKey = m_config.SimSendKey;
theSim.regionSecret = m_config.SimRecvKey;
theSim.regionDataURI = String.Empty;
theSim.regionAssetURI = m_config.DefaultAssetServer;
theSim.regionAssetRecvKey = m_config.AssetRecvKey;
theSim.regionAssetSendKey = m_config.AssetSendKey;
theSim.regionUserURI = m_config.DefaultUserServer;
theSim.regionUserSendKey = m_config.UserSendKey;
theSim.regionUserRecvKey = m_config.UserRecvKey;
for (int i = 0; i < simnode.ChildNodes.Count; i++)
{
switch (simnode.ChildNodes[i].Name)
{
case "regionname":
theSim.regionName = simnode.ChildNodes[i].InnerText;
break;
case "sim_ip":
theSim.serverIP = simnode.ChildNodes[i].InnerText;
break;
case "sim_port":
theSim.serverPort = Convert.ToUInt32(simnode.ChildNodes[i].InnerText);
break;
case "region_locx":
theSim.regionLocX = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
theSim.regionHandle = Utils.UIntsToLong((theSim.regionLocX * Constants.RegionSize), (theSim.regionLocY * Constants.RegionSize));
break;
case "region_locy":
theSim.regionLocY = Convert.ToUInt32((string)simnode.ChildNodes[i].InnerText);
theSim.regionHandle = Utils.UIntsToLong((theSim.regionLocX * Constants.RegionSize), (theSim.regionLocY * Constants.RegionSize));
break;
}
}
theSim.serverURI = "http://" + theSim.serverIP + ":" + theSim.serverPort + "/";
bool requirePublic = false;
bool requireValid = true;
if (requirePublic &&
(theSim.serverIP.StartsWith("172.16") || theSim.serverIP.StartsWith("192.168") ||
theSim.serverIP.StartsWith("10.") || theSim.serverIP.StartsWith("0.") ||
theSim.serverIP.StartsWith("255.")))
{
return "ERROR! Servers must register with public addresses.";
}
if (requireValid && (theSim.serverIP.StartsWith("0.") || theSim.serverIP.StartsWith("255.")))
{
return "ERROR! 0.*.*.* / 255.*.*.* Addresses are invalid, please check your server config and try again";
}
try
{
m_log.Info("[DATA]: " +
"Updating / adding via " + m_gridDBService.GetNumberOfPlugins() + " storage provider(s) registered.");
return m_gridDBService.CheckReservations(theSim, authkeynode);
}
catch (Exception e)
{
return "ERROR! Could not save to database! (" + e.ToString() + ")";
}
}
}
}

View File

@ -1,176 +0,0 @@
/*
* 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 System.Text;
using log4net;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Grid.Framework;
using OpenSim.Grid;
namespace OpenSim.Grid.GridServer.Modules
{
public class GridServerPlugin : IGridPlugin
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected GridXmlRpcModule m_gridXmlRpcModule;
protected GridMessagingModule m_gridMessageModule;
protected GridRestModule m_gridRestModule;
protected GridDBService m_gridDBService;
protected string m_version;
protected GridConfig m_config;
protected IGridServiceCore m_core;
protected CommandConsole m_console;
#region IGridPlugin Members
public void Initialise(GridServerBase gridServer)
{
m_core = gridServer;
m_config = gridServer.Config;
m_version = gridServer.Version;
m_console = MainConsole.Instance;
AddConsoleCommands();
SetupGridServices();
}
public void PostInitialise()
{
}
#endregion
#region IPlugin Members
public string Version
{
get { return "0.0"; }
}
public string Name
{
get { return "GridServerPlugin"; }
}
public void Initialise()
{
}
#endregion
protected virtual void SetupGridServices()
{
// m_log.Info("[DATA]: Connecting to Storage Server");
m_gridDBService = new GridDBService();
m_gridDBService.AddPlugin(m_config.DatabaseProvider, m_config.DatabaseConnect);
//Register the database access service so modules can fetch it
// RegisterInterface<GridDBService>(m_gridDBService);
m_gridMessageModule = new GridMessagingModule();
m_gridMessageModule.Initialise(m_version, m_gridDBService, m_core, m_config);
m_gridXmlRpcModule = new GridXmlRpcModule();
m_gridXmlRpcModule.Initialise(m_version, m_gridDBService, m_core, m_config);
m_gridRestModule = new GridRestModule();
m_gridRestModule.Initialise(m_version, m_gridDBService, m_core, m_config);
m_gridMessageModule.PostInitialise();
m_gridXmlRpcModule.PostInitialise();
m_gridRestModule.PostInitialise();
}
#region Console Command Handlers
protected virtual void AddConsoleCommands()
{
m_console.Commands.AddCommand("gridserver", false,
"enable registration",
"enable registration",
"Enable new regions to register", HandleRegistration);
m_console.Commands.AddCommand("gridserver", false,
"disable registration",
"disable registration",
"Disable registering new regions", HandleRegistration);
m_console.Commands.AddCommand("gridserver", false, "show status",
"show status",
"Show registration status", HandleShowStatus);
}
private void HandleRegistration(string module, string[] cmd)
{
switch (cmd[0])
{
case "enable":
m_config.AllowRegionRegistration = true;
m_log.Info("Region registration enabled");
break;
case "disable":
m_config.AllowRegionRegistration = false;
m_log.Info("Region registration disabled");
break;
}
}
private void HandleShowStatus(string module, string[] cmd)
{
if (m_config.AllowRegionRegistration)
{
m_log.Info("Region registration enabled.");
}
else
{
m_log.Info("Region registration disabled.");
}
}
#endregion
#region IDisposable Members
public void Dispose()
{
}
#endregion
}
}

View File

@ -1,900 +0,0 @@
/*
* 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.Collections.Generic;
using System.IO;
using System.Net;
using System.Reflection;
using System.Xml;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.GridServer.Modules
{
public class GridXmlRpcModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private IRegionProfileService m_gridDBService;
private IGridServiceCore m_gridCore;
protected GridConfig m_config;
protected IMessagingServerDiscovery m_messagingServerMapper;
/// <value>
/// Used to notify old regions as to which OpenSim version to upgrade to
/// </value>
private string m_opensimVersion;
protected BaseHttpServer m_httpServer;
/// <summary>
/// Constructor
/// </summary>
/// <param name="opensimVersion">
/// Used to notify old regions as to which OpenSim version to upgrade to
/// </param>
public GridXmlRpcModule()
{
}
public void Initialise(string opensimVersion, IRegionProfileService gridDBService, IGridServiceCore gridCore, GridConfig config)
{
m_opensimVersion = opensimVersion;
m_gridDBService = gridDBService;
m_gridCore = gridCore;
m_config = config;
RegisterHandlers();
}
public void PostInitialise()
{
IMessagingServerDiscovery messagingModule;
if (m_gridCore.TryGet<IMessagingServerDiscovery>(out messagingModule))
{
m_messagingServerMapper = messagingModule;
}
}
public void RegisterHandlers()
{
//have these in separate method as some servers restart the http server and reregister all the handlers.
m_httpServer = m_gridCore.GetHttpServer();
m_httpServer.AddXmlRPCHandler("simulator_login", XmlRpcSimulatorLoginMethod);
m_httpServer.AddXmlRPCHandler("simulator_data_request", XmlRpcSimulatorDataRequestMethod);
m_httpServer.AddXmlRPCHandler("simulator_after_region_moved", XmlRpcDeleteRegionMethod);
m_httpServer.AddXmlRPCHandler("map_block", XmlRpcMapBlockMethod);
m_httpServer.AddXmlRPCHandler("search_for_region_by_name", XmlRpcSearchForRegionMethod);
}
/// <summary>
/// Returns a XML String containing a list of the neighbouring regions
/// </summary>
/// <param name="reqhandle">The regionhandle for the center sim</param>
/// <returns>An XML string containing neighbour entities</returns>
public string GetXMLNeighbours(ulong reqhandle)
{
string response = String.Empty;
RegionProfileData central_region = m_gridDBService.GetRegion(reqhandle);
RegionProfileData neighbour;
for (int x = -1; x < 2; x++)
{
for (int y = -1; y < 2; y++)
{
if (
m_gridDBService.GetRegion(
Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize),
(uint)(central_region.regionLocY + y) * Constants.RegionSize)) != null)
{
neighbour =
m_gridDBService.GetRegion(
Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize),
(uint)(central_region.regionLocY + y) * Constants.RegionSize));
response += "<neighbour>";
response += "<sim_ip>" + neighbour.serverIP + "</sim_ip>";
response += "<sim_port>" + neighbour.serverPort.ToString() + "</sim_port>";
response += "<locx>" + neighbour.regionLocX.ToString() + "</locx>";
response += "<locy>" + neighbour.regionLocY.ToString() + "</locy>";
response += "<regionhandle>" + neighbour.regionHandle.ToString() + "</regionhandle>";
response += "</neighbour>";
}
}
}
return response;
}
/// <summary>
/// Checks that it's valid to replace the existing region data with new data
///
/// Currently, this means ensure that the keys passed in by the new region
/// match those in the original region. (XXX Is this correct? Shouldn't we simply check
/// against the keys in the current configuration?)
/// </summary>
/// <param name="sim"></param>
/// <returns></returns>
protected virtual void ValidateOverwriteKeys(RegionProfileData sim, RegionProfileData existingSim)
{
if (!(existingSim.regionRecvKey == sim.regionRecvKey && existingSim.regionSendKey == sim.regionSendKey))
{
throw new LoginException(
String.Format(
"Authentication failed when trying to login existing region {0} at location {1} {2} currently occupied by {3}"
+ " with the region's send key {4} (expected {5}) and the region's receive key {6} (expected {7})",
sim.regionName, sim.regionLocX, sim.regionLocY, existingSim.regionName,
sim.regionSendKey, existingSim.regionSendKey, sim.regionRecvKey, existingSim.regionRecvKey),
"The keys required to login your region did not match the grid server keys. Please check your grid send and receive keys.");
}
}
/// <summary>
/// Checks that the new region data is valid.
///
/// Currently, this means checking that the keys passed in by the new region
/// match those in the grid server's configuration.
/// </summary>
///
/// <param name="sim"></param>
/// <exception cref="LoginException">Thrown if region login failed</exception>
protected virtual void ValidateNewRegionKeys(RegionProfileData sim)
{
if (!(sim.regionRecvKey == m_config.SimSendKey && sim.regionSendKey == m_config.SimRecvKey))
{
throw new LoginException(
String.Format(
"Authentication failed when trying to login new region {0} at location {1} {2}"
+ " with the region's send key {3} (expected {4}) and the region's receive key {5} (expected {6})",
sim.regionName, sim.regionLocX, sim.regionLocY,
sim.regionSendKey, m_config.SimRecvKey, sim.regionRecvKey, m_config.SimSendKey),
"The keys required to login your region did not match your existing region keys. Please check your grid send and receive keys.");
}
}
/// <summary>
/// Check that a region's http uri is externally contactable.
/// </summary>
/// <param name="sim"></param>
/// <exception cref="LoginException">Thrown if the region is not contactable</exception>
protected virtual void ValidateRegionContactable(RegionProfileData sim)
{
string regionStatusUrl = String.Format("{0}{1}", sim.httpServerURI, "simstatus/");
string regionStatusResponse;
RestClient rc = new RestClient(regionStatusUrl);
rc.RequestMethod = "GET";
m_log.DebugFormat("[LOGIN]: Contacting {0} for status of region {1}", regionStatusUrl, sim.regionName);
try
{
Stream rs = rc.Request();
StreamReader sr = new StreamReader(rs);
regionStatusResponse = sr.ReadToEnd();
sr.Close();
}
catch (Exception e)
{
throw new LoginException(
String.Format("Region status request to {0} failed", regionStatusUrl),
String.Format(
"The grid service could not contact the http url {0} at your region. Please make sure this url is reachable by the grid service",
regionStatusUrl),
e);
}
if (!regionStatusResponse.Equals("OK"))
{
throw new LoginException(
String.Format(
"Region {0} at {1} returned status response {2} rather than {3}",
sim.regionName, regionStatusUrl, regionStatusResponse, "OK"),
String.Format(
"When the grid service asked for the status of your region, it received the response {0} rather than {1}. Please check your status",
regionStatusResponse, "OK"));
}
}
/// <summary>
/// Construct an XMLRPC error response
/// </summary>
/// <param name="error"></param>
/// <returns></returns>
public static XmlRpcResponse ErrorResponse(string error)
{
XmlRpcResponse errorResponse = new XmlRpcResponse();
Hashtable errorResponseData = new Hashtable();
errorResponse.Value = errorResponseData;
errorResponseData["error"] = error;
return errorResponse;
}
/// <summary>
/// Performed when a region connects to the grid server initially.
/// </summary>
/// <param name="request">The XML RPC Request</param>
/// <returns>Startup parameters</returns>
public XmlRpcResponse XmlRpcSimulatorLoginMethod(XmlRpcRequest request, IPEndPoint remoteClient)
{
RegionProfileData sim;
RegionProfileData existingSim;
Hashtable requestData = (Hashtable)request.Params[0];
UUID uuid;
if (!requestData.ContainsKey("UUID") || !UUID.TryParse((string)requestData["UUID"], out uuid))
{
m_log.Debug("[LOGIN PRELUDE]: Region connected without a UUID, sending back error response.");
return ErrorResponse("No UUID passed to grid server - unable to connect you");
}
try
{
sim = RegionFromRequest(requestData);
}
catch (FormatException e)
{
m_log.Debug("[LOGIN PRELUDE]: Invalid login parameters, sending back error response.");
return ErrorResponse("Wrong format in login parameters. Please verify parameters." + e.ToString());
}
m_log.InfoFormat("[LOGIN BEGIN]: Received login request from simulator: {0}", sim.regionName);
if (!m_config.AllowRegionRegistration)
{
m_log.DebugFormat(
"[LOGIN END]: Disabled region registration blocked login request from simulator: {0}",
sim.regionName);
return ErrorResponse("This grid is currently not accepting region registrations.");
}
int majorInterfaceVersion = 0;
if (requestData.ContainsKey("major_interface_version"))
int.TryParse((string)requestData["major_interface_version"], out majorInterfaceVersion);
if (majorInterfaceVersion != VersionInfo.MajorInterfaceVersion)
{
return ErrorResponse(
String.Format(
"Your region service implements OGS1 interface version {0}"
+ " but this grid requires that the region implement OGS1 interface version {1} to connect."
+ " Try changing to OpenSimulator {2}",
majorInterfaceVersion, VersionInfo.MajorInterfaceVersion, m_opensimVersion));
}
existingSim = m_gridDBService.GetRegion(sim.regionHandle);
if (existingSim == null || existingSim.UUID == sim.UUID || sim.UUID != sim.originUUID)
{
try
{
if (existingSim == null)
{
ValidateNewRegionKeys(sim);
}
else
{
ValidateOverwriteKeys(sim, existingSim);
}
ValidateRegionContactable(sim);
}
catch (LoginException e)
{
string logMsg = e.Message;
if (e.InnerException != null)
logMsg += ", " + e.InnerException.Message;
m_log.WarnFormat("[LOGIN END]: {0}", logMsg);
return e.XmlRpcErrorResponse;
}
DataResponse insertResponse = m_gridDBService.AddUpdateRegion(sim, existingSim);
switch (insertResponse)
{
case DataResponse.RESPONSE_OK:
m_log.Info("[LOGIN END]: " + (existingSim == null ? "New" : "Existing") + " sim login successful: " + sim.regionName);
break;
case DataResponse.RESPONSE_ERROR:
m_log.Warn("[LOGIN END]: Sim login failed (Error): " + sim.regionName);
break;
case DataResponse.RESPONSE_INVALIDCREDENTIALS:
m_log.Warn("[LOGIN END]: " +
"Sim login failed (Invalid Credentials): " + sim.regionName);
break;
case DataResponse.RESPONSE_AUTHREQUIRED:
m_log.Warn("[LOGIN END]: " +
"Sim login failed (Authentication Required): " +
sim.regionName);
break;
}
XmlRpcResponse response = CreateLoginResponse(sim);
return response;
}
else
{
m_log.Warn("[LOGIN END]: Failed to login region " + sim.regionName + " at location " + sim.regionLocX + " " + sim.regionLocY + " currently occupied by " + existingSim.regionName);
return ErrorResponse("Another region already exists at that location. Please try another.");
}
}
/// <summary>
/// Construct a successful response to a simulator's login attempt.
/// </summary>
/// <param name="sim"></param>
/// <returns></returns>
private XmlRpcResponse CreateLoginResponse(RegionProfileData sim)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
response.Value = responseData;
ArrayList SimNeighboursData = GetSimNeighboursData(sim);
responseData["UUID"] = sim.UUID.ToString();
responseData["region_locx"] = sim.regionLocX.ToString();
responseData["region_locy"] = sim.regionLocY.ToString();
responseData["regionname"] = sim.regionName;
responseData["estate_id"] = "1";
responseData["neighbours"] = SimNeighboursData;
responseData["sim_ip"] = sim.serverIP;
responseData["sim_port"] = sim.serverPort.ToString();
responseData["asset_url"] = sim.regionAssetURI;
responseData["asset_sendkey"] = sim.regionAssetSendKey;
responseData["asset_recvkey"] = sim.regionAssetRecvKey;
responseData["user_url"] = sim.regionUserURI;
responseData["user_sendkey"] = sim.regionUserSendKey;
responseData["user_recvkey"] = sim.regionUserRecvKey;
responseData["authkey"] = sim.regionSecret;
// New! If set, use as URL to local sim storage (ie http://remotehost/region.Yap)
responseData["data_uri"] = sim.regionDataURI;
responseData["allow_forceful_banlines"] = m_config.AllowForcefulBanlines;
// Instead of sending a multitude of message servers to the registering sim
// we should probably be sending a single one and parhaps it's backup
// that has responsibility over routing it's messages.
// The Sim won't be contacting us again about any of the message server stuff during it's time up.
responseData["messageserver_count"] = 0;
// IGridMessagingModule messagingModule;
// if (m_gridCore.TryGet<IGridMessagingModule>(out messagingModule))
//{
if (m_messagingServerMapper != null)
{
List<MessageServerInfo> messageServers = m_messagingServerMapper.GetMessageServersList();
responseData["messageserver_count"] = messageServers.Count;
for (int i = 0; i < messageServers.Count; i++)
{
responseData["messageserver_uri" + i] = messageServers[i].URI;
responseData["messageserver_sendkey" + i] = messageServers[i].sendkey;
responseData["messageserver_recvkey" + i] = messageServers[i].recvkey;
}
}
return response;
}
private ArrayList GetSimNeighboursData(RegionProfileData sim)
{
ArrayList SimNeighboursData = new ArrayList();
RegionProfileData neighbour;
Hashtable NeighbourBlock;
//First use the fast method. (not implemented in SQLLite)
List<RegionProfileData> neighbours = m_gridDBService.GetRegions(sim.regionLocX - 1, sim.regionLocY - 1, sim.regionLocX + 1, sim.regionLocY + 1);
if (neighbours.Count > 0)
{
foreach (RegionProfileData aSim in neighbours)
{
NeighbourBlock = new Hashtable();
NeighbourBlock["sim_ip"] = aSim.serverIP;
NeighbourBlock["sim_port"] = aSim.serverPort.ToString();
NeighbourBlock["region_locx"] = aSim.regionLocX.ToString();
NeighbourBlock["region_locy"] = aSim.regionLocY.ToString();
NeighbourBlock["UUID"] = aSim.ToString();
NeighbourBlock["regionHandle"] = aSim.regionHandle.ToString();
if (aSim.UUID != sim.UUID)
{
SimNeighboursData.Add(NeighbourBlock);
}
}
}
else
{
for (int x = -1; x < 2; x++)
{
for (int y = -1; y < 2; y++)
{
if (
m_gridDBService.GetRegion(
Utils.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
(uint)(sim.regionLocY + y) * Constants.RegionSize)) != null)
{
neighbour =
m_gridDBService.GetRegion(
Utils.UIntsToLong((uint)((sim.regionLocX + x) * Constants.RegionSize),
(uint)(sim.regionLocY + y) * Constants.RegionSize));
NeighbourBlock = new Hashtable();
NeighbourBlock["sim_ip"] = neighbour.serverIP;
NeighbourBlock["sim_port"] = neighbour.serverPort.ToString();
NeighbourBlock["region_locx"] = neighbour.regionLocX.ToString();
NeighbourBlock["region_locy"] = neighbour.regionLocY.ToString();
NeighbourBlock["UUID"] = neighbour.UUID.ToString();
NeighbourBlock["regionHandle"] = neighbour.regionHandle.ToString();
if (neighbour.UUID != sim.UUID) SimNeighboursData.Add(NeighbourBlock);
}
}
}
}
return SimNeighboursData;
}
/// <summary>
/// Loads the grid's own RegionProfileData object with data from the XMLRPC simulator_login request from a region
/// </summary>
/// <param name="requestData"></param>
/// <returns></returns>
private RegionProfileData RegionFromRequest(Hashtable requestData)
{
RegionProfileData sim;
sim = new RegionProfileData();
sim.UUID = new UUID((string)requestData["UUID"]);
sim.originUUID = new UUID((string)requestData["originUUID"]);
sim.regionRecvKey = String.Empty;
sim.regionSendKey = String.Empty;
if (requestData.ContainsKey("region_secret"))
{
string regionsecret = (string)requestData["region_secret"];
if (regionsecret.Length > 0)
sim.regionSecret = regionsecret;
else
sim.regionSecret = m_config.SimRecvKey;
}
else
{
sim.regionSecret = m_config.SimRecvKey;
}
sim.regionDataURI = String.Empty;
sim.regionAssetURI = m_config.DefaultAssetServer;
sim.regionAssetRecvKey = m_config.AssetRecvKey;
sim.regionAssetSendKey = m_config.AssetSendKey;
sim.regionUserURI = m_config.DefaultUserServer;
sim.regionUserSendKey = m_config.UserSendKey;
sim.regionUserRecvKey = m_config.UserRecvKey;
sim.serverIP = (string)requestData["sim_ip"];
sim.serverPort = Convert.ToUInt32((string)requestData["sim_port"]);
sim.httpPort = Convert.ToUInt32((string)requestData["http_port"]);
sim.remotingPort = Convert.ToUInt32((string)requestData["remoting_port"]);
sim.regionLocX = Convert.ToUInt32((string)requestData["region_locx"]);
sim.regionLocY = Convert.ToUInt32((string)requestData["region_locy"]);
sim.regionLocZ = 0;
UUID textureID;
if (UUID.TryParse((string)requestData["map-image-id"], out textureID))
{
sim.regionMapTextureID = textureID;
}
// part of an initial brutish effort to provide accurate information (as per the xml region spec)
// wrt the ownership of a given region
// the (very bad) assumption is that this value is being read and handled inconsistently or
// not at all. Current strategy is to put the code in place to support the validity of this information
// and to roll forward debugging any issues from that point
//
// this particular section of the mod attempts to receive a value from the region's xml file by way of
// OSG1GridServices for the region's owner
sim.owner_uuid = (UUID)(string)requestData["master_avatar_uuid"];
try
{
sim.regionRecvKey = (string)requestData["recvkey"];
sim.regionSendKey = (string)requestData["authkey"];
}
catch (KeyNotFoundException) { }
sim.regionHandle = Utils.UIntsToLong((sim.regionLocX * Constants.RegionSize), (sim.regionLocY * Constants.RegionSize));
sim.serverURI = (string)requestData["server_uri"];
sim.httpServerURI = "http://" + sim.serverIP + ":" + sim.httpPort + "/";
sim.regionName = (string)requestData["sim_name"];
try
{
sim.maturity = Convert.ToUInt32((string)requestData["maturity"]);
}
catch (KeyNotFoundException)
{
//older region not providing this key - so default to Mature
sim.maturity = 1;
}
return sim;
}
/// <summary>
/// Returns an XML RPC response to a simulator profile request
/// Performed after moving a region.
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
/// <param name="request">The XMLRPC Request</param>
/// <returns>Processing parameters</returns>
public XmlRpcResponse XmlRpcDeleteRegionMethod(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
response.Value = responseData;
//RegionProfileData TheSim = null;
string uuid;
Hashtable requestData = (Hashtable)request.Params[0];
if (requestData.ContainsKey("UUID"))
{
//TheSim = GetRegion(new UUID((string) requestData["UUID"]));
uuid = requestData["UUID"].ToString();
m_log.InfoFormat("[LOGOUT]: Logging out region: {0}", uuid);
// logToDB((new LLUUID((string)requestData["UUID"])).ToString(),"XmlRpcDeleteRegionMethod","", 5,"Attempting delete with UUID.");
}
else
{
responseData["error"] = "No UUID or region_handle passed to grid server - unable to delete";
return response;
}
DataResponse insertResponse = m_gridDBService.DeleteRegion(uuid);
string insertResp = "";
switch (insertResponse)
{
case DataResponse.RESPONSE_OK:
//MainLog.Instance.Verbose("grid", "Deleting region successful: " + uuid);
insertResp = "Deleting region successful: " + uuid;
break;
case DataResponse.RESPONSE_ERROR:
//MainLog.Instance.Warn("storage", "Deleting region failed (Error): " + uuid);
insertResp = "Deleting region failed (Error): " + uuid;
break;
case DataResponse.RESPONSE_INVALIDCREDENTIALS:
//MainLog.Instance.Warn("storage", "Deleting region failed (Invalid Credentials): " + uuid);
insertResp = "Deleting region (Invalid Credentials): " + uuid;
break;
case DataResponse.RESPONSE_AUTHREQUIRED:
//MainLog.Instance.Warn("storage", "Deleting region failed (Authentication Required): " + uuid);
insertResp = "Deleting region (Authentication Required): " + uuid;
break;
}
responseData["status"] = insertResp;
return response;
}
/// <summary>
/// Returns an XML RPC response to a simulator profile request
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public XmlRpcResponse XmlRpcSimulatorDataRequestMethod(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
RegionProfileData simData = null;
if (requestData.ContainsKey("region_UUID"))
{
UUID regionID = new UUID((string)requestData["region_UUID"]);
simData = m_gridDBService.GetRegion(regionID);
if (simData == null)
{
m_log.WarnFormat("[DATA] didn't find region for regionID {0} from {1}",
regionID, request.Params.Count > 1 ? request.Params[1] : "unknwon source");
}
}
else if (requestData.ContainsKey("region_handle"))
{
//CFK: The if/else below this makes this message redundant.
//CFK: m_log.Info("requesting data for region " + (string) requestData["region_handle"]);
ulong regionHandle = Convert.ToUInt64((string)requestData["region_handle"]);
simData = m_gridDBService.GetRegion(regionHandle);
if (simData == null)
{
m_log.WarnFormat("[DATA] didn't find region for regionHandle {0} from {1}",
regionHandle, request.Params.Count > 1 ? request.Params[1] : "unknwon source");
}
}
else if (requestData.ContainsKey("region_name_search"))
{
string regionName = (string)requestData["region_name_search"];
simData = m_gridDBService.GetRegion(regionName);
if (simData == null)
{
m_log.WarnFormat("[DATA] didn't find region for regionName {0} from {1}",
regionName, request.Params.Count > 1 ? request.Params[1] : "unknwon source");
}
}
else m_log.Warn("[DATA] regionlookup without regionID, regionHandle or regionHame");
if (simData == null)
{
//Sim does not exist
responseData["error"] = "Sim does not exist";
}
else
{
m_log.Info("[DATA]: found " + (string)simData.regionName + " regionHandle = " +
(string)requestData["region_handle"]);
responseData["sim_ip"] = simData.serverIP;
responseData["sim_port"] = simData.serverPort.ToString();
responseData["server_uri"] = simData.serverURI;
responseData["http_port"] = simData.httpPort.ToString();
responseData["remoting_port"] = simData.remotingPort.ToString();
responseData["region_locx"] = simData.regionLocX.ToString();
responseData["region_locy"] = simData.regionLocY.ToString();
responseData["region_UUID"] = simData.UUID.Guid.ToString();
responseData["region_name"] = simData.regionName;
responseData["regionHandle"] = simData.regionHandle.ToString();
}
XmlRpcResponse response = new XmlRpcResponse();
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRpcMapBlockMethod(XmlRpcRequest request, IPEndPoint remoteClient)
{
int xmin = 980, ymin = 980, xmax = 1020, ymax = 1020;
Hashtable requestData = (Hashtable)request.Params[0];
if (requestData.ContainsKey("xmin"))
{
xmin = (Int32)requestData["xmin"];
}
if (requestData.ContainsKey("ymin"))
{
ymin = (Int32)requestData["ymin"];
}
if (requestData.ContainsKey("xmax"))
{
xmax = (Int32)requestData["xmax"];
}
if (requestData.ContainsKey("ymax"))
{
ymax = (Int32)requestData["ymax"];
}
//CFK: The second log is more meaningful and either standard or fast generally occurs.
//CFK: m_log.Info("[MAP]: World map request for range (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
response.Value = responseData;
IList simProfileList = new ArrayList();
bool fastMode = (m_config.DatabaseProvider == "OpenSim.Data.MySQL.dll" || m_config.DatabaseProvider == "OpenSim.Data.MSSQL.dll");
if (fastMode)
{
List<RegionProfileData> neighbours = m_gridDBService.GetRegions((uint)xmin, (uint)ymin, (uint)xmax, (uint)ymax);
foreach (RegionProfileData aSim in neighbours)
{
Hashtable simProfileBlock = new Hashtable();
simProfileBlock["x"] = aSim.regionLocX.ToString();
simProfileBlock["y"] = aSim.regionLocY.ToString();
//m_log.DebugFormat("[MAP]: Sending neighbour info for {0},{1}", aSim.regionLocX, aSim.regionLocY);
simProfileBlock["name"] = aSim.regionName;
simProfileBlock["access"] = aSim.AccessLevel.ToString();
simProfileBlock["region-flags"] = 512;
simProfileBlock["water-height"] = 0;
simProfileBlock["agents"] = 1;
simProfileBlock["map-image-id"] = aSim.regionMapTextureID.ToString();
// For Sugilite compatibility
simProfileBlock["regionhandle"] = aSim.regionHandle.ToString();
simProfileBlock["sim_ip"] = aSim.serverIP;
simProfileBlock["sim_port"] = aSim.serverPort.ToString();
simProfileBlock["sim_uri"] = aSim.serverURI.ToString();
simProfileBlock["uuid"] = aSim.UUID.ToString();
simProfileBlock["remoting_port"] = aSim.remotingPort.ToString();
simProfileBlock["http_port"] = aSim.httpPort.ToString();
simProfileList.Add(simProfileBlock);
}
m_log.Info("[MAP]: Fast map " + simProfileList.Count.ToString() +
" regions @ (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
}
else
{
RegionProfileData simProfile;
for (int x = xmin; x < xmax + 1; x++)
{
for (int y = ymin; y < ymax + 1; y++)
{
ulong regHandle = Utils.UIntsToLong((uint)(x * Constants.RegionSize), (uint)(y * Constants.RegionSize));
simProfile = m_gridDBService.GetRegion(regHandle);
if (simProfile != null)
{
Hashtable simProfileBlock = new Hashtable();
simProfileBlock["x"] = x;
simProfileBlock["y"] = y;
simProfileBlock["name"] = simProfile.regionName;
simProfileBlock["access"] = simProfile.AccessLevel.ToString();
simProfileBlock["region-flags"] = 0;
simProfileBlock["water-height"] = 20;
simProfileBlock["agents"] = 1;
simProfileBlock["map-image-id"] = simProfile.regionMapTextureID.ToString();
// For Sugilite compatibility
simProfileBlock["regionhandle"] = simProfile.regionHandle.ToString();
simProfileBlock["sim_ip"] = simProfile.serverIP.ToString();
simProfileBlock["sim_port"] = simProfile.serverPort.ToString();
simProfileBlock["sim_uri"] = simProfile.serverURI.ToString();
simProfileBlock["uuid"] = simProfile.UUID.ToString();
simProfileBlock["remoting_port"] = simProfile.remotingPort.ToString();
simProfileBlock["http_port"] = simProfile.httpPort;
simProfileList.Add(simProfileBlock);
}
}
}
m_log.Info("[MAP]: Std map " + simProfileList.Count.ToString() +
" regions @ (" + xmin + "," + ymin + ")..(" + xmax + "," + ymax + ")");
}
responseData["sim-profiles"] = simProfileList;
return response;
}
/// <summary>
/// Returns up to <code>maxNumber</code> profiles of regions that have a name starting with <code>name</code>
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public XmlRpcResponse XmlRpcSearchForRegionMethod(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
if (!requestData.ContainsKey("name") || !requestData.Contains("maxNumber"))
{
m_log.Warn("[DATA] Invalid region-search request; missing name or maxNumber");
return new XmlRpcResponse(500, "Missing name or maxNumber in region search request");
}
Hashtable responseData = new Hashtable();
string name = (string)requestData["name"];
int maxNumber = Convert.ToInt32((string)requestData["maxNumber"]);
if (maxNumber == 0 || name.Length < 3)
{
// either we didn't want any, or we were too unspecific
responseData["numFound"] = 0;
}
else
{
List<RegionProfileData> sims = m_gridDBService.GetRegions(name, maxNumber);
responseData["numFound"] = sims.Count;
for (int i = 0; i < sims.Count; ++i)
{
RegionProfileData sim = sims[i];
string prefix = "region" + i + ".";
responseData[prefix + "region_name"] = sim.regionName;
responseData[prefix + "region_UUID"] = sim.UUID.ToString();
responseData[prefix + "region_locx"] = sim.regionLocX.ToString();
responseData[prefix + "region_locy"] = sim.regionLocY.ToString();
responseData[prefix + "sim_ip"] = sim.serverIP.ToString();
responseData[prefix + "sim_port"] = sim.serverPort.ToString();
responseData[prefix + "remoting_port"] = sim.remotingPort.ToString();
responseData[prefix + "http_port"] = sim.httpPort.ToString();
responseData[prefix + "map_UUID"] = sim.regionMapTextureID.ToString();
}
}
XmlRpcResponse response = new XmlRpcResponse();
response.Value = responseData;
return response;
}
/// <summary>
/// Construct an XMLRPC registration disabled response
/// </summary>
/// <param name="error"></param>
/// <returns></returns>
public static XmlRpcResponse XmlRPCRegionRegistrationDisabledResponse(string error)
{
XmlRpcResponse errorResponse = new XmlRpcResponse();
Hashtable errorResponseData = new Hashtable();
errorResponse.Value = errorResponseData;
errorResponseData["restricted"] = error;
return errorResponse;
}
}
/// <summary>
/// Exception generated when a simulator fails to login to the grid
/// </summary>
public class LoginException : Exception
{
/// <summary>
/// Return an XmlRpcResponse version of the exception message suitable for sending to a client
/// </summary>
/// <param name="message"></param>
/// <param name="xmlRpcMessage"></param>
public XmlRpcResponse XmlRpcErrorResponse
{
get { return m_xmlRpcErrorResponse; }
}
private XmlRpcResponse m_xmlRpcErrorResponse;
public LoginException(string message, string xmlRpcMessage)
: base(message)
{
// FIXME: Might be neater to refactor and put the method inside here
m_xmlRpcErrorResponse = GridXmlRpcModule.ErrorResponse(xmlRpcMessage);
}
public LoginException(string message, string xmlRpcMessage, Exception e)
: base(message, e)
{
// FIXME: Might be neater to refactor and put the method inside here
m_xmlRpcErrorResponse = GridXmlRpcModule.ErrorResponse(xmlRpcMessage);
}
}
}

View File

@ -1,11 +0,0 @@
<Addin id="OpenSim.Grid.GridServer.Modules" version="0.1">
<Runtime>
<Import assembly="OpenSim.Grid.GridServer.Modules.dll"/>
</Runtime>
<Dependencies>
<Addin id="OpenSim.Grid.GridServer" version="0.5" />
</Dependencies>
<Extension path = "/OpenSim/GridServer">
<Plugin id="GridServerModules" type="OpenSim.Grid.GridServer.Modules.GridServerPlugin" />
</Extension>
</Addin>

View File

@ -1,170 +0,0 @@
/*
* 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.IO;
using System.Reflection;
using log4net;
using Nini.Config;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.GridServer
{
/// <summary>
/// </summary>
public class GridServerBase : BaseOpenSimServer, IGridServiceCore
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected GridConfig m_config;
public string m_consoleType = "local";
public IConfigSource m_configSource = null;
public string m_configFile = "GridServer_Config.xml";
public GridConfig Config
{
get { return m_config; }
}
public string Version
{
get { return m_version; }
}
protected List<IGridPlugin> m_plugins = new List<IGridPlugin>();
public void Work()
{
m_console.Output("Enter help for a list of commands\n");
while (true)
{
m_console.Prompt();
}
}
public GridServerBase()
{
}
protected override void StartupSpecific()
{
switch (m_consoleType)
{
case "rest":
m_console = new RemoteConsole("Grid");
break;
case "basic":
m_console = new CommandConsole("Grid");
break;
default:
m_console = new LocalConsole("Grid");
break;
}
MainConsole.Instance = m_console;
m_config = new GridConfig("GRID SERVER", (Path.Combine(Util.configDir(), m_configFile)));
m_log.Info("[GRID]: Starting HTTP process");
m_httpServer = new BaseHttpServer(m_config.HttpPort);
if (m_console is RemoteConsole)
{
RemoteConsole c = (RemoteConsole)m_console;
c.SetServer(m_httpServer);
IConfig netConfig = m_configSource.AddConfig("Network");
netConfig.Set("ConsoleUser", m_config.ConsoleUser);
netConfig.Set("ConsolePass", m_config.ConsolePass);
c.ReadConfig(m_configSource);
}
LoadPlugins();
m_httpServer.Start();
base.StartupSpecific();
}
protected virtual void LoadPlugins()
{
using (PluginLoader<IGridPlugin> loader = new PluginLoader<IGridPlugin>(new GridPluginInitialiser(this)))
{
loader.Load("/OpenSim/GridServer");
m_plugins = loader.Plugins;
}
}
public override void ShutdownSpecific()
{
foreach (IGridPlugin plugin in m_plugins) plugin.Dispose();
}
#region IServiceCore
protected Dictionary<Type, object> m_moduleInterfaces = new Dictionary<Type, object>();
/// <summary>
/// Register an Module interface.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="iface"></param>
public void RegisterInterface<T>(T iface)
{
lock (m_moduleInterfaces)
{
if (!m_moduleInterfaces.ContainsKey(typeof(T)))
{
m_moduleInterfaces.Add(typeof(T), iface);
}
}
}
public bool TryGet<T>(out T iface)
{
if (m_moduleInterfaces.ContainsKey(typeof(T)))
{
iface = (T)m_moduleInterfaces[typeof(T)];
return true;
}
iface = default(T);
return false;
}
public T Get<T>()
{
return (T)m_moduleInterfaces[typeof(T)];
}
public BaseHttpServer GetHttpServer()
{
return m_httpServer;
}
#endregion
}
}

View File

@ -1,49 +0,0 @@
/*
* 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 OpenSim.Framework;
namespace OpenSim.Grid.GridServer
{
public interface IGridPlugin : IPlugin
{
void Initialise(GridServerBase gridServer);
void PostInitialise();
}
public class GridPluginInitialiser : PluginInitialiserBase
{
private GridServerBase server;
public GridPluginInitialiser (GridServerBase s) { server = s; }
public override void Initialise (IPlugin plugin)
{
IGridPlugin p = plugin as IGridPlugin;
p.Initialise (server);
}
}
}

View File

@ -1,63 +0,0 @@
/*
* 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.Reflection;
using System.Runtime.InteropServices;
// General information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly : AssemblyTitle("OGS-GridServer")]
[assembly : AssemblyDescription("")]
[assembly : AssemblyConfiguration("")]
[assembly : AssemblyCompany("http://opensimulator.org")]
[assembly : AssemblyProduct("OGS-GridServer")]
[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
[assembly : AssemblyTrademark("")]
[assembly : AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly : ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly : Guid("b541b244-3d1d-4625-9003-bc2a3a6a39a4")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@ -1,16 +0,0 @@
<Combine name="OpenGridServices.Manager" fileversion="2.0" outputpath="../../mono-1.2.3.1/lib/monodevelop/bin" MakePkgConfig="False" MakeLibPC="True">
<Configurations active="Debug">
<Configuration name="Debug" ctype="CombineConfiguration">
<Entry build="True" name="OpenGridServices.Manager" configuration="Debug" />
</Configuration>
<Configuration name="Release" ctype="CombineConfiguration">
<Entry build="True" name="OpenGridServices.Manager" configuration="Release" />
</Configuration>
</Configurations>
<StartMode startupentry="OpenGridServices.Manager" single="True">
<Execute type="None" entry="OpenGridServices.Manager" />
</StartMode>
<Entries>
<Entry filename="./OpenGridServices.Manager/OpenGridServices.Manager.mdp" />
</Entries>
</Combine>

View File

@ -1,39 +0,0 @@
<?xml version="1.0"?>
<UserCombinePreferences filename="/home/gareth/OpenGridServices.Manager/OpenGridServices.Manager.mds">
<Files>
<File filename="Welcome" />
<File filename="./OpenGridServices.Manager/MainWindow.cs" />
<File filename="./OpenGridServices.Manager/ConnectToGridServerDialog.cs" />
<File filename="./OpenGridServices.Manager/Main.cs" />
</Files>
<Views>
<ViewMemento Id="MonoDevelop.Ide.Gui.Pads.ProjectPad">
<TreeView>
<Node expanded="True">
<Node name="OpenGridServices.Manager" expanded="True">
<Node name="References" expanded="True" />
<Node name="Resources" expanded="True" />
<Node name="UserInterface" expanded="True" />
<Node name="ConnectToGridServerDialog.cs" expanded="False" selected="True" />
</Node>
</Node>
</TreeView>
</ViewMemento>
<ViewMemento Id="MonoDevelop.Ide.Gui.Pads.ClassPad">
<TreeView>
<Node expanded="True" />
</TreeView>
</ViewMemento>
<ViewMemento Id="MonoDevelop.NUnit.TestPad">
<TreeView>
<Node expanded="False" />
</TreeView>
</ViewMemento>
</Views>
<Properties>
<Properties>
<Property key="ActiveConfiguration" value="Debug" />
<Property key="ActiveWindow" value="/home/gareth/OpenGridServices.Manager/OpenGridServices.Manager/ConnectToGridServerDialog.cs" />
</Properties>
</Properties>
</UserCombinePreferences>

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfUserTask xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

View File

@ -1,59 +0,0 @@
/*
* 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.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("0.6.3.*")]
// The following attributes specify the key for the sign of your assembly. See the
// .NET Framework documentation for more information about signing.
// This is not required, if you don't want signing let these attributes like they're.
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]

View File

@ -1,60 +0,0 @@
/*
* 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.Threading;
using System.Collections.Generic;
using System.Text;
namespace OpenGridServices.Manager
{
public class BlockingQueue<T>
{
private Queue<T> _queue = new Queue<T>();
private object _queueSync = new object();
public void Enqueue(T value)
{
lock (_queueSync)
{
_queue.Enqueue(value);
Monitor.Pulse(_queueSync);
}
}
public T Dequeue()
{
lock (_queueSync)
{
if (_queue.Count < 1)
Monitor.Wait(_queueSync);
return _queue.Dequeue();
}
}
}
}

View File

@ -1,39 +0,0 @@
/*
* 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;
namespace OpenGridServices.Manager
{
public partial class Connect to grid server : Gtk.Dialog
{
public Connect to grid server()
{
this.Build();
}
}
}

View File

@ -1,54 +0,0 @@
/*
* 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 Gtk;
using System;
namespace OpenGridServices.Manager
{
public partial class ConnectToGridServerDialog : Gtk.Dialog
{
public ConnectToGridServerDialog()
{
this.Build();
}
protected virtual void OnResponse(object o, Gtk.ResponseArgs args)
{
switch (args.ResponseId)
{
case Gtk.ResponseType.Ok:
MainClass.PendingOperations.Enqueue("connect_to_gridserver " + this.entry1.Text + " " + this.entry2.Text + " " + this.entry3.Text);
break;
case Gtk.ResponseType.Cancel:
break;
}
this.Hide();
}
}
}

View File

@ -1,146 +0,0 @@
/*
* 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 Nwc.XmlRpc;
using System;
using System.Net;
using System.IO;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using libsecondlife;
namespace OpenGridServices.Manager
{
public class GridServerConnectionManager
{
private string ServerURL;
public LLUUID SessionID;
public bool connected=false;
public RegionBlock[][] WorldMap;
public bool Connect(string GridServerURL, string username, string password)
{
try
{
this.ServerURL=GridServerURL;
Hashtable LoginParamsHT = new Hashtable();
LoginParamsHT["username"]=username;
LoginParamsHT["password"]=password;
ArrayList LoginParams = new ArrayList();
LoginParams.Add(LoginParamsHT);
XmlRpcRequest GridLoginReq = new XmlRpcRequest("manager_login",LoginParams);
XmlRpcResponse GridResp = GridLoginReq.Send(ServerURL,3000);
if (GridResp.IsFault)
{
connected=false;
return false;
}
else
{
Hashtable gridrespData = (Hashtable)GridResp.Value;
this.SessionID = new LLUUID((string)gridrespData["session_id"]);
connected=true;
return true;
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
connected=false;
return false;
}
}
public void DownloadMap()
{
System.Net.WebClient mapdownloader = new WebClient();
Stream regionliststream = mapdownloader.OpenRead(ServerURL + "/regionlist");
RegionBlock TempRegionData;
XmlDocument doc = new XmlDocument();
doc.Load(regionliststream);
regionliststream.Close();
XmlNode rootnode = doc.FirstChild;
if (rootnode.Name != "regions")
{
// TODO - ERROR!
}
for (int i = 0; i <= rootnode.ChildNodes.Count; i++)
{
if (rootnode.ChildNodes.Item(i).Name != "region")
{
// TODO - ERROR!
}
else
{
TempRegionData = new RegionBlock();
}
}
}
public bool RestartServer()
{
return true;
}
public bool ShutdownServer()
{
try
{
Hashtable ShutdownParamsHT = new Hashtable();
ArrayList ShutdownParams = new ArrayList();
ShutdownParamsHT["session_id"]=this.SessionID.ToString();
ShutdownParams.Add(ShutdownParamsHT);
XmlRpcRequest GridShutdownReq = new XmlRpcRequest("shutdown",ShutdownParams);
XmlRpcResponse GridResp = GridShutdownReq.Send(this.ServerURL, 3000);
if (GridResp.IsFault)
{
return false;
}
else
{
connected=false;
return true;
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
return false;
}
}
public void DisconnectServer()
{
this.connected=false;
}
}
}

View File

@ -1,132 +0,0 @@
/*
* 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.Threading;
using Gtk;
namespace OpenGridServices.Manager
{
class MainClass
{
public static bool QuitReq=false;
public static BlockingQueue<string> PendingOperations = new BlockingQueue<string>();
private static Thread OperationsRunner;
private static GridServerConnectionManager gridserverConn;
private static MainWindow win;
public static void DoMainLoop()
{
while (!QuitReq)
{
Application.RunIteration();
}
}
public static void RunOperations()
{
string operation;
string cmd;
char[] sep = new char[1];
sep[0]=' ';
while (!QuitReq)
{
operation=PendingOperations.Dequeue();
Console.WriteLine(operation);
cmd = operation.Split(sep)[0];
switch (cmd)
{
case "connect_to_gridserver":
win.SetStatus("Connecting to grid server...");
if (gridserverConn.Connect(operation.Split(sep)[1], operation.Split(sep)[2], operation.Split(sep)[3]))
{
win.SetStatus("Connected OK with session ID:" + gridserverConn.SessionID);
win.SetGridServerConnected(true);
Thread.Sleep(3000);
win.SetStatus("Downloading region maps...");
gridserverConn.DownloadMap();
}
else
{
win.SetStatus("Could not connect");
}
break;
case "restart_gridserver":
win.SetStatus("Restarting grid server...");
if (gridserverConn.RestartServer())
{
win.SetStatus("Restarted server OK");
Thread.Sleep(3000);
win.SetStatus("");
}
else
{
win.SetStatus("Error restarting grid server!!!");
}
break;
case "shutdown_gridserver":
win.SetStatus("Shutting down grid server...");
if (gridserverConn.ShutdownServer())
{
win.SetStatus("Grid server shutdown");
win.SetGridServerConnected(false);
Thread.Sleep(3000);
win.SetStatus("");
}
else
{
win.SetStatus("Could not shutdown grid server!!!");
}
break;
case "disconnect_gridserver":
gridserverConn.DisconnectServer();
win.SetGridServerConnected(false);
break;
}
}
}
public static void Main (string[] args)
{
gridserverConn = new GridServerConnectionManager();
Application.Init ();
win = new MainWindow ();
win.Show ();
OperationsRunner = new Thread(new ThreadStart(RunOperations));
OperationsRunner.IsBackground=true;
OperationsRunner.Start();
DoMainLoop();
}
}
}

View File

@ -1,106 +0,0 @@
/*
* 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 Gtk;
namespace OpenGridServices.Manager
{
public partial class MainWindow: Gtk.Window
{
public MainWindow() : base (Gtk.WindowType.Toplevel)
{
Build();
}
public void SetStatus(string statustext)
{
this.statusbar1.Pop(0);
this.statusbar1.Push(0, statustext);
}
public void DrawGrid(RegionBlock[][] regions)
{
for (int x=0; x<=regions.GetUpperBound(0); x++)
{
for (int y=0; y<=regions.GetUpperBound(1); y++)
{
Gdk.Image themap = new Gdk.Image(Gdk.ImageType.Fastest,Gdk.Visual.System,256,256);
this.drawingarea1.GdkWindow.DrawImage(new Gdk.GC(this.drawingarea1.GdkWindow),themap,0,0,x*256,y*256,256,256);
}
}
}
public void SetGridServerConnected(bool connected)
{
if (connected)
{
this.ConnectToGridserver.Visible=false;
this.DisconnectFromGridServer.Visible=true;
}
else
{
this.ConnectToGridserver.Visible=true;
this.DisconnectFromGridServer.Visible=false;
}
}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
MainClass.QuitReq=true;
a.RetVal = true;
}
protected virtual void QuitMenu(object sender, System.EventArgs e)
{
MainClass.QuitReq=true;
Application.Quit();
}
protected virtual void ConnectToGridServerMenu(object sender, System.EventArgs e)
{
ConnectToGridServerDialog griddialog = new ConnectToGridServerDialog ();
griddialog.Show();
}
protected virtual void RestartGridserverMenu(object sender, System.EventArgs e)
{
MainClass.PendingOperations.Enqueue("restart_gridserver");
}
protected virtual void ShutdownGridserverMenu(object sender, System.EventArgs e)
{
MainClass.PendingOperations.Enqueue("shutdown_gridserver");
}
protected virtual void DisconnectGridServerMenu(object sender, System.EventArgs e)
{
MainClass.PendingOperations.Enqueue("disconnect_gridserver");
}
}
}

View File

@ -1,62 +0,0 @@
/*
* 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.Xml;
using libsecondlife;
using OpenSim.Framework.Utilities;
namespace OpenGridServices.Manager
{
public class RegionBlock
{
public uint regloc_x;
public uint regloc_y;
public string httpd_url;
public string region_name;
public ulong regionhandle {
get { return Util.UIntsToLong(regloc_x*256,regloc_y*256); }
}
public Gdk.Pixbuf MiniMap;
public RegionBlock()
{
}
public void LoadFromXmlNode(XmlNode sourcenode)
{
this.regloc_x=Convert.ToUInt32(sourcenode.Attributes.GetNamedItem("loc_x").Value);
this.regloc_y=Convert.ToUInt32(sourcenode.Attributes.GetNamedItem("loc_y").Value);
this.region_name=sourcenode.Attributes.GetNamedItem("region_name").Value;
this.httpd_url=sourcenode.Attributes.GetNamedItem("httpd_url").Value;
}
}
}

View File

@ -1,160 +0,0 @@
/*
* 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.Text;
using libsecondlife;
using libsecondlife.Packets;
namespace OpenSim.Framework.Utilities
{
public class Util
{
private static Random randomClass = new Random();
private static uint nextXferID = 5000;
private static object XferLock = new object();
public static ulong UIntsToLong(uint X, uint Y)
{
return Helpers.UIntsToLong(X, Y);
}
public static Random RandomClass
{
get
{
return randomClass;
}
}
public static uint GetNextXferID()
{
uint id = 0;
lock (XferLock)
{
id = nextXferID;
nextXferID++;
}
return id;
}
//public static int fast_distance2d(int x, int y)
//{
// x = System.Math.Abs(x);
// y = System.Math.Abs(y);
// int min = System.Math.Min(x, y);
// return (x + y - (min >> 1) - (min >> 2) + (min >> 4));
//}
public static string FieldToString(byte[] bytes)
{
return FieldToString(bytes, String.Empty);
}
/// <summary>
/// Convert a variable length field (byte array) to a string, with a
/// field name prepended to each line of the output
/// </summary>
/// <remarks>If the byte array has unprintable characters in it, a
/// hex dump will be put in the string instead</remarks>
/// <param name="bytes">The byte array to convert to a string</param>
/// <param name="fieldName">A field name to prepend to each line of output</param>
/// <returns>An ASCII string or a string containing a hex dump, minus
/// the null terminator</returns>
public static string FieldToString(byte[] bytes, string fieldName)
{
// Check for a common case
if (bytes.Length == 0) return String.Empty;
StringBuilder output = new StringBuilder();
bool printable = true;
for (int i = 0; i < bytes.Length; ++i)
{
// Check if there are any unprintable characters in the array
if ((bytes[i] < 0x20 || bytes[i] > 0x7E) && bytes[i] != 0x09
&& bytes[i] != 0x0D && bytes[i] != 0x0A && bytes[i] != 0x00)
{
printable = false;
break;
}
}
if (printable)
{
if (fieldName.Length > 0)
{
output.Append(fieldName);
output.Append(": ");
}
if (bytes[bytes.Length - 1] == 0x00)
output.Append(UTF8Encoding.UTF8.GetString(bytes, 0, bytes.Length - 1));
else
output.Append(UTF8Encoding.UTF8.GetString(bytes));
}
else
{
for (int i = 0; i < bytes.Length; i += 16)
{
if (i != 0)
output.Append(Environment.NewLine);
if (fieldName.Length > 0)
{
output.Append(fieldName);
output.Append(": ");
}
for (int j = 0; j < 16; j++)
{
if ((i + j) < bytes.Length)
output.Append(String.Format("{0:X2} ", bytes[i + j]));
else
output.Append(" ");
}
for (int j = 0; j < 16 && (i + j) < bytes.Length; j++)
{
if (bytes[i + j] >= 0x20 && bytes[i + j] < 0x7E)
output.Append((char)bytes[i + j]);
else
output.Append(".");
}
}
}
return output.ToString();
}
public Util()
{
}
}
}

View File

@ -1,242 +0,0 @@
/*
* 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.
*/
// ------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Mono Runtime Version: 2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
// ------------------------------------------------------------------------------
namespace OpenGridServices.Manager
{
public partial class ConnectToGridServerDialog
{
private Gtk.VBox vbox2;
private Gtk.VBox vbox3;
private Gtk.HBox hbox1;
private Gtk.Label label1;
private Gtk.Entry entry1;
private Gtk.HBox hbox2;
private Gtk.Label label2;
private Gtk.Entry entry2;
private Gtk.HBox hbox3;
private Gtk.Label label3;
private Gtk.Entry entry3;
private Gtk.Button button2;
private Gtk.Button button8;
protected virtual void Build()
{
Stetic.Gui.Initialize();
// Widget OpenGridServices.Manager.ConnectToGridServerDialog
this.Events = ((Gdk.EventMask)(256));
this.Name = "OpenGridServices.Manager.ConnectToGridServerDialog";
this.Title = Mono.Unix.Catalog.GetString("Connect to Grid server");
this.WindowPosition = ((Gtk.WindowPosition)(4));
this.HasSeparator = false;
// Internal child OpenGridServices.Manager.ConnectToGridServerDialog.VBox
Gtk.VBox w1 = this.VBox;
w1.Events = ((Gdk.EventMask)(256));
w1.Name = "dialog_VBox";
w1.BorderWidth = ((uint)(2));
// Container child dialog_VBox.Gtk.Box+BoxChild
this.vbox2 = new Gtk.VBox();
this.vbox2.Name = "vbox2";
// Container child vbox2.Gtk.Box+BoxChild
this.vbox3 = new Gtk.VBox();
this.vbox3.Name = "vbox3";
// Container child vbox3.Gtk.Box+BoxChild
this.hbox1 = new Gtk.HBox();
this.hbox1.Name = "hbox1";
// Container child hbox1.Gtk.Box+BoxChild
this.label1 = new Gtk.Label();
this.label1.Name = "label1";
this.label1.Xalign = 1F;
this.label1.LabelProp = Mono.Unix.Catalog.GetString("Grid server URL: ");
this.label1.Justify = ((Gtk.Justification)(1));
this.hbox1.Add(this.label1);
Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.hbox1[this.label1]));
w2.Position = 0;
// Container child hbox1.Gtk.Box+BoxChild
this.entry1 = new Gtk.Entry();
this.entry1.CanFocus = true;
this.entry1.Name = "entry1";
this.entry1.Text = Mono.Unix.Catalog.GetString("http://gridserver:8001");
this.entry1.IsEditable = true;
this.entry1.MaxLength = 255;
this.entry1.InvisibleChar = '•';
this.hbox1.Add(this.entry1);
Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.hbox1[this.entry1]));
w3.Position = 1;
this.vbox3.Add(this.hbox1);
Gtk.Box.BoxChild w4 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox1]));
w4.Position = 0;
w4.Expand = false;
w4.Fill = false;
// Container child vbox3.Gtk.Box+BoxChild
this.hbox2 = new Gtk.HBox();
this.hbox2.Name = "hbox2";
// Container child hbox2.Gtk.Box+BoxChild
this.label2 = new Gtk.Label();
this.label2.Name = "label2";
this.label2.Xalign = 1F;
this.label2.LabelProp = Mono.Unix.Catalog.GetString("Username:");
this.label2.Justify = ((Gtk.Justification)(1));
this.hbox2.Add(this.label2);
Gtk.Box.BoxChild w5 = ((Gtk.Box.BoxChild)(this.hbox2[this.label2]));
w5.Position = 0;
// Container child hbox2.Gtk.Box+BoxChild
this.entry2 = new Gtk.Entry();
this.entry2.CanFocus = true;
this.entry2.Name = "entry2";
this.entry2.IsEditable = true;
this.entry2.InvisibleChar = '•';
this.hbox2.Add(this.entry2);
Gtk.Box.BoxChild w6 = ((Gtk.Box.BoxChild)(this.hbox2[this.entry2]));
w6.Position = 1;
this.vbox3.Add(this.hbox2);
Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox2]));
w7.Position = 1;
w7.Expand = false;
w7.Fill = false;
// Container child vbox3.Gtk.Box+BoxChild
this.hbox3 = new Gtk.HBox();
this.hbox3.Name = "hbox3";
// Container child hbox3.Gtk.Box+BoxChild
this.label3 = new Gtk.Label();
this.label3.Name = "label3";
this.label3.Xalign = 1F;
this.label3.LabelProp = Mono.Unix.Catalog.GetString("Password:");
this.label3.Justify = ((Gtk.Justification)(1));
this.hbox3.Add(this.label3);
Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.hbox3[this.label3]));
w8.Position = 0;
// Container child hbox3.Gtk.Box+BoxChild
this.entry3 = new Gtk.Entry();
this.entry3.CanFocus = true;
this.entry3.Name = "entry3";
this.entry3.IsEditable = true;
this.entry3.InvisibleChar = '•';
this.hbox3.Add(this.entry3);
Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.hbox3[this.entry3]));
w9.Position = 1;
this.vbox3.Add(this.hbox3);
Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox3[this.hbox3]));
w10.Position = 2;
w10.Expand = false;
w10.Fill = false;
this.vbox2.Add(this.vbox3);
Gtk.Box.BoxChild w11 = ((Gtk.Box.BoxChild)(this.vbox2[this.vbox3]));
w11.Position = 2;
w11.Expand = false;
w11.Fill = false;
w1.Add(this.vbox2);
Gtk.Box.BoxChild w12 = ((Gtk.Box.BoxChild)(w1[this.vbox2]));
w12.Position = 0;
// Internal child OpenGridServices.Manager.ConnectToGridServerDialog.ActionArea
Gtk.HButtonBox w13 = this.ActionArea;
w13.Events = ((Gdk.EventMask)(256));
w13.Name = "OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea";
w13.Spacing = 6;
w13.BorderWidth = ((uint)(5));
w13.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
// Container child OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild
this.button2 = new Gtk.Button();
this.button2.CanDefault = true;
this.button2.CanFocus = true;
this.button2.Name = "button2";
this.button2.UseUnderline = true;
// Container child button2.Gtk.Container+ContainerChild
Gtk.Alignment w14 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
w14.Name = "GtkAlignment";
// Container child GtkAlignment.Gtk.Container+ContainerChild
Gtk.HBox w15 = new Gtk.HBox();
w15.Name = "GtkHBox";
w15.Spacing = 2;
// Container child GtkHBox.Gtk.Container+ContainerChild
Gtk.Image w16 = new Gtk.Image();
w16.Name = "image1";
w16.Pixbuf = Gtk.IconTheme.Default.LoadIcon("gtk-apply", 16, 0);
w15.Add(w16);
// Container child GtkHBox.Gtk.Container+ContainerChild
Gtk.Label w18 = new Gtk.Label();
w18.Name = "GtkLabel";
w18.LabelProp = Mono.Unix.Catalog.GetString("Connect");
w18.UseUnderline = true;
w15.Add(w18);
w14.Add(w15);
this.button2.Add(w14);
this.AddActionWidget(this.button2, -5);
Gtk.ButtonBox.ButtonBoxChild w22 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.button2]));
w22.Expand = false;
w22.Fill = false;
// Container child OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea.Gtk.ButtonBox+ButtonBoxChild
this.button8 = new Gtk.Button();
this.button8.CanDefault = true;
this.button8.CanFocus = true;
this.button8.Name = "button8";
this.button8.UseUnderline = true;
// Container child button8.Gtk.Container+ContainerChild
Gtk.Alignment w23 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
w23.Name = "GtkAlignment1";
// Container child GtkAlignment1.Gtk.Container+ContainerChild
Gtk.HBox w24 = new Gtk.HBox();
w24.Name = "GtkHBox1";
w24.Spacing = 2;
// Container child GtkHBox1.Gtk.Container+ContainerChild
Gtk.Image w25 = new Gtk.Image();
w25.Name = "image2";
w25.Pixbuf = Gtk.IconTheme.Default.LoadIcon("gtk-cancel", 16, 0);
w24.Add(w25);
// Container child GtkHBox1.Gtk.Container+ContainerChild
Gtk.Label w27 = new Gtk.Label();
w27.Name = "GtkLabel1";
w27.LabelProp = Mono.Unix.Catalog.GetString("Cancel");
w27.UseUnderline = true;
w24.Add(w27);
w23.Add(w24);
this.button8.Add(w23);
this.AddActionWidget(this.button8, -6);
Gtk.ButtonBox.ButtonBoxChild w31 = ((Gtk.ButtonBox.ButtonBoxChild)(w13[this.button8]));
w31.Position = 1;
w31.Expand = false;
w31.Fill = false;
if (this.Child != null)
{
this.Child.ShowAll();
}
this.DefaultWidth = 476;
this.DefaultHeight = 137;
this.Show();
this.Response += new Gtk.ResponseHandler(this.OnResponse);
}
}
}

View File

@ -1,250 +0,0 @@
/*
* 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.
*/
// ------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Mono Runtime Version: 2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
// ------------------------------------------------------------------------------
namespace OpenGridServices.Manager
{
public partial class MainWindow
{
private Gtk.Action Grid;
private Gtk.Action User;
private Gtk.Action Asset;
private Gtk.Action Region;
private Gtk.Action Services;
private Gtk.Action ConnectToGridserver;
private Gtk.Action RestartWholeGrid;
private Gtk.Action ShutdownWholeGrid;
private Gtk.Action ExitGridManager;
private Gtk.Action ConnectToUserserver;
private Gtk.Action AccountManagment;
private Gtk.Action GlobalNotice;
private Gtk.Action DisableAllLogins;
private Gtk.Action DisableNonGodUsersOnly;
private Gtk.Action ShutdownUserServer;
private Gtk.Action ShutdownGridserverOnly;
private Gtk.Action RestartGridserverOnly;
private Gtk.Action DefaultLocalGridUserserver;
private Gtk.Action CustomUserserver;
private Gtk.Action RemoteGridDefaultUserserver;
private Gtk.Action DisconnectFromGridServer;
private Gtk.Action UploadAsset;
private Gtk.Action AssetManagement;
private Gtk.Action ConnectToAssetServer;
private Gtk.Action ConnectToDefaultAssetServerForGrid;
private Gtk.Action DefaultForLocalGrid;
private Gtk.Action DefaultForRemoteGrid;
private Gtk.Action CustomAssetServer;
private Gtk.VBox vbox1;
private Gtk.MenuBar menubar2;
private Gtk.HBox hbox1;
private Gtk.ScrolledWindow scrolledwindow1;
private Gtk.DrawingArea drawingarea1;
private Gtk.TreeView treeview1;
private Gtk.Statusbar statusbar1;
protected virtual void Build()
{
Stetic.Gui.Initialize();
// Widget OpenGridServices.Manager.MainWindow
Gtk.UIManager w1 = new Gtk.UIManager();
Gtk.ActionGroup w2 = new Gtk.ActionGroup("Default");
this.Grid = new Gtk.Action("Grid", Mono.Unix.Catalog.GetString("Grid"), null, null);
this.Grid.HideIfEmpty = false;
this.Grid.ShortLabel = Mono.Unix.Catalog.GetString("Grid");
w2.Add(this.Grid, "<Alt><Mod2>g");
this.User = new Gtk.Action("User", Mono.Unix.Catalog.GetString("User"), null, null);
this.User.HideIfEmpty = false;
this.User.ShortLabel = Mono.Unix.Catalog.GetString("User");
w2.Add(this.User, null);
this.Asset = new Gtk.Action("Asset", Mono.Unix.Catalog.GetString("Asset"), null, null);
this.Asset.HideIfEmpty = false;
this.Asset.ShortLabel = Mono.Unix.Catalog.GetString("Asset");
w2.Add(this.Asset, null);
this.Region = new Gtk.Action("Region", Mono.Unix.Catalog.GetString("Region"), null, null);
this.Region.ShortLabel = Mono.Unix.Catalog.GetString("Region");
w2.Add(this.Region, null);
this.Services = new Gtk.Action("Services", Mono.Unix.Catalog.GetString("Services"), null, null);
this.Services.ShortLabel = Mono.Unix.Catalog.GetString("Services");
w2.Add(this.Services, null);
this.ConnectToGridserver = new Gtk.Action("ConnectToGridserver", Mono.Unix.Catalog.GetString("Connect to gridserver..."), null, "gtk-connect");
this.ConnectToGridserver.HideIfEmpty = false;
this.ConnectToGridserver.ShortLabel = Mono.Unix.Catalog.GetString("Connect to gridserver");
w2.Add(this.ConnectToGridserver, null);
this.RestartWholeGrid = new Gtk.Action("RestartWholeGrid", Mono.Unix.Catalog.GetString("Restart whole grid"), null, "gtk-refresh");
this.RestartWholeGrid.ShortLabel = Mono.Unix.Catalog.GetString("Restart whole grid");
w2.Add(this.RestartWholeGrid, null);
this.ShutdownWholeGrid = new Gtk.Action("ShutdownWholeGrid", Mono.Unix.Catalog.GetString("Shutdown whole grid"), null, "gtk-stop");
this.ShutdownWholeGrid.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown whole grid");
w2.Add(this.ShutdownWholeGrid, null);
this.ExitGridManager = new Gtk.Action("ExitGridManager", Mono.Unix.Catalog.GetString("Exit grid manager"), null, "gtk-close");
this.ExitGridManager.ShortLabel = Mono.Unix.Catalog.GetString("Exit grid manager");
w2.Add(this.ExitGridManager, null);
this.ConnectToUserserver = new Gtk.Action("ConnectToUserserver", Mono.Unix.Catalog.GetString("Connect to userserver"), null, "gtk-connect");
this.ConnectToUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Connect to userserver");
w2.Add(this.ConnectToUserserver, null);
this.AccountManagment = new Gtk.Action("AccountManagment", Mono.Unix.Catalog.GetString("Account managment"), null, "gtk-properties");
this.AccountManagment.ShortLabel = Mono.Unix.Catalog.GetString("Account managment");
w2.Add(this.AccountManagment, null);
this.GlobalNotice = new Gtk.Action("GlobalNotice", Mono.Unix.Catalog.GetString("Global notice"), null, "gtk-network");
this.GlobalNotice.ShortLabel = Mono.Unix.Catalog.GetString("Global notice");
w2.Add(this.GlobalNotice, null);
this.DisableAllLogins = new Gtk.Action("DisableAllLogins", Mono.Unix.Catalog.GetString("Disable all logins"), null, "gtk-no");
this.DisableAllLogins.ShortLabel = Mono.Unix.Catalog.GetString("Disable all logins");
w2.Add(this.DisableAllLogins, null);
this.DisableNonGodUsersOnly = new Gtk.Action("DisableNonGodUsersOnly", Mono.Unix.Catalog.GetString("Disable non-god users only"), null, "gtk-no");
this.DisableNonGodUsersOnly.ShortLabel = Mono.Unix.Catalog.GetString("Disable non-god users only");
w2.Add(this.DisableNonGodUsersOnly, null);
this.ShutdownUserServer = new Gtk.Action("ShutdownUserServer", Mono.Unix.Catalog.GetString("Shutdown user server"), null, "gtk-stop");
this.ShutdownUserServer.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown user server");
w2.Add(this.ShutdownUserServer, null);
this.ShutdownGridserverOnly = new Gtk.Action("ShutdownGridserverOnly", Mono.Unix.Catalog.GetString("Shutdown gridserver only"), null, "gtk-stop");
this.ShutdownGridserverOnly.ShortLabel = Mono.Unix.Catalog.GetString("Shutdown gridserver only");
w2.Add(this.ShutdownGridserverOnly, null);
this.RestartGridserverOnly = new Gtk.Action("RestartGridserverOnly", Mono.Unix.Catalog.GetString("Restart gridserver only"), null, "gtk-refresh");
this.RestartGridserverOnly.ShortLabel = Mono.Unix.Catalog.GetString("Restart gridserver only");
w2.Add(this.RestartGridserverOnly, null);
this.DefaultLocalGridUserserver = new Gtk.Action("DefaultLocalGridUserserver", Mono.Unix.Catalog.GetString("Default local grid userserver"), null, null);
this.DefaultLocalGridUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Default local grid userserver");
w2.Add(this.DefaultLocalGridUserserver, null);
this.CustomUserserver = new Gtk.Action("CustomUserserver", Mono.Unix.Catalog.GetString("Custom userserver..."), null, null);
this.CustomUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Custom userserver");
w2.Add(this.CustomUserserver, null);
this.RemoteGridDefaultUserserver = new Gtk.Action("RemoteGridDefaultUserserver", Mono.Unix.Catalog.GetString("Remote grid default userserver..."), null, null);
this.RemoteGridDefaultUserserver.ShortLabel = Mono.Unix.Catalog.GetString("Remote grid default userserver");
w2.Add(this.RemoteGridDefaultUserserver, null);
this.DisconnectFromGridServer = new Gtk.Action("DisconnectFromGridServer", Mono.Unix.Catalog.GetString("Disconnect from grid server"), null, "gtk-disconnect");
this.DisconnectFromGridServer.ShortLabel = Mono.Unix.Catalog.GetString("Disconnect from grid server");
this.DisconnectFromGridServer.Visible = false;
w2.Add(this.DisconnectFromGridServer, null);
this.UploadAsset = new Gtk.Action("UploadAsset", Mono.Unix.Catalog.GetString("Upload asset"), null, null);
this.UploadAsset.ShortLabel = Mono.Unix.Catalog.GetString("Upload asset");
w2.Add(this.UploadAsset, null);
this.AssetManagement = new Gtk.Action("AssetManagement", Mono.Unix.Catalog.GetString("Asset management"), null, null);
this.AssetManagement.ShortLabel = Mono.Unix.Catalog.GetString("Asset management");
w2.Add(this.AssetManagement, null);
this.ConnectToAssetServer = new Gtk.Action("ConnectToAssetServer", Mono.Unix.Catalog.GetString("Connect to asset server"), null, null);
this.ConnectToAssetServer.ShortLabel = Mono.Unix.Catalog.GetString("Connect to asset server");
w2.Add(this.ConnectToAssetServer, null);
this.ConnectToDefaultAssetServerForGrid = new Gtk.Action("ConnectToDefaultAssetServerForGrid", Mono.Unix.Catalog.GetString("Connect to default asset server for grid"), null, null);
this.ConnectToDefaultAssetServerForGrid.ShortLabel = Mono.Unix.Catalog.GetString("Connect to default asset server for grid");
w2.Add(this.ConnectToDefaultAssetServerForGrid, null);
this.DefaultForLocalGrid = new Gtk.Action("DefaultForLocalGrid", Mono.Unix.Catalog.GetString("Default for local grid"), null, null);
this.DefaultForLocalGrid.ShortLabel = Mono.Unix.Catalog.GetString("Default for local grid");
w2.Add(this.DefaultForLocalGrid, null);
this.DefaultForRemoteGrid = new Gtk.Action("DefaultForRemoteGrid", Mono.Unix.Catalog.GetString("Default for remote grid..."), null, null);
this.DefaultForRemoteGrid.ShortLabel = Mono.Unix.Catalog.GetString("Default for remote grid...");
w2.Add(this.DefaultForRemoteGrid, null);
this.CustomAssetServer = new Gtk.Action("CustomAssetServer", Mono.Unix.Catalog.GetString("Custom asset server..."), null, null);
this.CustomAssetServer.ShortLabel = Mono.Unix.Catalog.GetString("Custom asset server...");
w2.Add(this.CustomAssetServer, null);
w1.InsertActionGroup(w2, 0);
this.AddAccelGroup(w1.AccelGroup);
this.WidthRequest = 800;
this.HeightRequest = 600;
this.Name = "OpenGridServices.Manager.MainWindow";
this.Title = Mono.Unix.Catalog.GetString("Open Grid Services Manager");
this.Icon = Gtk.IconTheme.Default.LoadIcon("gtk-network", 48, 0);
// Container child OpenGridServices.Manager.MainWindow.Gtk.Container+ContainerChild
this.vbox1 = new Gtk.VBox();
this.vbox1.Name = "vbox1";
// Container child vbox1.Gtk.Box+BoxChild
w1.AddUiFromString("<ui><menubar name='menubar2'><menu action='Grid'><menuitem action='ConnectToGridserver'/><menuitem action='DisconnectFromGridServer'/><separator/><menuitem action='RestartWholeGrid'/><menuitem action='RestartGridserverOnly'/><separator/><menuitem action='ShutdownWholeGrid'/><menuitem action='ShutdownGridserverOnly'/><separator/><menuitem action='ExitGridManager'/></menu><menu action='User'><menu action='ConnectToUserserver'><menuitem action='DefaultLocalGridUserserver'/><menuitem action='CustomUserserver'/><menuitem action='RemoteGridDefaultUserserver'/></menu><separator/><menuitem action='AccountManagment'/><menuitem action='GlobalNotice'/><separator/><menuitem action='DisableAllLogins'/><menuitem action='DisableNonGodUsersOnly'/><separator/><menuitem action='ShutdownUserServer'/></menu><menu action='Asset'><menuitem action='UploadAsset'/><menuitem action='AssetManagement'/><menu action='ConnectToAssetServer'><menuitem action='DefaultForLocalGrid'/><menuitem action='DefaultForRemoteGrid'/><menuitem action='CustomAssetServer'/></menu></menu><menu action='Region'/><menu action='Services'/></menubar></ui>");
this.menubar2 = ((Gtk.MenuBar)(w1.GetWidget("/menubar2")));
this.menubar2.HeightRequest = 25;
this.menubar2.Name = "menubar2";
this.vbox1.Add(this.menubar2);
Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.vbox1[this.menubar2]));
w3.Position = 0;
w3.Expand = false;
w3.Fill = false;
// Container child vbox1.Gtk.Box+BoxChild
this.hbox1 = new Gtk.HBox();
this.hbox1.Name = "hbox1";
// Container child hbox1.Gtk.Box+BoxChild
this.scrolledwindow1 = new Gtk.ScrolledWindow();
this.scrolledwindow1.CanFocus = true;
this.scrolledwindow1.Name = "scrolledwindow1";
this.scrolledwindow1.VscrollbarPolicy = ((Gtk.PolicyType)(1));
this.scrolledwindow1.HscrollbarPolicy = ((Gtk.PolicyType)(1));
// Container child scrolledwindow1.Gtk.Container+ContainerChild
Gtk.Viewport w4 = new Gtk.Viewport();
w4.Name = "GtkViewport";
w4.ShadowType = ((Gtk.ShadowType)(0));
// Container child GtkViewport.Gtk.Container+ContainerChild
this.drawingarea1 = new Gtk.DrawingArea();
this.drawingarea1.Name = "drawingarea1";
w4.Add(this.drawingarea1);
this.scrolledwindow1.Add(w4);
this.hbox1.Add(this.scrolledwindow1);
Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.hbox1[this.scrolledwindow1]));
w7.Position = 1;
// Container child hbox1.Gtk.Box+BoxChild
this.treeview1 = new Gtk.TreeView();
this.treeview1.CanFocus = true;
this.treeview1.Name = "treeview1";
this.hbox1.Add(this.treeview1);
Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.hbox1[this.treeview1]));
w8.Position = 2;
this.vbox1.Add(this.hbox1);
Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.vbox1[this.hbox1]));
w9.Position = 1;
// Container child vbox1.Gtk.Box+BoxChild
this.statusbar1 = new Gtk.Statusbar();
this.statusbar1.Name = "statusbar1";
this.statusbar1.Spacing = 5;
this.vbox1.Add(this.statusbar1);
Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox1[this.statusbar1]));
w10.PackType = ((Gtk.PackType)(1));
w10.Position = 2;
w10.Expand = false;
w10.Fill = false;
this.Add(this.vbox1);
if (this.Child != null)
{
this.Child.ShowAll();
}
this.DefaultWidth = 800;
this.DefaultHeight = 800;
this.Show();
this.DeleteEvent += new Gtk.DeleteEventHandler(this.OnDeleteEvent);
this.ConnectToGridserver.Activated += new System.EventHandler(this.ConnectToGridServerMenu);
this.ExitGridManager.Activated += new System.EventHandler(this.QuitMenu);
this.ShutdownGridserverOnly.Activated += new System.EventHandler(this.ShutdownGridserverMenu);
this.RestartGridserverOnly.Activated += new System.EventHandler(this.RestartGridserverMenu);
this.DisconnectFromGridServer.Activated += new System.EventHandler(this.DisconnectGridServerMenu);
}
}
}

View File

@ -1,62 +0,0 @@
/*
* 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.
*/
// ------------------------------------------------------------------------------
// <autogenerated>
// This code was generated by a tool.
// Mono Runtime Version: 2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </autogenerated>
// ------------------------------------------------------------------------------
namespace Stetic
{
internal class Gui
{
private static bool initialized;
internal static void Initialize()
{
Stetic.Gui.initialized = true;
}
}
internal class ActionGroups
{
public static Gtk.ActionGroup GetActionGroup(System.Type type)
{
return Stetic.ActionGroups.GetActionGroup(type.FullName);
}
public static Gtk.ActionGroup GetActionGroup(string name)
{
return null;
}
}
}

View File

@ -1,502 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<stetic-interface>
<widget class="Gtk.Window" id="OpenGridServices.Manager.MainWindow" design-size="800 800">
<action-group name="Default">
<action id="Grid">
<property name="Type">Action</property>
<property name="Accelerator">&lt;Alt&gt;&lt;Mod2&gt;g</property>
<property name="HideIfEmpty">False</property>
<property name="Label" translatable="yes">Grid</property>
<property name="ShortLabel" translatable="yes">Grid</property>
</action>
<action id="User">
<property name="Type">Action</property>
<property name="HideIfEmpty">False</property>
<property name="Label" translatable="yes">User</property>
<property name="ShortLabel" translatable="yes">User</property>
</action>
<action id="Asset">
<property name="Type">Action</property>
<property name="HideIfEmpty">False</property>
<property name="Label" translatable="yes">Asset</property>
<property name="ShortLabel" translatable="yes">Asset</property>
</action>
<action id="Region">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Region</property>
<property name="ShortLabel" translatable="yes">Region</property>
</action>
<action id="Services">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Services</property>
<property name="ShortLabel" translatable="yes">Services</property>
</action>
<action id="ConnectToGridserver">
<property name="Type">Action</property>
<property name="HideIfEmpty">False</property>
<property name="Label" translatable="yes">Connect to gridserver...</property>
<property name="ShortLabel" translatable="yes">Connect to gridserver</property>
<property name="StockId">gtk-connect</property>
<signal name="Activated" handler="ConnectToGridServerMenu" />
</action>
<action id="RestartWholeGrid">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Restart whole grid</property>
<property name="ShortLabel" translatable="yes">Restart whole grid</property>
<property name="StockId">gtk-refresh</property>
</action>
<action id="ShutdownWholeGrid">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Shutdown whole grid</property>
<property name="ShortLabel" translatable="yes">Shutdown whole grid</property>
<property name="StockId">gtk-stop</property>
</action>
<action id="ExitGridManager">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Exit grid manager</property>
<property name="ShortLabel" translatable="yes">Exit grid manager</property>
<property name="StockId">gtk-close</property>
<signal name="Activated" handler="QuitMenu" after="yes" />
</action>
<action id="ConnectToUserserver">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Connect to userserver</property>
<property name="ShortLabel" translatable="yes">Connect to userserver</property>
<property name="StockId">gtk-connect</property>
</action>
<action id="AccountManagment">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Account managment</property>
<property name="ShortLabel" translatable="yes">Account managment</property>
<property name="StockId">gtk-properties</property>
</action>
<action id="GlobalNotice">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Global notice</property>
<property name="ShortLabel" translatable="yes">Global notice</property>
<property name="StockId">gtk-network</property>
</action>
<action id="DisableAllLogins">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Disable all logins</property>
<property name="ShortLabel" translatable="yes">Disable all logins</property>
<property name="StockId">gtk-no</property>
</action>
<action id="DisableNonGodUsersOnly">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Disable non-god users only</property>
<property name="ShortLabel" translatable="yes">Disable non-god users only</property>
<property name="StockId">gtk-no</property>
</action>
<action id="ShutdownUserServer">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Shutdown user server</property>
<property name="ShortLabel" translatable="yes">Shutdown user server</property>
<property name="StockId">gtk-stop</property>
</action>
<action id="ShutdownGridserverOnly">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Shutdown gridserver only</property>
<property name="ShortLabel" translatable="yes">Shutdown gridserver only</property>
<property name="StockId">gtk-stop</property>
<signal name="Activated" handler="ShutdownGridserverMenu" after="yes" />
</action>
<action id="RestartGridserverOnly">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Restart gridserver only</property>
<property name="ShortLabel" translatable="yes">Restart gridserver only</property>
<property name="StockId">gtk-refresh</property>
<signal name="Activated" handler="RestartGridserverMenu" after="yes" />
</action>
<action id="DefaultLocalGridUserserver">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Default local grid userserver</property>
<property name="ShortLabel" translatable="yes">Default local grid userserver</property>
</action>
<action id="CustomUserserver">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Custom userserver...</property>
<property name="ShortLabel" translatable="yes">Custom userserver</property>
</action>
<action id="RemoteGridDefaultUserserver">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Remote grid default userserver...</property>
<property name="ShortLabel" translatable="yes">Remote grid default userserver</property>
</action>
<action id="DisconnectFromGridServer">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Disconnect from grid server</property>
<property name="ShortLabel" translatable="yes">Disconnect from grid server</property>
<property name="StockId">gtk-disconnect</property>
<property name="Visible">False</property>
<signal name="Activated" handler="DisconnectGridServerMenu" after="yes" />
</action>
<action id="UploadAsset">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Upload asset</property>
<property name="ShortLabel" translatable="yes">Upload asset</property>
</action>
<action id="AssetManagement">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Asset management</property>
<property name="ShortLabel" translatable="yes">Asset management</property>
</action>
<action id="ConnectToAssetServer">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Connect to asset server</property>
<property name="ShortLabel" translatable="yes">Connect to asset server</property>
</action>
<action id="ConnectToDefaultAssetServerForGrid">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Connect to default asset server for grid</property>
<property name="ShortLabel" translatable="yes">Connect to default asset server for grid</property>
</action>
<action id="DefaultForLocalGrid">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Default for local grid</property>
<property name="ShortLabel" translatable="yes">Default for local grid</property>
</action>
<action id="DefaultForRemoteGrid">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Default for remote grid...</property>
<property name="ShortLabel" translatable="yes">Default for remote grid...</property>
</action>
<action id="CustomAssetServer">
<property name="Type">Action</property>
<property name="Label" translatable="yes">Custom asset server...</property>
<property name="ShortLabel" translatable="yes">Custom asset server...</property>
</action>
</action-group>
<property name="MemberName" />
<property name="WidthRequest">800</property>
<property name="HeightRequest">600</property>
<property name="Title" translatable="yes">Open Grid Services Manager</property>
<property name="Icon">stock:gtk-network Dialog</property>
<signal name="DeleteEvent" handler="OnDeleteEvent" />
<child>
<widget class="Gtk.VBox" id="vbox1">
<property name="MemberName" />
<child>
<widget class="Gtk.MenuBar" id="menubar2">
<property name="MemberName" />
<property name="HeightRequest">25</property>
<node name="menubar2" type="Menubar">
<node type="Menu" action="Grid">
<node type="Menuitem" action="ConnectToGridserver" />
<node type="Menuitem" action="DisconnectFromGridServer" />
<node type="Separator" />
<node type="Menuitem" action="RestartWholeGrid" />
<node type="Menuitem" action="RestartGridserverOnly" />
<node type="Separator" />
<node type="Menuitem" action="ShutdownWholeGrid" />
<node type="Menuitem" action="ShutdownGridserverOnly" />
<node type="Separator" />
<node type="Menuitem" action="ExitGridManager" />
</node>
<node type="Menu" action="User">
<node type="Menu" action="ConnectToUserserver">
<node type="Menuitem" action="DefaultLocalGridUserserver" />
<node type="Menuitem" action="CustomUserserver" />
<node type="Menuitem" action="RemoteGridDefaultUserserver" />
</node>
<node type="Separator" />
<node type="Menuitem" action="AccountManagment" />
<node type="Menuitem" action="GlobalNotice" />
<node type="Separator" />
<node type="Menuitem" action="DisableAllLogins" />
<node type="Menuitem" action="DisableNonGodUsersOnly" />
<node type="Separator" />
<node type="Menuitem" action="ShutdownUserServer" />
</node>
<node type="Menu" action="Asset">
<node type="Menuitem" action="UploadAsset" />
<node type="Menuitem" action="AssetManagement" />
<node type="Menu" action="ConnectToAssetServer">
<node type="Menuitem" action="DefaultForLocalGrid" />
<node type="Menuitem" action="DefaultForRemoteGrid" />
<node type="Menuitem" action="CustomAssetServer" />
</node>
</node>
<node type="Menu" action="Region" />
<node type="Menu" action="Services" />
</node>
</widget>
<packing>
<property name="Position">0</property>
<property name="AutoSize">False</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
<child>
<widget class="Gtk.HBox" id="hbox1">
<property name="MemberName" />
<child>
<placeholder />
</child>
<child>
<widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
<property name="MemberName" />
<property name="CanFocus">True</property>
<property name="VscrollbarPolicy">Automatic</property>
<property name="HscrollbarPolicy">Automatic</property>
<child>
<widget class="Gtk.Viewport" id="GtkViewport">
<property name="MemberName" />
<property name="ShadowType">None</property>
<child>
<widget class="Gtk.DrawingArea" id="drawingarea1">
<property name="MemberName" />
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="Position">1</property>
<property name="AutoSize">True</property>
</packing>
</child>
<child>
<widget class="Gtk.TreeView" id="treeview1">
<property name="MemberName" />
<property name="CanFocus">True</property>
</widget>
<packing>
<property name="Position">2</property>
<property name="AutoSize">True</property>
</packing>
</child>
</widget>
<packing>
<property name="Position">1</property>
<property name="AutoSize">True</property>
</packing>
</child>
<child>
<widget class="Gtk.Statusbar" id="statusbar1">
<property name="MemberName">statusBar1</property>
<property name="Spacing">5</property>
<child>
<placeholder />
</child>
<child>
<placeholder />
</child>
</widget>
<packing>
<property name="PackType">End</property>
<property name="Position">2</property>
<property name="AutoSize">False</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
</widget>
</child>
</widget>
<widget class="Gtk.Dialog" id="OpenGridServices.Manager.ConnectToGridServerDialog" design-size="476 137">
<property name="MemberName" />
<property name="Events">ButtonPressMask</property>
<property name="Title" translatable="yes">Connect to Grid server</property>
<property name="WindowPosition">CenterOnParent</property>
<property name="Buttons">2</property>
<property name="HelpButton">False</property>
<property name="HasSeparator">False</property>
<signal name="Response" handler="OnResponse" />
<child internal-child="VBox">
<widget class="Gtk.VBox" id="dialog_VBox">
<property name="MemberName" />
<property name="Events">ButtonPressMask</property>
<property name="BorderWidth">2</property>
<child>
<widget class="Gtk.VBox" id="vbox2">
<property name="MemberName" />
<child>
<placeholder />
</child>
<child>
<placeholder />
</child>
<child>
<widget class="Gtk.VBox" id="vbox3">
<property name="MemberName" />
<child>
<widget class="Gtk.HBox" id="hbox1">
<property name="MemberName" />
<child>
<widget class="Gtk.Label" id="label1">
<property name="MemberName" />
<property name="Xalign">1</property>
<property name="LabelProp" translatable="yes">Grid server URL: </property>
<property name="Justify">Right</property>
</widget>
<packing>
<property name="Position">0</property>
<property name="AutoSize">False</property>
</packing>
</child>
<child>
<widget class="Gtk.Entry" id="entry1">
<property name="MemberName" />
<property name="CanFocus">True</property>
<property name="Text" translatable="yes">http://gridserver:8001</property>
<property name="IsEditable">True</property>
<property name="MaxLength">255</property>
<property name="InvisibleChar">•</property>
</widget>
<packing>
<property name="Position">1</property>
<property name="AutoSize">False</property>
</packing>
</child>
<child>
<placeholder />
</child>
</widget>
<packing>
<property name="Position">0</property>
<property name="AutoSize">True</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
<child>
<widget class="Gtk.HBox" id="hbox2">
<property name="MemberName" />
<child>
<widget class="Gtk.Label" id="label2">
<property name="MemberName" />
<property name="Xalign">1</property>
<property name="LabelProp" translatable="yes">Username:</property>
<property name="Justify">Right</property>
</widget>
<packing>
<property name="Position">0</property>
<property name="AutoSize">False</property>
</packing>
</child>
<child>
<widget class="Gtk.Entry" id="entry2">
<property name="MemberName" />
<property name="CanFocus">True</property>
<property name="IsEditable">True</property>
<property name="InvisibleChar">•</property>
</widget>
<packing>
<property name="Position">1</property>
<property name="AutoSize">True</property>
</packing>
</child>
<child>
<placeholder />
</child>
</widget>
<packing>
<property name="Position">1</property>
<property name="AutoSize">False</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
<child>
<widget class="Gtk.HBox" id="hbox3">
<property name="MemberName" />
<child>
<widget class="Gtk.Label" id="label3">
<property name="MemberName" />
<property name="Xalign">1</property>
<property name="LabelProp" translatable="yes">Password:</property>
<property name="Justify">Right</property>
</widget>
<packing>
<property name="Position">0</property>
<property name="AutoSize">False</property>
</packing>
</child>
<child>
<widget class="Gtk.Entry" id="entry3">
<property name="MemberName" />
<property name="CanFocus">True</property>
<property name="IsEditable">True</property>
<property name="InvisibleChar">•</property>
</widget>
<packing>
<property name="Position">1</property>
<property name="AutoSize">True</property>
</packing>
</child>
<child>
<placeholder />
</child>
</widget>
<packing>
<property name="Position">2</property>
<property name="AutoSize">True</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="Position">2</property>
<property name="AutoSize">True</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="Position">0</property>
<property name="AutoSize">True</property>
</packing>
</child>
</widget>
</child>
<child internal-child="ActionArea">
<widget class="Gtk.HButtonBox" id="OpenGridServices.Manager.ConnectToGridServerDialog_ActionArea">
<property name="MemberName" />
<property name="Events">ButtonPressMask</property>
<property name="Spacing">6</property>
<property name="BorderWidth">5</property>
<property name="Size">2</property>
<property name="LayoutStyle">End</property>
<child>
<widget class="Gtk.Button" id="button2">
<property name="MemberName" />
<property name="CanDefault">True</property>
<property name="CanFocus">True</property>
<property name="Type">TextAndIcon</property>
<property name="Icon">stock:gtk-apply Menu</property>
<property name="Label" translatable="yes">Connect</property>
<property name="UseUnderline">True</property>
<property name="IsDialogButton">True</property>
<property name="ResponseId">-5</property>
</widget>
<packing>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
<child>
<widget class="Gtk.Button" id="button8">
<property name="MemberName" />
<property name="CanDefault">True</property>
<property name="CanFocus">True</property>
<property name="Type">TextAndIcon</property>
<property name="Icon">stock:gtk-cancel Menu</property>
<property name="Label" translatable="yes">Cancel</property>
<property name="UseUnderline">True</property>
<property name="IsDialogButton">True</property>
<property name="ResponseId">-6</property>
</widget>
<packing>
<property name="Position">1</property>
<property name="Expand">False</property>
<property name="Fill">False</property>
</packing>
</child>
</widget>
</child>
</widget>
</stetic-interface>

View File

@ -1,187 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using System.Threading;
using System.Timers;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Grid.Framework;
using Timer = System.Timers.Timer;
namespace OpenSim.Grid.MessagingServer.Modules
{
public class InterMessageUserServerModule : IInterServiceUserService
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private MessageServerConfig m_cfg;
private IGridServiceCore m_messageCore;
private Timer reconnectTimer = new Timer(300000); // 5 mins
public InterMessageUserServerModule(MessageServerConfig config, IGridServiceCore messageCore)
{
m_cfg = config;
m_messageCore = messageCore;
reconnectTimer.Elapsed += registerWithUserServer;
lock (reconnectTimer)
reconnectTimer.Start();
}
public void Initialise()
{
m_messageCore.RegisterInterface<IInterServiceUserService>(this);
}
public void PostInitialise()
{
}
public void RegisterHandlers()
{
//have these in separate method as some servers restart the http server and reregister all the handlers.
}
public void registerWithUserServer(object sender, ElapsedEventArgs e)
{
registerWithUserServer();
}
public bool registerWithUserServer()
{
Hashtable UserParams = new Hashtable();
// Login / Authentication
if (m_cfg.HttpSSL)
{
UserParams["uri"] = "https://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
}
else
{
UserParams["uri"] = "http://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
}
UserParams["recvkey"] = m_cfg.UserRecvKey;
UserParams["sendkey"] = m_cfg.UserRecvKey;
// Package into an XMLRPC Request
ArrayList SendParams = new ArrayList();
SendParams.Add(UserParams);
bool success = true;
string[] servers = m_cfg.UserServerURL.Split(' ');
foreach (string srv in servers)
{
// Send Request
try
{
XmlRpcRequest UserReq = new XmlRpcRequest("register_messageserver", SendParams);
XmlRpcResponse UserResp = UserReq.Send(srv, 16000);
// Process Response
Hashtable GridRespData = (Hashtable)UserResp.Value;
// if we got a response, we were successful
if (!GridRespData.ContainsKey("responsestring"))
success = false;
else
m_log.InfoFormat("[SERVER] Registered with {0}", srv);
}
catch
{
m_log.ErrorFormat("Unable to connect to server {0}. Server not running?", srv);
success = false;
}
}
return success;
}
public bool deregisterWithUserServer()
{
Hashtable request = new Hashtable();
return SendToUserServer(request, "deregister_messageserver");
}
public bool SendToUserServer(Hashtable request, string method)
{
// Login / Authentication
if (m_cfg.HttpSSL)
{
request["uri"] = "https://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
}
else
{
request["uri"] = "http://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
}
request["recvkey"] = m_cfg.UserRecvKey;
request["sendkey"] = m_cfg.UserRecvKey;
// Package into an XMLRPC Request
ArrayList SendParams = new ArrayList();
SendParams.Add(request);
bool success = true;
string[] servers = m_cfg.UserServerURL.Split(' ');
// Send Request
foreach (string srv in servers)
{
try
{
XmlRpcRequest UserReq = new XmlRpcRequest(method, SendParams);
XmlRpcResponse UserResp = UserReq.Send(m_cfg.UserServerURL, 16000);
// Process Response
Hashtable UserRespData = (Hashtable)UserResp.Value;
// if we got a response, we were successful
if (!UserRespData.ContainsKey("responsestring"))
success = false;
}
catch
{
m_log.ErrorFormat("Unable to connect to server {0}. Server not running?", srv);
success = false;
}
}
return success;
}
}
}

View File

@ -1,200 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using System.Threading;
using System.Timers;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Grid.Framework;
using Timer = System.Timers.Timer;
using OpenSim.Services.Interfaces;
using OpenSim.Services.Connectors;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
namespace OpenSim.Grid.MessagingServer.Modules
{
public class MessageRegionModule : IMessageRegionLookup
{
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private MessageServerConfig m_cfg;
private IInterServiceUserService m_userServerModule;
private IGridServiceCore m_messageCore;
private IGridService m_GridService;
// a dictionary of all current regions this server knows about
private Dictionary<ulong, RegionProfileData> m_regionInfoCache = new Dictionary<ulong, RegionProfileData>();
public MessageRegionModule(MessageServerConfig config, IGridServiceCore messageCore)
{
m_cfg = config;
m_messageCore = messageCore;
m_GridService = new GridServicesConnector(m_cfg.GridServerURL);
}
public void Initialise()
{
m_messageCore.RegisterInterface<IMessageRegionLookup>(this);
}
public void PostInitialise()
{
IInterServiceUserService messageUserServer;
if (m_messageCore.TryGet<IInterServiceUserService>(out messageUserServer))
{
m_userServerModule = messageUserServer;
}
}
public void RegisterHandlers()
{
//have these in separate method as some servers restart the http server and reregister all the handlers.
}
/// <summary>
/// Gets and caches a RegionInfo object from the gridserver based on regionhandle
/// if the regionhandle is already cached, use the cached values
/// Gets called by lots of threads!!!!!
/// </summary>
/// <param name="regionhandle">handle to the XY of the region we're looking for</param>
/// <returns>A RegionInfo object to stick in the presence info</returns>
public RegionProfileData GetRegionInfo(ulong regionhandle)
{
RegionProfileData regionInfo = null;
lock (m_regionInfoCache)
{
m_regionInfoCache.TryGetValue(regionhandle, out regionInfo);
}
if (regionInfo == null) // not found in cache
{
regionInfo = RequestRegionInfo(regionhandle);
if (regionInfo != null) // lookup was successful
{
lock (m_regionInfoCache)
{
m_regionInfoCache[regionhandle] = regionInfo;
}
}
}
return regionInfo;
}
public int ClearRegionCache()
{
int cachecount = 0;
lock (m_regionInfoCache)
{
cachecount = m_regionInfoCache.Count;
m_regionInfoCache.Clear();
}
return cachecount;
}
/// <summary>
/// Get RegionProfileData from the GridServer.
/// We'll cache this information in GetRegionInfo and use it for presence updates
/// </summary>
/// <param name="regionHandle"></param>
/// <returns></returns>
public RegionProfileData RequestRegionInfo(ulong regionHandle)
{
uint x = 0, y = 0;
Utils.LongToUInts(regionHandle, out x, out y);
GridRegion region = m_GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y);
if (region != null)
return GridRegionToRegionProfile(region);
else
return null;
}
private RegionProfileData GridRegionToRegionProfile(GridRegion region)
{
RegionProfileData rprofile = new RegionProfileData();
rprofile.httpPort = region.HttpPort;
rprofile.httpServerURI = region.ServerURI;
rprofile.regionLocX = (uint)(region.RegionLocX / Constants.RegionSize);
rprofile.regionLocY = (uint)(region.RegionLocY / Constants.RegionSize);
rprofile.RegionName = region.RegionName;
rprofile.ServerHttpPort = region.HttpPort;
rprofile.ServerIP = region.ExternalHostName;
rprofile.ServerPort = (uint)region.ExternalEndPoint.Port;
rprofile.Uuid = region.RegionID;
return rprofile;
}
public XmlRpcResponse RegionStartup(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
result["success"] = "FALSE";
if (m_userServerModule.SendToUserServer(requestData, "region_startup"))
result["success"] = "TRUE";
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
public XmlRpcResponse RegionShutdown(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
result["success"] = "FALSE";
if (m_userServerModule.SendToUserServer(requestData, "region_shutdown"))
result["success"] = "TRUE";
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
}
}

View File

@ -1,503 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using System.Threading;
using System.Timers;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Grid.Framework;
using Timer=System.Timers.Timer;
namespace OpenSim.Grid.MessagingServer.Modules
{
public class MessageService
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private MessageServerConfig m_cfg;
private UserDataBaseService m_userDataBaseService;
private IGridServiceCore m_messageCore;
private IInterServiceUserService m_userServerModule;
private IMessageRegionLookup m_regionModule;
// a dictionary of all current presences this server knows about
private Dictionary<UUID, UserPresenceData> m_presences = new Dictionary<UUID,UserPresenceData>();
public MessageService(MessageServerConfig cfg, IGridServiceCore messageCore, UserDataBaseService userDataBaseService)
{
m_cfg = cfg;
m_messageCore = messageCore;
m_userDataBaseService = userDataBaseService;
//???
UserConfig uc = new UserConfig();
uc.DatabaseConnect = cfg.DatabaseConnect;
uc.DatabaseProvider = cfg.DatabaseProvider;
}
public void Initialise()
{
}
public void PostInitialise()
{
IInterServiceUserService messageUserServer;
if (m_messageCore.TryGet<IInterServiceUserService>(out messageUserServer))
{
m_userServerModule = messageUserServer;
}
IMessageRegionLookup messageRegion;
if (m_messageCore.TryGet<IMessageRegionLookup>(out messageRegion))
{
m_regionModule = messageRegion;
}
}
public void RegisterHandlers()
{
//have these in separate method as some servers restart the http server and reregister all the handlers.
}
#region FriendList Methods
/// <summary>
/// Process Friendlist subscriptions for a user
/// The login method calls this for a User
/// </summary>
/// <param name="userpresence">The Agent we're processing the friendlist subscriptions for</param>
private void ProcessFriendListSubscriptions(UserPresenceData userpresence)
{
lock (m_presences)
{
m_presences[userpresence.agentData.AgentID] = userpresence;
}
Dictionary<UUID, FriendListItem> uFriendList = userpresence.friendData;
foreach (KeyValuePair<UUID, FriendListItem> pair in uFriendList)
{
UserPresenceData friendup = null;
lock (m_presences)
{
m_presences.TryGetValue(pair.Key, out friendup);
}
if (friendup != null)
{
SubscribeToPresenceUpdates(userpresence, friendup, pair.Value);
}
}
}
/// <summary>
/// Enqueues a presence update, sending info about user 'talkingAbout' to user 'receiver'.
/// </summary>
/// <param name="talkingAbout">We are sending presence information about this user.</param>
/// <param name="receiver">We are sending the presence update to this user</param>
private void enqueuePresenceUpdate(UserPresenceData talkingAbout, UserPresenceData receiver)
{
UserAgentData p2Handle = m_userDataBaseService.GetUserAgentData(receiver.agentData.AgentID);
if (p2Handle != null)
{
if (receiver.lookupUserRegionYN)
{
receiver.regionData.regionHandle = p2Handle.Handle;
}
else
{
receiver.lookupUserRegionYN = true; // TODO Huh?
}
PresenceInformer friendlistupdater = new PresenceInformer();
friendlistupdater.presence1 = talkingAbout;
friendlistupdater.presence2 = receiver;
friendlistupdater.OnGetRegionData += m_regionModule.GetRegionInfo;
friendlistupdater.OnDone += PresenceUpdateDone;
Util.FireAndForget(friendlistupdater.go);
}
else
{
m_log.WarnFormat("no data found for user {0}", receiver.agentData.AgentID);
// Skip because we can't find any data on the user
}
}
/// <summary>
/// Does the necessary work to subscribe one agent to another's presence notifications
/// Gets called by ProcessFriendListSubscriptions. You shouldn't call this directly
/// unless you know what you're doing
/// </summary>
/// <param name="userpresence">P1</param>
/// <param name="friendpresence">P2</param>
/// <param name="uFriendListItem"></param>
private void SubscribeToPresenceUpdates(UserPresenceData userpresence,
UserPresenceData friendpresence,
FriendListItem uFriendListItem)
{
// Can the friend see me online?
if ((uFriendListItem.FriendListOwnerPerms & (uint)FriendRights.CanSeeOnline) != 0)
{
// tell user to update friend about user's presence changes
if (!userpresence.subscriptionData.Contains(friendpresence.agentData.AgentID))
{
userpresence.subscriptionData.Add(friendpresence.agentData.AgentID);
}
// send an update about user's presence to the friend
enqueuePresenceUpdate(userpresence, friendpresence);
}
// Can I see the friend online?
if ((uFriendListItem.FriendPerms & (uint)FriendRights.CanSeeOnline) != 0)
{
// tell friend to update user about friend's presence changes
if (!friendpresence.subscriptionData.Contains(userpresence.agentData.AgentID))
{
friendpresence.subscriptionData.Add(userpresence.agentData.AgentID);
}
// send an update about friend's presence to user.
enqueuePresenceUpdate(friendpresence, userpresence);
}
}
/// <summary>
/// Logoff Processor. Call this to clean up agent presence data and send logoff presence notifications
/// </summary>
/// <param name="AgentID"></param>
private void ProcessLogOff(UUID AgentID)
{
m_log.Info("[LOGOFF]: Processing Logoff");
UserPresenceData userPresence = null;
lock (m_presences)
{
m_presences.TryGetValue(AgentID, out userPresence);
}
if (userPresence != null) // found the user
{
List<UUID> AgentsNeedingNotification = userPresence.subscriptionData;
userPresence.OnlineYN = false;
for (int i = 0; i < AgentsNeedingNotification.Count; i++)
{
UserPresenceData friendPresence = null;
lock (m_presences)
{
m_presences.TryGetValue(AgentsNeedingNotification[i], out friendPresence);
}
// This might need to be enumerated and checked before we try to remove it.
if (friendPresence != null)
{
lock (friendPresence)
{
// no updates for this user anymore
friendPresence.subscriptionData.Remove(AgentID);
// set user's entry in the friend's list to offline (if it exists)
if (friendPresence.friendData.ContainsKey(AgentID))
{
friendPresence.friendData[AgentID].onlinestatus = false;
}
}
enqueuePresenceUpdate(userPresence, friendPresence);
}
}
}
}
#endregion
private void PresenceUpdateDone(PresenceInformer obj)
{
obj.OnGetRegionData -= m_regionModule.GetRegionInfo;
obj.OnDone -= PresenceUpdateDone;
}
#region UserServer Comms
/// <summary>
/// Returns a list of FriendsListItems that describe the friends and permissions in the friend
/// relationship for UUID friendslistowner. For faster lookup, we index by friend's UUID.
/// </summary>
/// <param name="friendlistowner">The agent that we're retreiving the friends Data for.</param>
private Dictionary<UUID, FriendListItem> GetUserFriendList(UUID friendlistowner)
{
Dictionary<UUID, FriendListItem> buddies = new Dictionary<UUID,FriendListItem>();
try
{
Hashtable param = new Hashtable();
param["ownerID"] = friendlistowner.ToString();
IList parameters = new ArrayList();
parameters.Add(param);
XmlRpcRequest req = new XmlRpcRequest("get_user_friend_list", parameters);
XmlRpcResponse resp = req.Send(m_cfg.UserServerURL, 3000);
Hashtable respData = (Hashtable)resp.Value;
if (respData.Contains("avcount"))
{
buddies = ConvertXMLRPCDataToFriendListItemList(respData);
}
}
catch (WebException e)
{
m_log.Warn("Error when trying to fetch Avatar's friends list: " +
e.Message);
// Return Empty list (no friends)
}
return buddies;
}
/// <summary>
/// Converts XMLRPC Friend List to FriendListItem Object
/// </summary>
/// <param name="data">XMLRPC response data Hashtable</param>
/// <returns></returns>
public Dictionary<UUID, FriendListItem> ConvertXMLRPCDataToFriendListItemList(Hashtable data)
{
Dictionary<UUID, FriendListItem> buddies = new Dictionary<UUID,FriendListItem>();
int buddycount = Convert.ToInt32((string)data["avcount"]);
for (int i = 0; i < buddycount; i++)
{
FriendListItem buddylistitem = new FriendListItem();
buddylistitem.FriendListOwner = new UUID((string)data["ownerID" + i.ToString()]);
buddylistitem.Friend = new UUID((string)data["friendID" + i.ToString()]);
buddylistitem.FriendListOwnerPerms = (uint)Convert.ToInt32((string)data["ownerPerms" + i.ToString()]);
buddylistitem.FriendPerms = (uint)Convert.ToInt32((string)data["friendPerms" + i.ToString()]);
buddies.Add(buddylistitem.Friend, buddylistitem);
}
return buddies;
}
/// <summary>
/// UserServer sends an expect_user method
/// this handles the method and provisions the
/// necessary info for presence to work
/// </summary>
/// <param name="request">UserServer Data</param>
/// <returns></returns>
public XmlRpcResponse UserLoggedOn(XmlRpcRequest request, IPEndPoint remoteClient)
{
try
{
Hashtable requestData = (Hashtable)request.Params[0];
AgentCircuitData agentData = new AgentCircuitData();
agentData.SessionID = new UUID((string)requestData["sessionid"]);
agentData.SecureSessionID = new UUID((string)requestData["secure_session_id"]);
agentData.firstname = (string)requestData["firstname"];
agentData.lastname = (string)requestData["lastname"];
agentData.AgentID = new UUID((string)requestData["agentid"]);
agentData.circuitcode = Convert.ToUInt32(requestData["circuit_code"]);
agentData.CapsPath = (string)requestData["caps_path"];
if (requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1"))
{
agentData.child = true;
}
else
{
agentData.startpos =
new Vector3(Convert.ToSingle(requestData["positionx"]),
Convert.ToSingle(requestData["positiony"]),
Convert.ToSingle(requestData["positionz"]));
agentData.child = false;
}
ulong regionHandle = Convert.ToUInt64((string)requestData["regionhandle"]);
m_log.InfoFormat("[LOGON]: User {0} {1} logged into region {2} as {3} agent, building indexes for user",
agentData.firstname, agentData.lastname, regionHandle, agentData.child ? "child" : "root");
UserPresenceData up = new UserPresenceData();
up.agentData = agentData;
up.friendData = GetUserFriendList(agentData.AgentID);
up.regionData = m_regionModule.GetRegionInfo(regionHandle);
up.OnlineYN = true;
up.lookupUserRegionYN = false;
ProcessFriendListSubscriptions(up);
}
catch (Exception e)
{
m_log.WarnFormat("[LOGIN]: Exception on UserLoggedOn: {0}", e);
}
return new XmlRpcResponse();
}
/// <summary>
/// The UserServer got a Logoff message
/// Cleanup time for that user. Send out presence notifications
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public XmlRpcResponse UserLoggedOff(XmlRpcRequest request, IPEndPoint remoteClient)
{
try
{
m_log.Info("[USERLOGOFF]: User logged off called");
Hashtable requestData = (Hashtable)request.Params[0];
UUID AgentID = new UUID((string)requestData["agentid"]);
ProcessLogOff(AgentID);
}
catch (Exception e)
{
m_log.WarnFormat("[USERLOGOFF]: Exception on UserLoggedOff: {0}", e);
}
return new XmlRpcResponse();
}
#endregion
public XmlRpcResponse GetPresenceInfoBulk(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable paramHash = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
// TODO check access (recv_key/send_key)
IList list = (IList)paramHash["uuids"];
// convert into List<UUID>
List<UUID> uuids = new List<UUID>();
for (int i = 0; i < list.Count; ++i)
{
UUID uuid;
if (UUID.TryParse((string)list[i], out uuid))
{
uuids.Add(uuid);
}
}
try {
Dictionary<UUID, FriendRegionInfo> infos = m_userDataBaseService.GetFriendRegionInfos(uuids);
m_log.DebugFormat("[FRIEND]: Got {0} region entries back.", infos.Count);
int count = 0;
foreach (KeyValuePair<UUID, FriendRegionInfo> pair in infos)
{
result["uuid_" + count] = pair.Key.ToString();
result["isOnline_" + count] = pair.Value.isOnline;
result["regionHandle_" + count] = pair.Value.regionHandle.ToString(); // XML-RPC doesn't know ulongs
++count;
}
result["count"] = count;
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
catch(Exception e) {
m_log.Error("Got exception:", e);
throw e;
}
}
public XmlRpcResponse AgentLocation(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
result["success"] = "FALSE";
if (m_userServerModule.SendToUserServer(requestData, "agent_location"))
result["success"] = "TRUE";
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
public XmlRpcResponse AgentLeaving(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
result["success"] = "FALSE";
if (m_userServerModule.SendToUserServer(requestData, "agent_leaving"))
result["success"] = "TRUE";
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
public XmlRpcResponse ProcessRegionShutdown(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
result["success"] = "FALSE";
UUID regionID;
if (UUID.TryParse((string)requestData["regionid"], out regionID))
{
m_log.DebugFormat("[PRESENCE] Processing region restart for {0}", regionID);
result["success"] = "TRUE";
foreach (UserPresenceData up in m_presences.Values)
{
if (up.regionData.UUID == regionID)
{
if (up.OnlineYN)
{
m_log.DebugFormat("[PRESENCE] Logging off {0} because the region they were in has gone", up.agentData.AgentID);
ProcessLogOff(up.agentData.AgentID);
}
}
}
}
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
}
}

View File

@ -1,96 +0,0 @@
/*
* 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.Collections.Generic;
using OpenMetaverse;
namespace OpenSim.Grid.MessagingServer.Modules
{
// This is a wrapper for a List<UUID> so it can be happily stored in a hashtable.
public class PresenceBackreferenceEntry
{
List<UUID> AgentList = new List<UUID>();
public PresenceBackreferenceEntry()
{
}
public void Add(UUID item)
{
lock (AgentList)
{
AgentList.Add(item);
}
}
public UUID getitem(int index)
{
UUID result = UUID.Zero;
lock (AgentList)
{
if (index > 0 && index < AgentList.Count)
{
result = AgentList[index];
}
}
return result;
}
public int Count
{
get
{
int count = 0;
lock (AgentList)
{
count = AgentList.Count;
}
return count;
}
}
public void Remove(UUID item)
{
lock (AgentList)
{
if (AgentList.Contains(item))
AgentList.Remove(item);
}
}
public bool contains(UUID item)
{
bool result = false;
lock (AgentList)
{
result = AgentList.Contains(item);
}
return result;
}
}
}

View File

@ -1,135 +0,0 @@
/*
* 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.Collections;
using System.Net;
using System.Reflection;
using log4net;
using Nwc.XmlRpc;
using OpenSim.Data;
namespace OpenSim.Grid.MessagingServer.Modules
{
public delegate RegionProfileData GetRegionData(ulong region_handle);
public delegate void Done(PresenceInformer obj);
public class PresenceInformer
{
public event GetRegionData OnGetRegionData;
public event Done OnDone;
private GetRegionData handlerGetRegionData = null;
private Done handlerDone = null;
public UserPresenceData presence1 = null;
public UserPresenceData presence2 = null;
public string gridserverurl, gridserversendkey, gridserverrecvkey;
public bool lookupRegion = true;
//public methodGroup
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public PresenceInformer()
{
}
public void go(object o)
{
if (presence1 != null && presence2 != null)
{
SendRegionPresenceUpdate(presence1, presence2);
}
}
/// <summary>
/// Informs a region about an Agent
/// </summary>
/// <param name="TalkingAbout">User to talk about</param>
/// <param name="UserToUpdate">User we're sending this too (contains the region)</param>
public void SendRegionPresenceUpdate(UserPresenceData TalkingAbout, UserPresenceData UserToUpdate)
{
// TODO: Fill in pertenant Presence Data from 'TalkingAbout'
RegionProfileData whichRegion = new RegionProfileData();
if (lookupRegion)
{
handlerGetRegionData = OnGetRegionData;
if (handlerGetRegionData != null)
{
whichRegion = handlerGetRegionData(UserToUpdate.regionData.regionHandle);
}
//RegionProfileData rp = RegionProfileData.RequestSimProfileData(UserToUpdate.regionData.regionHandle, gridserverurl, gridserversendkey, gridserverrecvkey);
//whichRegion = rp;
}
else
{
whichRegion = UserToUpdate.regionData;
}
//whichRegion.httpServerURI
if (whichRegion != null)
{
Hashtable PresenceParams = new Hashtable();
PresenceParams.Add("agent_id",TalkingAbout.agentData.AgentID.ToString());
PresenceParams.Add("notify_id",UserToUpdate.agentData.AgentID.ToString());
if (TalkingAbout.OnlineYN)
PresenceParams.Add("status","TRUE");
else
PresenceParams.Add("status","FALSE");
ArrayList SendParams = new ArrayList();
SendParams.Add(PresenceParams);
m_log.InfoFormat("[PRESENCE]: Informing {0}@{1} at {2} about {3}", TalkingAbout.agentData.firstname + " " + TalkingAbout.agentData.lastname, whichRegion.regionName, whichRegion.httpServerURI, UserToUpdate.agentData.firstname + " " + UserToUpdate.agentData.lastname);
// Send
XmlRpcRequest RegionReq = new XmlRpcRequest("presence_update", SendParams);
try
{
// XmlRpcResponse RegionResp = RegionReq.Send(whichRegion.httpServerURI, 6000);
RegionReq.Send(whichRegion.httpServerURI, 6000);
}
catch (WebException)
{
m_log.WarnFormat("[INFORM]: failed notifying region {0} containing user {1} about {2}", whichRegion.regionName, UserToUpdate.agentData.firstname + " " + UserToUpdate.agentData.lastname, TalkingAbout.agentData.firstname + " " + TalkingAbout.agentData.lastname);
}
}
else
{
m_log.Info("[PRESENCEUPDATER]: Region data was null skipping");
}
handlerDone = OnDone;
if (handlerDone != null)
{
handlerDone(this);
}
}
}
}

View File

@ -1,33 +0,0 @@
/*
* 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.
*/
namespace OpenSim.Grid.MessagingServer.Modules
{
class PresenceService
{
}
}

View File

@ -1,75 +0,0 @@
/*
* 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 OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
namespace OpenSim.Grid.MessagingServer.Modules
{
public class UserDataBaseService : UserManagerBase
{
/// <summary>
/// Constructor.
/// </summary>
/// Passing null to parent because we never use any function that requires an interservice inventory call.
public UserDataBaseService()
: base(null)
{
}
public UserAgentData GetUserAgentData(UUID AgentID)
{
UserProfileData userProfile = GetUserProfile(AgentID);
if (userProfile != null)
{
return userProfile.CurrentAgent;
}
return null;
}
public override UserProfileData SetupMasterUser(string firstName, string lastName)
{
//throw new Exception("The method or operation is not implemented.");
return null;
}
public override UserProfileData SetupMasterUser(string firstName, string lastName, string password)
{
//throw new Exception("The method or operation is not implemented.");
return null;
}
public override UserProfileData SetupMasterUser(UUID uuid)
{
//throw new Exception("The method or operation is not implemented.");
return null;
}
}
}

View File

@ -1,50 +0,0 @@
/*
* 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 OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
namespace OpenSim.Grid.MessagingServer
{
public class UserPresenceData
{
public AgentCircuitData agentData = new AgentCircuitData();
public RegionProfileData regionData = new RegionProfileData();
public string httpURI = String.Empty;
public Dictionary<UUID, FriendListItem> friendData = new Dictionary<UUID,FriendListItem>();
public List<UUID> subscriptionData = new List<UUID>();
public bool OnlineYN = true;
public bool lookupUserRegionYN = true;
public UserPresenceData()
{
}
}
}

View File

@ -1,33 +0,0 @@
/*
* 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.
*/
namespace OpenSim.Grid.MessagingServer.Modules
{
public class WorkUnitBase
{
}
}

View File

@ -1,33 +0,0 @@
/*
* 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.
*/
namespace OpenSim.Grid.MessagingServer.Modules
{
public class WorkUnitPresenceUpdate : WorkUnitBase
{
}
}

View File

@ -1,293 +0,0 @@
/*
* 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.IO;
using System.Reflection;
using log4net;
using Nini.Config;
using log4net.Config;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
using OpenSim.Grid.MessagingServer.Modules;
namespace OpenSim.Grid.MessagingServer
{
/// <summary>
/// </summary>
public class OpenMessage_Main : BaseOpenSimServer , IGridServiceCore
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private MessageServerConfig Cfg;
private MessageService msgsvc;
private MessageRegionModule m_regionModule;
private InterMessageUserServerModule m_userServerModule;
private UserDataBaseService m_userDataBaseService;
// private UUID m_lastCreatedUser = UUID.Random();
protected static string m_consoleType = "local";
protected static IConfigSource m_config = null;
protected static string m_configFile = "MessagingServer_Config.xml";
public static void Main(string[] args)
{
ArgvConfigSource argvSource = new ArgvConfigSource(args);
argvSource.AddSwitch("Startup", "console", "c");
argvSource.AddSwitch("Startup", "xmlfile", "x");
IConfig startupConfig = argvSource.Configs["Startup"];
if (startupConfig != null)
{
m_consoleType = startupConfig.GetString("console", "local");
m_configFile = startupConfig.GetString("xmlfile", "MessagingServer_Config.xml");
}
m_config = argvSource;
XmlConfigurator.Configure();
m_log.Info("[SERVER]: Launching MessagingServer...");
OpenMessage_Main messageserver = new OpenMessage_Main();
messageserver.Startup();
messageserver.Work();
}
public OpenMessage_Main()
{
switch (m_consoleType)
{
case "rest":
m_console = new RemoteConsole("Messaging");
break;
case "basic":
m_console = new CommandConsole("Messaging");
break;
default:
m_console = new LocalConsole("Messaging");
break;
}
MainConsole.Instance = m_console;
}
private void Work()
{
m_console.Output("Enter help for a list of commands\n");
while (true)
{
m_console.Prompt();
}
}
private void registerWithUserServer()
{
if (m_userServerModule.registerWithUserServer())
{
if (m_httpServer == null)
{
m_log.Info("[SERVER]: Starting HTTP process");
m_httpServer = new BaseHttpServer(Cfg.HttpPort);
if (m_console is RemoteConsole)
{
RemoteConsole c = (RemoteConsole)m_console;
c.SetServer(m_httpServer);
IConfig netConfig = m_config.AddConfig("Network");
netConfig.Set("ConsoleUser", Cfg.ConsoleUser);
netConfig.Set("ConsolePass", Cfg.ConsolePass);
c.ReadConfig(m_config);
}
m_httpServer.AddXmlRPCHandler("login_to_simulator", msgsvc.UserLoggedOn);
m_httpServer.AddXmlRPCHandler("logout_of_simulator", msgsvc.UserLoggedOff);
m_httpServer.AddXmlRPCHandler("get_presence_info_bulk", msgsvc.GetPresenceInfoBulk);
m_httpServer.AddXmlRPCHandler("process_region_shutdown", msgsvc.ProcessRegionShutdown);
m_httpServer.AddXmlRPCHandler("agent_location", msgsvc.AgentLocation);
m_httpServer.AddXmlRPCHandler("agent_leaving", msgsvc.AgentLeaving);
m_httpServer.AddXmlRPCHandler("region_startup", m_regionModule.RegionStartup);
m_httpServer.AddXmlRPCHandler("region_shutdown", m_regionModule.RegionShutdown);
m_httpServer.Start();
}
m_log.Info("[SERVER]: Userserver registration was successful");
}
else
{
m_log.Error("[STARTUP]: Unable to connect to User Server");
}
}
private void deregisterFromUserServer()
{
m_userServerModule.deregisterWithUserServer();
// if (m_httpServer != null)
// {
// try a completely fresh registration, with fresh handlers, too
// m_httpServer.Stop();
// m_httpServer = null;
// }
m_console.Output("[SERVER]: Deregistered from userserver.");
}
protected override void StartupSpecific()
{
Cfg = new MessageServerConfig("MESSAGING SERVER", (Path.Combine(Util.configDir(), m_configFile)));
m_userDataBaseService = new UserDataBaseService();
m_userDataBaseService.AddPlugin(Cfg.DatabaseProvider, Cfg.DatabaseConnect);
//Register the database access service so modules can fetch it
// RegisterInterface<UserDataBaseService>(m_userDataBaseService);
m_userServerModule = new InterMessageUserServerModule(Cfg, this);
m_userServerModule.Initialise();
msgsvc = new MessageService(Cfg, this, m_userDataBaseService);
msgsvc.Initialise();
m_regionModule = new MessageRegionModule(Cfg, this);
m_regionModule.Initialise();
registerWithUserServer();
m_userServerModule.PostInitialise();
msgsvc.PostInitialise();
m_regionModule.PostInitialise();
m_log.Info("[SERVER]: Messageserver 0.5 - Startup complete");
base.StartupSpecific();
m_console.Commands.AddCommand("messageserver", false, "clear cache",
"clear cache",
"Clear presence cache", HandleClearCache);
m_console.Commands.AddCommand("messageserver", false, "register",
"register",
"Re-register with user server(s)", HandleRegister);
}
public void do_create(string what)
{
//switch (what)
//{
// case "user":
// try
// {
// //userID =
// //m_userManager.AddUserProfile(tempfirstname, templastname, tempMD5Passwd, regX, regY);
// } catch (Exception ex)
// {
// m_console.Error("[SERVER]: Error creating user: {0}", ex.ToString());
// }
// try
// {
// //RestObjectPoster.BeginPostObject<Guid>(m_userManager._config.InventoryUrl + "CreateInventory/",
// //userID.Guid);
// }
// catch (Exception ex)
// {
// m_console.Error("[SERVER]: Error creating inventory for user: {0}", ex.ToString());
// }
// // m_lastCreatedUser = userID;
// break;
//}
}
private void HandleClearCache(string module, string[] cmd)
{
int entries = m_regionModule.ClearRegionCache();
m_console.Output("Region cache cleared! Cleared " +
entries.ToString() + " entries");
}
private void HandleRegister(string module, string[] cmd)
{
deregisterFromUserServer();
registerWithUserServer();
}
public override void ShutdownSpecific()
{
m_userServerModule.deregisterWithUserServer();
}
#region IUGAIMCore
protected Dictionary<Type, object> m_moduleInterfaces = new Dictionary<Type, object>();
/// <summary>
/// Register an Module interface.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="iface"></param>
public void RegisterInterface<T>(T iface)
{
lock (m_moduleInterfaces)
{
if (!m_moduleInterfaces.ContainsKey(typeof(T)))
{
m_moduleInterfaces.Add(typeof(T), iface);
}
}
}
public bool TryGet<T>(out T iface)
{
if (m_moduleInterfaces.ContainsKey(typeof(T)))
{
iface = (T)m_moduleInterfaces[typeof(T)];
return true;
}
iface = default(T);
return false;
}
public T Get<T>()
{
return (T)m_moduleInterfaces[typeof(T)];
}
public BaseHttpServer GetHttpServer()
{
return m_httpServer;
}
#endregion
}
}

View File

@ -1,56 +0,0 @@
/*
* 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.Reflection;
using System.Runtime.InteropServices;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("UserConfig")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("http://opensimulator.org")]
[assembly: AssemblyProduct("UserConfig")]
[assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("0.6.3.*")]

View File

@ -1,106 +0,0 @@
/*
* 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 Db4objects.Db4o;
using OpenSim.Framework.Configuration;
using OpenSim.Framework.Console;
using OpenSim.Framework.Interfaces;
namespace OpenUser.Config.UserConfigDb4o
{
public class Db4oConfigPlugin: IUserConfig
{
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public UserConfig GetConfigObject()
{
m_log.Info("[DBUSERCONFIG]: Loading Db40Config dll");
return new DbUserConfig();
}
}
public class DbUserConfig : UserConfig
{
private IObjectContainer db;
public void LoadDefaults()
{
m_log.Info("DbUserConfig.cs:LoadDefaults() - Please press enter to retain default or enter new settings");
this.DefaultStartupMsg = m_log.CmdPrompt("Default startup message", "Welcome to OGS");
this.GridServerURL = m_log.CmdPrompt("Grid server URL","http://127.0.0.1:" + GridConfig.DefaultHttpPort.ToString() + "/");
this.GridSendKey = m_log.CmdPrompt("Key to send to grid server","null");
this.GridRecvKey = m_log.CmdPrompt("Key to expect from grid server","null");
}
public override void InitConfig()
{
try
{
db = Db4oFactory.OpenFile("openuser.yap");
IObjectSet result = db.Get(typeof(DbUserConfig));
if (result.Count == 1)
{
m_log.Info("[DBUSERCONFIG]: DbUserConfig.cs:InitConfig() - Found a UserConfig object in the local database, loading");
foreach (DbUserConfig cfg in result)
{
this.GridServerURL=cfg.GridServerURL;
this.GridSendKey=cfg.GridSendKey;
this.GridRecvKey=cfg.GridRecvKey;
this.DefaultStartupMsg=cfg.DefaultStartupMsg;
}
}
else
{
m_log.Info("[DBUSERCONFIG]: DbUserConfig.cs:InitConfig() - Could not find object in database, loading precompiled defaults");
LoadDefaults();
m_log.Info("[DBUSERCONFIG]: Writing out default settings to local database");
db.Set(this);
db.Close();
}
}
catch(Exception e)
{
m_log.Warn("DbUserConfig.cs:InitConfig() - Exception occured");
m_log.Warn(e.ToString());
}
m_log.Info("[DBUSERCONFIG]: User settings loaded:");
m_log.Info("[DBUSERCONFIG]: Default startup message: " + this.DefaultStartupMsg);
m_log.Info("[DBUSERCONFIG]: Grid server URL: " + this.GridServerURL);
m_log.Info("[DBUSERCONFIG]: Key to send to grid: " + this.GridSendKey);
m_log.Info("[DBUSERCONFIG]: Key to expect from grid: " + this.GridRecvKey);
}
public void Shutdown()
{
db.Close();
}
}
}

View File

@ -1,550 +0,0 @@
/*
* 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.Collections.Generic;
using System.Reflection;
using System.Threading;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Console;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules
{
public class AvatarCreationModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private UserDataBaseService m_userDataBaseService;
// private BaseHttpServer m_httpServer;
// TODO: unused: private UserConfig m_config;
private string m_inventoryServerUrl;
private IInterServiceInventoryServices m_inventoryService;
public AvatarCreationModule(UserDataBaseService userDataBaseService, UserConfig config, IInterServiceInventoryServices inventoryService)
{
// TODO: unused: m_config = config;
m_userDataBaseService = userDataBaseService;
m_inventoryService = inventoryService;
m_inventoryServerUrl = config.InventoryUrl.OriginalString;
}
public void Initialise(IGridServiceCore core)
{
CommandConsole console;
if (core.TryGet<CommandConsole>(out console))
{
console.Commands.AddCommand("userserver", false, "clone avatar",
"clone avatar <TemplateAvatarFirstName> <TemplateAvatarLastName> <TargetAvatarFirstName> <TargetAvatarLastName>",
"Clone the template avatar's inventory into a target avatar", RunCommand);
}
}
public void PostInitialise()
{
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
}
public void RunCommand(string module, string[] cmd)
{
if ((cmd.Length == 6) && (cmd[0] == "clone") && (cmd[1] == "avatar"))
{
try
{
string tFirst = cmd[2];
string tLast = cmd[3];
string nFirst = cmd[4];
string nLast = cmd[5];
UserProfileData templateAvatar = m_userDataBaseService.GetUserProfile(tFirst, tLast);
UserProfileData newAvatar = m_userDataBaseService.GetUserProfile(nFirst, nLast);
if (templateAvatar == null)
{
m_log.ErrorFormat("[AvatarAppearance] Clone Avatar: Could not find template avatar {0} , {1}", tFirst, tLast);
return;
}
if (newAvatar == null)
{
m_log.ErrorFormat("[AvatarAppearance] Clone Avatar: Could not find target avatar {0} , {1}", nFirst, nLast);
return;
}
Guid avatar = newAvatar.ID.Guid;
Guid template = templateAvatar.ID.Guid;
CloneAvatar(avatar, template, true, true);
}
catch (Exception e)
{
m_log.Error("Error: " + e.ToString());
}
}
}
#region Avatar Appearance Creation
public bool CloneAvatar(Guid avatarID, Guid templateID, bool modifyPermissions, bool removeTargetsClothes)
{
m_log.InfoFormat("[AvatarAppearance] Starting to clone avatar {0} inventory to avatar {1}", templateID.ToString(), avatarID.ToString());
// TODO: unused: Guid bodyFolder = Guid.Empty;
// TODO: unused: Guid clothesFolder = Guid.Empty;
bool success = false;
UUID avID = new UUID(avatarID);
List<InventoryFolderBase> avatarInventory = m_inventoryService.GetInventorySkeleton(avID);
if ((avatarInventory == null) || (avatarInventory.Count == 0))
{
m_log.InfoFormat("[AvatarAppearance] No inventory found for user {0} , so creating it", avID.ToString());
m_inventoryService.CreateNewUserInventory(avID);
Thread.Sleep(5000);
avatarInventory = m_inventoryService.GetInventorySkeleton(avID);
}
if ((avatarInventory != null) && (avatarInventory.Count > 0))
{
UUID tempOwnID = new UUID(templateID);
AvatarAppearance appearance = m_userDataBaseService.GetUserAppearance(tempOwnID);
if (removeTargetsClothes)
{
//remove clothes and attachments from target avatar so that the end result isn't a merger of its existing clothes
// and the clothes from the template avatar.
RemoveClothesAndAttachments(avID);
}
List<InventoryFolderBase> templateInventory = m_inventoryService.GetInventorySkeleton(tempOwnID);
if ((templateInventory != null) && (templateInventory.Count != 0))
{
for (int i = 0; i < templateInventory.Count; i++)
{
if (templateInventory[i].ParentID == UUID.Zero)
{
success = CloneFolder(avatarInventory, avID, UUID.Zero, appearance, templateInventory[i], templateInventory, modifyPermissions);
break;
}
}
}
else
{
m_log.InfoFormat("[AvatarAppearance] Failed to find the template owner's {0} inventory", tempOwnID);
}
}
m_log.InfoFormat("[AvatarAppearance] finished cloning avatar with result: {0}", success);
return success;
}
private bool CloneFolder(List<InventoryFolderBase> avatarInventory, UUID avID, UUID parentFolder, AvatarAppearance appearance, InventoryFolderBase templateFolder, List<InventoryFolderBase> templateFolders, bool modifyPermissions)
{
bool success = false;
UUID templateFolderId = templateFolder.ID;
if (templateFolderId != UUID.Zero)
{
InventoryFolderBase toFolder = FindFolder(templateFolder.Name, parentFolder.Guid, avatarInventory);
if (toFolder == null)
{
//create new folder
toFolder = new InventoryFolderBase();
toFolder.ID = UUID.Random();
toFolder.Name = templateFolder.Name;
toFolder.Owner = avID;
toFolder.Type = templateFolder.Type;
toFolder.Version = 1;
toFolder.ParentID = parentFolder;
if (!SynchronousRestObjectRequester.MakeRequest<InventoryFolderBase, bool>(
"POST", m_inventoryServerUrl + "CreateFolder/", toFolder))
{
m_log.InfoFormat("[AvatarApperance] Couldn't make new folder {0} in users inventory", toFolder.Name);
return false;
}
else
{
// m_log.InfoFormat("made new folder {0} in users inventory", toFolder.Name);
}
}
List<InventoryItemBase> templateItems = SynchronousRestObjectRequester.MakeRequest<Guid, List<InventoryItemBase>>(
"POST", m_inventoryServerUrl + "GetItems/", templateFolderId.Guid);
if ((templateItems != null) && (templateItems.Count > 0))
{
List<ClothesAttachment> wornClothes = new List<ClothesAttachment>();
List<ClothesAttachment> attachedItems = new List<ClothesAttachment>();
foreach (InventoryItemBase item in templateItems)
{
UUID clonedItemId = CloneInventoryItem(avID, toFolder.ID, item, modifyPermissions);
if (clonedItemId != UUID.Zero)
{
int appearanceType = ItemIsPartOfAppearance(item, appearance);
if (appearanceType >= 0)
{
// UpdateAvatarAppearance(avID, appearanceType, clonedItemId, item.AssetID);
wornClothes.Add(new ClothesAttachment(appearanceType, clonedItemId, item.AssetID));
}
if (appearance != null)
{
int attachment = appearance.GetAttachpoint(item.ID);
if (attachment > 0)
{
//UpdateAvatarAttachment(avID, attachment, clonedItemId, item.AssetID);
attachedItems.Add(new ClothesAttachment(attachment, clonedItemId, item.AssetID));
}
}
success = true;
}
}
if ((wornClothes.Count > 0) || (attachedItems.Count > 0))
{
//Update the worn clothes and attachments
AvatarAppearance targetAppearance = GetAppearance(avID);
if (targetAppearance != null)
{
foreach (ClothesAttachment wornItem in wornClothes)
{
targetAppearance.Wearables[wornItem.Type].AssetID = wornItem.AssetID;
targetAppearance.Wearables[wornItem.Type].ItemID = wornItem.ItemID;
}
foreach (ClothesAttachment wornItem in attachedItems)
{
targetAppearance.SetAttachment(wornItem.Type, wornItem.ItemID, wornItem.AssetID);
}
m_userDataBaseService.UpdateUserAppearance(avID, targetAppearance);
wornClothes.Clear();
attachedItems.Clear();
}
}
}
else if ((templateItems != null) && (templateItems.Count == 0))
{
// m_log.Info("[AvatarAppearance]Folder being cloned was empty");
success = true;
}
List<InventoryFolderBase> subFolders = FindSubFolders(templateFolder.ID.Guid, templateFolders);
foreach (InventoryFolderBase subFolder in subFolders)
{
if (subFolder.Name.ToLower() != "trash")
{
success = CloneFolder(avatarInventory, avID, toFolder.ID, appearance, subFolder, templateFolders, modifyPermissions);
}
}
}
else
{
m_log.Info("[AvatarAppearance] Failed to find the template folder");
}
return success;
}
private UUID CloneInventoryItem(UUID avatarID, UUID avatarFolder, InventoryItemBase item, bool modifyPerms)
{
if (avatarFolder != UUID.Zero)
{
InventoryItemBase clonedItem = new InventoryItemBase();
clonedItem.Owner = avatarID;
clonedItem.AssetID = item.AssetID;
clonedItem.AssetType = item.AssetType;
clonedItem.BasePermissions = item.BasePermissions;
clonedItem.CreationDate = item.CreationDate;
clonedItem.CreatorId = item.CreatorId;
clonedItem.CreatorIdAsUuid = item.CreatorIdAsUuid;
clonedItem.CurrentPermissions = item.CurrentPermissions;
clonedItem.Description = item.Description;
clonedItem.EveryOnePermissions = item.EveryOnePermissions;
clonedItem.Flags = item.Flags;
clonedItem.Folder = avatarFolder;
clonedItem.GroupID = item.GroupID;
clonedItem.GroupOwned = item.GroupOwned;
clonedItem.GroupPermissions = item.GroupPermissions;
clonedItem.ID = UUID.Random();
clonedItem.InvType = item.InvType;
clonedItem.Name = item.Name;
clonedItem.NextPermissions = item.NextPermissions;
clonedItem.SalePrice = item.SalePrice;
clonedItem.SaleType = item.SaleType;
if (modifyPerms)
{
ModifyPermissions(ref clonedItem);
}
SynchronousRestObjectRequester.MakeRequest<InventoryItemBase, bool>(
"POST", m_inventoryServerUrl + "AddNewItem/", clonedItem);
return clonedItem.ID;
}
return UUID.Zero;
}
// TODO: unused
// private void UpdateAvatarAppearance(UUID avatarID, int wearableType, UUID itemID, UUID assetID)
// {
// AvatarAppearance appearance = GetAppearance(avatarID);
// appearance.Wearables[wearableType].AssetID = assetID;
// appearance.Wearables[wearableType].ItemID = itemID;
// m_userDataBaseService.UpdateUserAppearance(avatarID, appearance);
// }
// TODO: unused
// private void UpdateAvatarAttachment(UUID avatarID, int attachmentPoint, UUID itemID, UUID assetID)
// {
// AvatarAppearance appearance = GetAppearance(avatarID);
// appearance.SetAttachment(attachmentPoint, itemID, assetID);
// m_userDataBaseService.UpdateUserAppearance(avatarID, appearance);
// }
private void RemoveClothesAndAttachments(UUID avatarID)
{
AvatarAppearance appearance = GetAppearance(avatarID);
appearance.ClearWearables();
appearance.ClearAttachments();
m_userDataBaseService.UpdateUserAppearance(avatarID, appearance);
}
private AvatarAppearance GetAppearance(UUID avatarID)
{
AvatarAppearance appearance = m_userDataBaseService.GetUserAppearance(avatarID);
if (appearance == null)
{
appearance = CreateDefaultAppearance(avatarID);
}
return appearance;
}
// TODO: unused
// private UUID FindFolderID(string name, List<InventoryFolderBase> folders)
// {
// foreach (InventoryFolderBase folder in folders)
// {
// if (folder.Name == name)
// {
// return folder.ID;
// }
// }
// return UUID.Zero;
// }
// TODO: unused
// private InventoryFolderBase FindFolder(string name, List<InventoryFolderBase> folders)
// {
// foreach (InventoryFolderBase folder in folders)
// {
// if (folder.Name == name)
// {
// return folder;
// }
// }
// return null;
// }
private InventoryFolderBase FindFolder(string name, Guid parentFolderID, List<InventoryFolderBase> folders)
{
foreach (InventoryFolderBase folder in folders)
{
if ((folder.Name == name) && (folder.ParentID.Guid == parentFolderID))
{
return folder;
}
}
return null;
}
// TODO: unused
// private InventoryItemBase GetItem(string itemName, List<InventoryItemBase> items)
// {
// foreach (InventoryItemBase item in items)
// {
// if (item.Name.ToLower() == itemName.ToLower())
// {
// return item;
// }
// }
// return null;
// }
private List<InventoryFolderBase> FindSubFolders(Guid parentFolderID, List<InventoryFolderBase> folders)
{
List<InventoryFolderBase> subFolders = new List<InventoryFolderBase>();
foreach (InventoryFolderBase folder in folders)
{
if (folder.ParentID.Guid == parentFolderID)
{
subFolders.Add(folder);
}
}
return subFolders;
}
protected virtual void ModifyPermissions(ref InventoryItemBase item)
{
// Propagate Permissions
item.BasePermissions = item.BasePermissions & item.NextPermissions;
item.CurrentPermissions = item.BasePermissions;
item.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions;
item.GroupPermissions = item.GroupPermissions & item.NextPermissions;
}
private AvatarAppearance CreateDefaultAppearance(UUID avatarId)
{
AvatarAppearance appearance = null;
AvatarWearable[] wearables;
byte[] visualParams;
GetDefaultAvatarAppearance(out wearables, out visualParams);
appearance = new AvatarAppearance(avatarId, wearables, visualParams);
return appearance;
}
private static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams)
{
visualParams = GetDefaultVisualParams();
wearables = AvatarWearable.DefaultWearables;
}
private static byte[] GetDefaultVisualParams()
{
byte[] visualParams;
visualParams = new byte[218];
for (int i = 0; i < 218; i++)
{
visualParams[i] = 100;
}
return visualParams;
}
private int ItemIsPartOfAppearance(InventoryItemBase item, AvatarAppearance appearance)
{
if (appearance != null)
{
if (appearance.BodyItem == item.ID)
return (int)WearableType.Shape;
if (appearance.EyesItem == item.ID)
return (int)WearableType.Eyes;
if (appearance.GlovesItem == item.ID)
return (int)WearableType.Gloves;
if (appearance.HairItem == item.ID)
return (int)WearableType.Hair;
if (appearance.JacketItem == item.ID)
return (int)WearableType.Jacket;
if (appearance.PantsItem == item.ID)
return (int)WearableType.Pants;
if (appearance.ShirtItem == item.ID)
return (int)WearableType.Shirt;
if (appearance.ShoesItem == item.ID)
return (int)WearableType.Shoes;
if (appearance.SkinItem == item.ID)
return (int)WearableType.Skin;
if (appearance.SkirtItem == item.ID)
return (int)WearableType.Skirt;
if (appearance.SocksItem == item.ID)
return (int)WearableType.Socks;
if (appearance.UnderPantsItem == item.ID)
return (int)WearableType.Underpants;
if (appearance.UnderShirtItem == item.ID)
return (int)WearableType.Undershirt;
}
return -1;
}
#endregion
public enum PermissionMask
{
None = 0,
Transfer = 8192,
Modify = 16384,
Copy = 32768,
Move = 524288,
Damage = 1048576,
All = 2147483647,
}
public enum WearableType
{
Shape = 0,
Skin = 1,
Hair = 2,
Eyes = 3,
Shirt = 4,
Pants = 5,
Shoes = 6,
Socks = 7,
Jacket = 8,
Gloves = 9,
Undershirt = 10,
Underpants = 11,
Skirt = 12,
}
public class ClothesAttachment
{
public int Type;
public UUID ItemID;
public UUID AssetID;
public ClothesAttachment(int type, UUID itemID, UUID assetID)
{
Type = type;
ItemID = itemID;
AssetID = assetID;
}
}
}
}

View File

@ -1,514 +0,0 @@
/*
* 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.Collections;
using System.Collections.Generic;
using System.Net;
using System.Reflection;
using System.Threading;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules
{
public enum NotificationRequest : int
{
Login = 0,
Logout = 1,
Shutdown = 2
}
public struct PresenceNotification
{
public NotificationRequest request;
public UUID agentID;
public UUID sessionID;
public UUID RegionID;
public ulong regionhandle;
public float positionX;
public float positionY;
public float positionZ;
public string firstname;
public string lastname;
}
public delegate void AgentLocationDelegate(UUID agentID, UUID regionID, ulong regionHandle);
public delegate void AgentLeavingDelegate(UUID agentID, UUID regionID, ulong regionHandle);
public delegate void RegionStartupDelegate(UUID regionID);
public delegate void RegionShutdownDelegate(UUID regionID);
public class MessageServersConnector
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public Dictionary<string, MessageServerInfo> MessageServers;
private BaseHttpServer m_httpServer;
private OpenSim.Framework.BlockingQueue<PresenceNotification> m_NotifyQueue =
new OpenSim.Framework.BlockingQueue<PresenceNotification>();
private IGridServiceCore m_core;
public event AgentLocationDelegate OnAgentLocation;
public event AgentLeavingDelegate OnAgentLeaving;
public event RegionStartupDelegate OnRegionStartup;
public event RegionShutdownDelegate OnRegionShutdown;
public MessageServersConnector()
{
MessageServers = new Dictionary<string, MessageServerInfo>();
}
public void Initialise(IGridServiceCore core)
{
m_core = core;
m_core.RegisterInterface<MessageServersConnector>(this);
Watchdog.StartThread(NotifyQueueRunner, "NotifyQueueRunner", ThreadPriority.Normal, true);
}
public void PostInitialise()
{
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
m_httpServer = httpServer;
m_httpServer.AddXmlRPCHandler("region_startup", RegionStartup);
m_httpServer.AddXmlRPCHandler("region_shutdown", RegionShutdown);
m_httpServer.AddXmlRPCHandler("agent_location", AgentLocation);
m_httpServer.AddXmlRPCHandler("agent_leaving", AgentLeaving);
// Message Server ---> User Server
m_httpServer.AddXmlRPCHandler("register_messageserver", XmlRPCRegisterMessageServer);
m_httpServer.AddXmlRPCHandler("agent_change_region", XmlRPCUserMovedtoRegion);
m_httpServer.AddXmlRPCHandler("deregister_messageserver", XmlRPCDeRegisterMessageServer);
}
public void RegisterMessageServer(string URI, MessageServerInfo serverData)
{
lock (MessageServers)
{
if (!MessageServers.ContainsKey(URI))
MessageServers.Add(URI, serverData);
}
}
public void DeRegisterMessageServer(string URI)
{
lock (MessageServers)
{
if (MessageServers.ContainsKey(URI))
MessageServers.Remove(URI);
}
}
public void AddResponsibleRegion(string URI, ulong regionhandle)
{
if (!MessageServers.ContainsKey(URI))
{
m_log.Warn("[MSGSERVER]: Got addResponsibleRegion Request for a MessageServer that isn't registered");
}
else
{
MessageServerInfo msginfo = MessageServers["URI"];
msginfo.responsibleForRegions.Add(regionhandle);
MessageServers["URI"] = msginfo;
}
}
public void RemoveResponsibleRegion(string URI, ulong regionhandle)
{
if (!MessageServers.ContainsKey(URI))
{
m_log.Warn("[MSGSERVER]: Got RemoveResponsibleRegion Request for a MessageServer that isn't registered");
}
else
{
MessageServerInfo msginfo = MessageServers["URI"];
if (msginfo.responsibleForRegions.Contains(regionhandle))
{
msginfo.responsibleForRegions.Remove(regionhandle);
MessageServers["URI"] = msginfo;
}
}
}
public XmlRpcResponse XmlRPCRegisterMessageServer(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
if (requestData.Contains("uri"))
{
string URI = (string)requestData["uri"];
string sendkey=(string)requestData["sendkey"];
string recvkey=(string)requestData["recvkey"];
MessageServerInfo m = new MessageServerInfo();
m.URI = URI;
m.sendkey = sendkey;
m.recvkey = recvkey;
RegisterMessageServer(URI, m);
responseData["responsestring"] = "TRUE";
response.Value = responseData;
}
return response;
}
public XmlRpcResponse XmlRPCDeRegisterMessageServer(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
if (requestData.Contains("uri"))
{
string URI = (string)requestData["uri"];
DeRegisterMessageServer(URI);
responseData["responsestring"] = "TRUE";
response.Value = responseData;
}
return response;
}
public XmlRpcResponse XmlRPCUserMovedtoRegion(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
if (requestData.Contains("fromuri"))
{
// string sURI = (string)requestData["fromuri"];
// string sagentID = (string)requestData["agentid"];
// string ssessionID = (string)requestData["sessionid"];
// string scurrentRegionID = (string)requestData["regionid"];
// string sregionhandle = (string)requestData["regionhandle"];
// string scurrentpos = (string)requestData["currentpos"];
//Vector3.TryParse((string)reader["currentPos"], out retval.currentPos);
// TODO: Okay now raise event so the user server can pass this data to the Usermanager
responseData["responsestring"] = "TRUE";
response.Value = responseData;
}
return response;
}
public void TellMessageServersAboutUser(UUID agentID, UUID sessionID, UUID RegionID,
ulong regionhandle, float positionX, float positionY,
float positionZ, string firstname, string lastname)
{
PresenceNotification notification = new PresenceNotification();
notification.request = NotificationRequest.Login;
notification.agentID = agentID;
notification.sessionID = sessionID;
notification.RegionID = RegionID;
notification.regionhandle = regionhandle;
notification.positionX = positionX;
notification.positionY = positionY;
notification.positionZ = positionZ;
notification.firstname = firstname;
notification.lastname = lastname;
m_NotifyQueue.Enqueue(notification);
}
private void TellMessageServersAboutUserInternal(UUID agentID, UUID sessionID, UUID RegionID,
ulong regionhandle, float positionX, float positionY,
float positionZ, string firstname, string lastname)
{
// Loop over registered Message Servers (AND THERE WILL BE MORE THEN ONE :D)
lock (MessageServers)
{
if (MessageServers.Count > 0)
{
m_log.Info("[MSGCONNECTOR]: Sending login notice to registered message servers");
}
// else
// {
// m_log.Debug("[MSGCONNECTOR]: No Message Servers registered, ignoring");
// }
foreach (MessageServerInfo serv in MessageServers.Values)
{
NotifyMessageServerAboutUser(serv, agentID, sessionID, RegionID,
regionhandle, positionX, positionY, positionZ,
firstname, lastname);
}
}
}
private void TellMessageServersAboutUserLogoffInternal(UUID agentID)
{
lock (MessageServers)
{
if (MessageServers.Count > 0)
{
m_log.Info("[MSGCONNECTOR]: Sending logoff notice to registered message servers");
}
else
{
// m_log.Debug("[MSGCONNECTOR]: No Message Servers registered, ignoring");
}
foreach (MessageServerInfo serv in MessageServers.Values)
{
NotifyMessageServerAboutUserLogoff(serv,agentID);
}
}
}
private void TellMessageServersAboutRegionShutdownInternal(UUID regionID)
{
lock (MessageServers)
{
if (MessageServers.Count > 0)
{
m_log.Info("[MSGCONNECTOR]: Sending region down notice to registered message servers");
}
else
{
// m_log.Debug("[MSGCONNECTOR]: No Message Servers registered, ignoring");
}
foreach (MessageServerInfo serv in MessageServers.Values)
{
NotifyMessageServerAboutRegionShutdown(serv,regionID);
}
}
}
public void TellMessageServersAboutUserLogoff(UUID agentID)
{
PresenceNotification notification = new PresenceNotification();
notification.request = NotificationRequest.Logout;
notification.agentID = agentID;
m_NotifyQueue.Enqueue(notification);
}
public void TellMessageServersAboutRegionShutdown(UUID regionID)
{
PresenceNotification notification = new PresenceNotification();
notification.request = NotificationRequest.Shutdown;
notification.RegionID = regionID;
m_NotifyQueue.Enqueue(notification);
}
private void NotifyMessageServerAboutUserLogoff(MessageServerInfo serv, UUID agentID)
{
Hashtable reqparams = new Hashtable();
reqparams["sendkey"] = serv.sendkey;
reqparams["agentid"] = agentID.ToString();
ArrayList SendParams = new ArrayList();
SendParams.Add(reqparams);
XmlRpcRequest GridReq = new XmlRpcRequest("logout_of_simulator", SendParams);
try
{
GridReq.Send(serv.URI, 6000);
}
catch (WebException)
{
m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about log out. Other users might still think this user is online");
}
m_log.Info("[LOGOUT]: Notified : " + serv.URI + " about user logout");
}
private void NotifyMessageServerAboutRegionShutdown(MessageServerInfo serv, UUID regionID)
{
Hashtable reqparams = new Hashtable();
reqparams["sendkey"] = serv.sendkey;
reqparams["regionid"] = regionID.ToString();
ArrayList SendParams = new ArrayList();
SendParams.Add(reqparams);
XmlRpcRequest GridReq = new XmlRpcRequest("process_region_shutdown", SendParams);
try
{
GridReq.Send(serv.URI, 6000);
}
catch (WebException)
{
m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about region shutdown.");
}
m_log.Info("[REGION UPDOWN]: Notified : " + serv.URI + " about region state change");
}
private void NotifyMessageServerAboutUser(MessageServerInfo serv,
UUID agentID, UUID sessionID, UUID RegionID,
ulong regionhandle, float positionX, float positionY, float positionZ,
string firstname, string lastname)
{
Hashtable reqparams = new Hashtable();
reqparams["sendkey"] = serv.sendkey;
reqparams["agentid"] = agentID.ToString();
reqparams["sessionid"] = sessionID.ToString();
reqparams["regionid"] = RegionID.ToString();
reqparams["regionhandle"] = regionhandle.ToString();
reqparams["positionx"] = positionX.ToString();
reqparams["positiony"] = positionY.ToString();
reqparams["positionz"] = positionZ.ToString();
reqparams["firstname"] = firstname;
reqparams["lastname"] = lastname;
//reqparams["position"] = Position.ToString();
ArrayList SendParams = new ArrayList();
SendParams.Add(reqparams);
XmlRpcRequest GridReq = new XmlRpcRequest("login_to_simulator", SendParams);
try
{
GridReq.Send(serv.URI, 6000);
m_log.Info("[LOGIN]: Notified : " + serv.URI + " about user login");
}
catch (WebException)
{
m_log.Warn("[MSGCONNECTOR]: Unable to notify Message Server about login. Presence might be borked for this user");
}
}
private void NotifyQueueRunner()
{
while (true)
{
PresenceNotification presence = m_NotifyQueue.Dequeue();
if (presence.request == NotificationRequest.Shutdown)
{
TellMessageServersAboutRegionShutdownInternal(presence.RegionID);
}
if (presence.request == NotificationRequest.Login)
{
TellMessageServersAboutUserInternal(presence.agentID,
presence.sessionID, presence.RegionID,
presence.regionhandle, presence.positionX,
presence.positionY, presence.positionZ,
presence.firstname, presence.lastname);
}
if (presence.request == NotificationRequest.Logout)
{
TellMessageServersAboutUserLogoffInternal(presence.agentID);
}
Watchdog.UpdateThread();
}
}
public XmlRpcResponse RegionStartup(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
UUID regionID;
if (UUID.TryParse((string)requestData["RegionUUID"], out regionID))
{
if (OnRegionStartup != null)
OnRegionStartup(regionID);
result["responsestring"] = "TRUE";
}
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
public XmlRpcResponse RegionShutdown(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
UUID regionID;
if (UUID.TryParse((string)requestData["RegionUUID"], out regionID))
{
if (OnRegionShutdown != null)
OnRegionShutdown(regionID);
result["responsestring"] = "TRUE";
}
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
public XmlRpcResponse AgentLocation(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
UUID agentID;
UUID regionID;
ulong regionHandle;
if (UUID.TryParse((string)requestData["AgentID"], out agentID) && UUID.TryParse((string)requestData["RegionUUID"], out regionID) && ulong.TryParse((string)requestData["RegionHandle"], out regionHandle))
{
if (OnAgentLocation != null)
OnAgentLocation(agentID, regionID, regionHandle);
result["responsestring"] = "TRUE";
}
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
public XmlRpcResponse AgentLeaving(XmlRpcRequest request, IPEndPoint remoteClient)
{
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable result = new Hashtable();
UUID agentID;
UUID regionID;
ulong regionHandle;
if (UUID.TryParse((string)requestData["AgentID"], out agentID) && UUID.TryParse((string)requestData["RegionUUID"], out regionID) && ulong.TryParse((string)requestData["RegionHandle"], out regionHandle))
{
if (OnAgentLeaving != null)
OnAgentLeaving(agentID, regionID, regionHandle);
result["responsestring"] = "TRUE";
}
XmlRpcResponse response = new XmlRpcResponse();
response.Value = result;
return response;
}
}
}

View File

@ -1,100 +0,0 @@
/*
* 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.Collections.Generic;
using System.Reflection;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules
{
public class UserDataBaseService : UserManagerBase
{
protected IGridServiceCore m_core;
public UserDataBaseService(CommunicationsManager commsManager)
: base(commsManager)
{
}
public void Initialise(IGridServiceCore core)
{
m_core = core;
UserConfig cfg;
if (m_core.TryGet<UserConfig>(out cfg))
{
AddPlugin(cfg.DatabaseProvider, cfg.DatabaseConnect);
}
m_core.RegisterInterface<UserDataBaseService>(this);
}
public void PostInitialise()
{
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
}
public UserAgentData GetUserAgentData(UUID AgentID)
{
UserProfileData userProfile = GetUserProfile(AgentID);
if (userProfile != null)
{
return userProfile.CurrentAgent;
}
return null;
}
public override UserProfileData SetupMasterUser(string firstName, string lastName)
{
throw new Exception("The method or operation is not implemented.");
}
public override UserProfileData SetupMasterUser(string firstName, string lastName, string password)
{
throw new Exception("The method or operation is not implemented.");
}
public override UserProfileData SetupMasterUser(UUID uuid)
{
throw new Exception("The method or operation is not implemented.");
}
}
}

View File

@ -1,416 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using System.Text.RegularExpressions;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using Nini.Config;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Services;
using LoginResponse = OpenSim.Framework.Communications.Services.LoginResponse;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Capabilities;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Services.Interfaces;
using OpenSim.Services.Connectors;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
namespace OpenSim.Grid.UserServer.Modules
{
public delegate void UserLoggedInAtLocation(UUID agentID, UUID sessionID, UUID RegionID,
ulong regionhandle, float positionX, float positionY, float positionZ,
string firstname, string lastname);
/// <summary>
/// Login service used in grid mode.
/// </summary>
public class UserLoginService : LoginService
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public event UserLoggedInAtLocation OnUserLoggedInAtLocation;
private UserLoggedInAtLocation handlerUserLoggedInAtLocation;
public UserConfig m_config;
private readonly IRegionProfileRouter m_regionProfileService;
private IGridService m_GridService;
protected BaseHttpServer m_httpServer;
public UserLoginService(
UserManagerBase userManager, IInterServiceInventoryServices inventoryService,
LibraryRootFolder libraryRootFolder,
UserConfig config, string welcomeMess, IRegionProfileRouter regionProfileService)
: base(userManager, libraryRootFolder, welcomeMess)
{
m_config = config;
m_defaultHomeX = m_config.DefaultX;
m_defaultHomeY = m_config.DefaultY;
m_interInventoryService = inventoryService;
m_regionProfileService = regionProfileService;
m_GridService = new GridServicesConnector(config.GridServerURL.ToString());
}
public void RegisterHandlers(BaseHttpServer httpServer, bool registerLLSDHandler, bool registerOpenIDHandlers)
{
m_httpServer = httpServer;
m_httpServer.AddXmlRPCHandler("login_to_simulator", XmlRpcLoginMethod);
m_httpServer.AddHTTPHandler("login", ProcessHTMLLogin);
m_httpServer.AddXmlRPCHandler("set_login_params", XmlRPCSetLoginParams);
m_httpServer.AddXmlRPCHandler("check_auth_session", XmlRPCCheckAuthSession, false);
if (registerLLSDHandler)
{
m_httpServer.SetDefaultLLSDHandler(LLSDLoginMethod);
}
}
public void setloginlevel(int level)
{
m_minLoginLevel = level;
m_log.InfoFormat("[GRID]: Login Level set to {0} ", level);
}
public void setwelcometext(string text)
{
m_welcomeMessage = text;
m_log.InfoFormat("[GRID]: Login text set to {0} ", text);
}
public override void LogOffUser(UserProfileData theUser, string message)
{
RegionProfileData SimInfo;
try
{
SimInfo = m_regionProfileService.RequestSimProfileData(
theUser.CurrentAgent.Handle, m_config.GridServerURL,
m_config.GridSendKey, m_config.GridRecvKey);
if (SimInfo == null)
{
m_log.Error("[GRID]: Region user was in isn't currently logged in");
return;
}
}
catch (Exception)
{
m_log.Error("[GRID]: Unable to look up region to log user off");
return;
}
// Prepare notification
Hashtable SimParams = new Hashtable();
SimParams["agent_id"] = theUser.ID.ToString();
SimParams["region_secret"] = theUser.CurrentAgent.SecureSessionID.ToString();
SimParams["region_secret2"] = SimInfo.regionSecret;
//m_log.Info(SimInfo.regionSecret);
SimParams["regionhandle"] = theUser.CurrentAgent.Handle.ToString();
SimParams["message"] = message;
ArrayList SendParams = new ArrayList();
SendParams.Add(SimParams);
m_log.InfoFormat(
"[ASSUMED CRASH]: Telling region {0} @ {1},{2} ({3}) that their agent is dead: {4}",
SimInfo.regionName, SimInfo.regionLocX, SimInfo.regionLocY, SimInfo.httpServerURI,
theUser.FirstName + " " + theUser.SurName);
try
{
XmlRpcRequest GridReq = new XmlRpcRequest("logoff_user", SendParams);
XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 6000);
if (GridResp.IsFault)
{
m_log.ErrorFormat(
"[LOGIN]: XMLRPC request for {0} failed, fault code: {1}, reason: {2}, This is likely an old region revision.",
SimInfo.httpServerURI, GridResp.FaultCode, GridResp.FaultString);
}
}
catch (Exception)
{
m_log.Error("[LOGIN]: Error telling region to logout user!");
}
// Prepare notification
SimParams = new Hashtable();
SimParams["agent_id"] = theUser.ID.ToString();
SimParams["region_secret"] = SimInfo.regionSecret;
//m_log.Info(SimInfo.regionSecret);
SimParams["regionhandle"] = theUser.CurrentAgent.Handle.ToString();
SimParams["message"] = message;
SendParams = new ArrayList();
SendParams.Add(SimParams);
m_log.InfoFormat(
"[ASSUMED CRASH]: Telling region {0} @ {1},{2} ({3}) that their agent is dead: {4}",
SimInfo.regionName, SimInfo.regionLocX, SimInfo.regionLocY, SimInfo.httpServerURI,
theUser.FirstName + " " + theUser.SurName);
try
{
XmlRpcRequest GridReq = new XmlRpcRequest("logoff_user", SendParams);
XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 6000);
if (GridResp.IsFault)
{
m_log.ErrorFormat(
"[LOGIN]: XMLRPC request for {0} failed, fault code: {1}, reason: {2}, This is likely an old region revision.",
SimInfo.httpServerURI, GridResp.FaultCode, GridResp.FaultString);
}
}
catch (Exception)
{
m_log.Error("[LOGIN]: Error telling region to logout user!");
}
//base.LogOffUser(theUser);
}
protected override RegionInfo RequestClosestRegion(string region)
{
return GridRegionToRegionInfo(m_GridService.GetRegionByName(UUID.Zero, region));
}
protected override RegionInfo GetRegionInfo(ulong homeRegionHandle)
{
uint x = 0, y = 0;
Utils.LongToUInts(homeRegionHandle, out x, out y);
return GridRegionToRegionInfo(m_GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y));
}
protected override RegionInfo GetRegionInfo(UUID homeRegionId)
{
return GridRegionToRegionInfo(m_GridService.GetRegionByUUID(UUID.Zero, homeRegionId));
}
private RegionInfo GridRegionToRegionInfo(GridRegion gregion)
{
if (gregion == null)
return null;
RegionInfo rinfo = new RegionInfo();
rinfo.ExternalHostName = gregion.ExternalHostName;
rinfo.HttpPort = gregion.HttpPort;
rinfo.InternalEndPoint = gregion.InternalEndPoint;
rinfo.RegionID = gregion.RegionID;
rinfo.RegionLocX = (uint)(gregion.RegionLocX / Constants.RegionSize);
rinfo.RegionLocY = (uint)(gregion.RegionLocY / Constants.RegionSize);
rinfo.RegionName = gregion.RegionName;
rinfo.ScopeID = gregion.ScopeID;
rinfo.ServerURI = gregion.ServerURI;
return rinfo;
}
protected override bool PrepareLoginToRegion(RegionInfo regionInfo, UserProfileData user, LoginResponse response, IPEndPoint remoteClient)
{
return PrepareLoginToRegion(RegionProfileData.FromRegionInfo(regionInfo), user, response, remoteClient);
}
/// <summary>
/// Prepare a login to the given region. This involves both telling the region to expect a connection
/// and appropriately customising the response to the user.
/// </summary>
/// <param name="regionInfo"></param>
/// <param name="user"></param>
/// <param name="response"></param>
/// <returns>true if the region was successfully contacted, false otherwise</returns>
private bool PrepareLoginToRegion(RegionProfileData regionInfo, UserProfileData user, LoginResponse response, IPEndPoint remoteClient)
{
try
{
response.SimAddress = Util.GetHostFromURL(regionInfo.serverURI).ToString();
response.SimPort = uint.Parse(regionInfo.serverURI.Split(new char[] { '/', ':' })[4]);
response.RegionX = regionInfo.regionLocX;
response.RegionY = regionInfo.regionLocY;
string capsPath = CapsUtil.GetRandomCapsObjectPath();
// Adam's working code commented for now -- Diva 5/25/2009
//// For NAT
////string host = NetworkUtil.GetHostFor(remoteClient.Address, regionInfo.ServerIP);
//string host = response.SimAddress;
//// TODO: This doesnt support SSL. -Adam
//string serverURI = "http://" + host + ":" + regionInfo.ServerPort;
//response.SeedCapability = serverURI + CapsUtil.GetCapsSeedPath(capsPath);
// Take off trailing / so that the caps path isn't //CAPS/someUUID
string uri = regionInfo.httpServerURI.Trim(new char[] { '/' });
response.SeedCapability = uri + CapsUtil.GetCapsSeedPath(capsPath);
// Notify the target of an incoming user
m_log.InfoFormat(
"[LOGIN]: Telling {0} @ {1},{2} ({3}) to prepare for client connection",
regionInfo.regionName, response.RegionX, response.RegionY, regionInfo.httpServerURI);
// Update agent with target sim
user.CurrentAgent.Region = regionInfo.UUID;
user.CurrentAgent.Handle = regionInfo.regionHandle;
// Prepare notification
Hashtable loginParams = new Hashtable();
loginParams["session_id"] = user.CurrentAgent.SessionID.ToString();
loginParams["secure_session_id"] = user.CurrentAgent.SecureSessionID.ToString();
loginParams["firstname"] = user.FirstName;
loginParams["lastname"] = user.SurName;
loginParams["agent_id"] = user.ID.ToString();
loginParams["circuit_code"] = (Int32)Convert.ToUInt32(response.CircuitCode);
loginParams["startpos_x"] = user.CurrentAgent.Position.X.ToString();
loginParams["startpos_y"] = user.CurrentAgent.Position.Y.ToString();
loginParams["startpos_z"] = user.CurrentAgent.Position.Z.ToString();
loginParams["regionhandle"] = user.CurrentAgent.Handle.ToString();
loginParams["caps_path"] = capsPath;
// Get appearance
AvatarAppearance appearance = m_userManager.GetUserAppearance(user.ID);
if (appearance != null)
{
loginParams["appearance"] = appearance.ToHashTable();
m_log.DebugFormat("[LOGIN]: Found appearance for {0} {1}", user.FirstName, user.SurName);
}
else
{
m_log.DebugFormat("[LOGIN]: Appearance not for {0} {1}. Creating default.", user.FirstName, user.SurName);
appearance = new AvatarAppearance(user.ID);
loginParams["appearance"] = appearance.ToHashTable();
}
ArrayList SendParams = new ArrayList();
SendParams.Add(loginParams);
// Send
XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
XmlRpcResponse GridResp = GridReq.Send(regionInfo.httpServerURI, 6000);
if (!GridResp.IsFault)
{
bool responseSuccess = true;
if (GridResp.Value != null)
{
Hashtable resp = (Hashtable)GridResp.Value;
if (resp.ContainsKey("success"))
{
if ((string)resp["success"] == "FALSE")
{
responseSuccess = false;
}
}
}
if (responseSuccess)
{
handlerUserLoggedInAtLocation = OnUserLoggedInAtLocation;
if (handlerUserLoggedInAtLocation != null)
{
handlerUserLoggedInAtLocation(user.ID, user.CurrentAgent.SessionID,
user.CurrentAgent.Region,
user.CurrentAgent.Handle,
user.CurrentAgent.Position.X,
user.CurrentAgent.Position.Y,
user.CurrentAgent.Position.Z,
user.FirstName, user.SurName);
}
}
else
{
m_log.ErrorFormat("[LOGIN]: Region responded that it is not available to receive clients");
return false;
}
}
else
{
m_log.ErrorFormat("[LOGIN]: XmlRpc request to region failed with message {0}, code {1} ", GridResp.FaultString, GridResp.FaultCode);
return false;
}
}
catch (Exception e)
{
m_log.ErrorFormat("[LOGIN]: Region not available for login, {0}", e);
return false;
}
return true;
}
public XmlRpcResponse XmlRPCSetLoginParams(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
UserProfileData userProfile;
Hashtable responseData = new Hashtable();
UUID uid;
string pass = requestData["password"].ToString();
if (!UUID.TryParse((string)requestData["avatar_uuid"], out uid))
{
responseData["error"] = "No authorization";
response.Value = responseData;
return response;
}
userProfile = m_userManager.GetUserProfile(uid);
if (userProfile == null ||
(!AuthenticateUser(userProfile, pass)) ||
userProfile.GodLevel < 200)
{
responseData["error"] = "No authorization";
response.Value = responseData;
return response;
}
if (requestData.ContainsKey("login_level"))
{
m_minLoginLevel = Convert.ToInt32(requestData["login_level"]);
}
if (requestData.ContainsKey("login_motd"))
{
m_welcomeMessage = requestData["login_motd"].ToString();
}
response.Value = responseData;
return response;
}
}
}

View File

@ -1,718 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules
{
public delegate void logOffUser(UUID AgentID);
public class UserManager
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public event logOffUser OnLogOffUser;
private logOffUser handlerLogOffUser;
private UserDataBaseService m_userDataBaseService;
private BaseHttpServer m_httpServer;
/// <summary>
///
/// </summary>
/// <param name="userDataBaseService"></param>
public UserManager(UserDataBaseService userDataBaseService)
{
m_userDataBaseService = userDataBaseService;
}
public void Initialise(IGridServiceCore core)
{
}
public void PostInitialise()
{
}
private string RESTGetUserProfile(string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
UUID id;
UserProfileData userProfile;
try
{
id = new UUID(param);
}
catch (Exception)
{
httpResponse.StatusCode = 500;
return "Malformed Param [" + param + "]";
}
userProfile = m_userDataBaseService.GetUserProfile(id);
if (userProfile == null)
{
httpResponse.StatusCode = 404;
return "Not Found.";
}
return ProfileToXmlRPCResponse(userProfile).ToString();
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
m_httpServer = httpServer;
m_httpServer.AddStreamHandler(new RestStreamHandler("GET", "/users/", RESTGetUserProfile));
m_httpServer.AddXmlRPCHandler("get_user_by_name", XmlRPCGetUserMethodName);
m_httpServer.AddXmlRPCHandler("get_user_by_uuid", XmlRPCGetUserMethodUUID);
m_httpServer.AddXmlRPCHandler("get_avatar_picker_avatar", XmlRPCGetAvatarPickerAvatar);
// Used by IAR module to do password checks
m_httpServer.AddXmlRPCHandler("authenticate_user_by_password", XmlRPCAuthenticateUserMethodPassword);
m_httpServer.AddXmlRPCHandler("update_user_current_region", XmlRPCAtRegion);
m_httpServer.AddXmlRPCHandler("logout_of_simulator", XmlRPCLogOffUserMethodUUID);
m_httpServer.AddXmlRPCHandler("get_agent_by_uuid", XmlRPCGetAgentMethodUUID);
m_httpServer.AddXmlRPCHandler("update_user_profile", XmlRpcResponseXmlRPCUpdateUserProfile);
m_httpServer.AddStreamHandler(new RestStreamHandler("DELETE", "/usersessions/", RestDeleteUserSessionMethod));
}
/// <summary>
/// Deletes an active agent session
/// </summary>
/// <param name="request">The request</param>
/// <param name="path">The path (eg /bork/narf/test)</param>
/// <param name="param">Parameters sent</param>
/// <param name="httpRequest">HTTP request header object</param>
/// <param name="httpResponse">HTTP response header object</param>
/// <returns>Success "OK" else error</returns>
public string RestDeleteUserSessionMethod(string request, string path, string param,
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
{
// TODO! Important!
return "OK";
}
public XmlRpcResponse AvatarPickerListtoXmlRPCResponse(UUID queryID, List<AvatarPickerAvatar> returnUsers)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
// Query Result Information
responseData["queryid"] = queryID.ToString();
responseData["avcount"] = returnUsers.Count.ToString();
for (int i = 0; i < returnUsers.Count; i++)
{
responseData["avatarid" + i] = returnUsers[i].AvatarID.ToString();
responseData["firstname" + i] = returnUsers[i].firstName;
responseData["lastname" + i] = returnUsers[i].lastName;
}
response.Value = responseData;
return response;
}
/// <summary>
/// Converts a user profile to an XML element which can be returned
/// </summary>
/// <param name="profile">The user profile</param>
/// <returns>A string containing an XML Document of the user profile</returns>
public XmlRpcResponse ProfileToXmlRPCResponse(UserProfileData profile)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
// Account information
responseData["firstname"] = profile.FirstName;
responseData["lastname"] = profile.SurName;
responseData["email"] = profile.Email;
responseData["uuid"] = profile.ID.ToString();
// Server Information
responseData["server_inventory"] = profile.UserInventoryURI;
responseData["server_asset"] = profile.UserAssetURI;
// Profile Information
responseData["profile_about"] = profile.AboutText;
responseData["profile_firstlife_about"] = profile.FirstLifeAboutText;
responseData["profile_firstlife_image"] = profile.FirstLifeImage.ToString();
responseData["profile_can_do"] = profile.CanDoMask.ToString();
responseData["profile_want_do"] = profile.WantDoMask.ToString();
responseData["profile_image"] = profile.Image.ToString();
responseData["profile_created"] = profile.Created.ToString();
responseData["profile_lastlogin"] = profile.LastLogin.ToString();
// Home region information
responseData["home_coordinates_x"] = profile.HomeLocation.X.ToString();
responseData["home_coordinates_y"] = profile.HomeLocation.Y.ToString();
responseData["home_coordinates_z"] = profile.HomeLocation.Z.ToString();
responseData["home_region"] = profile.HomeRegion.ToString();
responseData["home_region_id"] = profile.HomeRegionID.ToString();
responseData["home_look_x"] = profile.HomeLookAt.X.ToString();
responseData["home_look_y"] = profile.HomeLookAt.Y.ToString();
responseData["home_look_z"] = profile.HomeLookAt.Z.ToString();
responseData["user_flags"] = profile.UserFlags.ToString();
responseData["god_level"] = profile.GodLevel.ToString();
responseData["custom_type"] = profile.CustomType;
responseData["partner"] = profile.Partner.ToString();
response.Value = responseData;
return response;
}
#region XMLRPC User Methods
/// <summary>
/// Authenticate a user using their password
/// </summary>
/// <param name="request">Must contain values for "user_uuid" and "password" keys</param>
/// <param name="remoteClient"></param>
/// <returns></returns>
public XmlRpcResponse XmlRPCAuthenticateUserMethodPassword(XmlRpcRequest request, IPEndPoint remoteClient)
{
// m_log.DebugFormat("[USER MANAGER]: Received authenticated user by password request from {0}", remoteClient);
Hashtable requestData = (Hashtable)request.Params[0];
string userUuidRaw = (string)requestData["user_uuid"];
string password = (string)requestData["password"];
if (null == userUuidRaw)
return Util.CreateUnknownUserErrorResponse();
UUID userUuid;
if (!UUID.TryParse(userUuidRaw, out userUuid))
return Util.CreateUnknownUserErrorResponse();
UserProfileData userProfile = m_userDataBaseService.GetUserProfile(userUuid);
if (null == userProfile)
return Util.CreateUnknownUserErrorResponse();
string authed;
if (null == password)
{
authed = "FALSE";
}
else
{
if (m_userDataBaseService.AuthenticateUserByPassword(userUuid, password))
authed = "TRUE";
else
authed = "FALSE";
}
// m_log.DebugFormat(
// "[USER MANAGER]: Authentication by password result from {0} for {1} is {2}",
// remoteClient, userUuid, authed);
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
responseData["auth_user"] = authed;
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRPCGetAvatarPickerAvatar(XmlRpcRequest request, IPEndPoint remoteClient)
{
// XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
List<AvatarPickerAvatar> returnAvatar = new List<AvatarPickerAvatar>();
UUID queryID = new UUID(UUID.Zero.ToString());
if (requestData.Contains("avquery") && requestData.Contains("queryid"))
{
queryID = new UUID((string)requestData["queryid"]);
returnAvatar = m_userDataBaseService.GenerateAgentPickerRequestResponse(queryID, (string)requestData["avquery"]);
}
m_log.InfoFormat("[AVATARINFO]: Servicing Avatar Query: " + (string)requestData["avquery"]);
return AvatarPickerListtoXmlRPCResponse(queryID, returnAvatar);
}
public XmlRpcResponse XmlRPCAtRegion(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
string returnstring = "FALSE";
if (requestData.Contains("avatar_id") && requestData.Contains("region_handle") &&
requestData.Contains("region_uuid"))
{
// ulong cregionhandle = 0;
UUID regionUUID;
UUID avatarUUID;
UUID.TryParse((string)requestData["avatar_id"], out avatarUUID);
UUID.TryParse((string)requestData["region_uuid"], out regionUUID);
if (avatarUUID != UUID.Zero)
{
UserProfileData userProfile = m_userDataBaseService.GetUserProfile(avatarUUID);
userProfile.CurrentAgent.Region = regionUUID;
userProfile.CurrentAgent.Handle = (ulong)Convert.ToInt64((string)requestData["region_handle"]);
//userProfile.CurrentAgent.
m_userDataBaseService.CommitAgent(ref userProfile);
//setUserProfile(userProfile);
returnstring = "TRUE";
}
}
responseData.Add("returnString", returnstring);
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRPCGetUserMethodName(XmlRpcRequest request, IPEndPoint remoteClient)
{
// XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
UserProfileData userProfile;
if (requestData.Contains("avatar_name"))
{
string query = (string)requestData["avatar_name"];
if (null == query)
return Util.CreateUnknownUserErrorResponse();
// Regex objAlphaNumericPattern = new Regex("[^a-zA-Z0-9]");
string[] querysplit = query.Split(' ');
if (querysplit.Length == 2)
{
userProfile = m_userDataBaseService.GetUserProfile(querysplit[0], querysplit[1]);
if (userProfile == null)
{
return Util.CreateUnknownUserErrorResponse();
}
}
else
{
return Util.CreateUnknownUserErrorResponse();
}
}
else
{
return Util.CreateUnknownUserErrorResponse();
}
return ProfileToXmlRPCResponse(userProfile);
}
public XmlRpcResponse XmlRPCGetUserMethodUUID(XmlRpcRequest request, IPEndPoint remoteClient)
{
// XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
UserProfileData userProfile;
//CFK: this clogs the UserServer log and is not necessary at this time.
//CFK: m_log.Debug("METHOD BY UUID CALLED");
if (requestData.Contains("avatar_uuid"))
{
try
{
UUID guess = new UUID((string)requestData["avatar_uuid"]);
userProfile = m_userDataBaseService.GetUserProfile(guess);
}
catch (FormatException)
{
return Util.CreateUnknownUserErrorResponse();
}
if (userProfile == null)
{
return Util.CreateUnknownUserErrorResponse();
}
}
else
{
return Util.CreateUnknownUserErrorResponse();
}
return ProfileToXmlRPCResponse(userProfile);
}
public XmlRpcResponse XmlRPCGetAgentMethodUUID(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
UserProfileData userProfile;
//CFK: this clogs the UserServer log and is not necessary at this time.
//CFK: m_log.Debug("METHOD BY UUID CALLED");
if (requestData.Contains("avatar_uuid"))
{
UUID guess;
UUID.TryParse((string)requestData["avatar_uuid"], out guess);
if (guess == UUID.Zero)
{
return Util.CreateUnknownUserErrorResponse();
}
userProfile = m_userDataBaseService.GetUserProfile(guess);
if (userProfile == null)
{
return Util.CreateUnknownUserErrorResponse();
}
// no agent???
if (userProfile.CurrentAgent == null)
{
return Util.CreateUnknownUserErrorResponse();
}
Hashtable responseData = new Hashtable();
responseData["handle"] = userProfile.CurrentAgent.Handle.ToString();
responseData["session"] = userProfile.CurrentAgent.SessionID.ToString();
if (userProfile.CurrentAgent.AgentOnline)
responseData["agent_online"] = "TRUE";
else
responseData["agent_online"] = "FALSE";
response.Value = responseData;
}
else
{
return Util.CreateUnknownUserErrorResponse();
}
return response;
}
public XmlRpcResponse XmlRpcResponseXmlRPCUpdateUserProfile(XmlRpcRequest request, IPEndPoint remoteClient)
{
m_log.Debug("[UserManager]: Got request to update user profile");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
if (!requestData.Contains("avatar_uuid"))
{
return Util.CreateUnknownUserErrorResponse();
}
UUID UserUUID = new UUID((string)requestData["avatar_uuid"]);
UserProfileData userProfile = m_userDataBaseService.GetUserProfile(UserUUID);
if (null == userProfile)
{
return Util.CreateUnknownUserErrorResponse();
}
// don't know how yet.
if (requestData.Contains("AllowPublish"))
{
}
if (requestData.Contains("FLImageID"))
{
userProfile.FirstLifeImage = new UUID((string)requestData["FLImageID"]);
}
if (requestData.Contains("ImageID"))
{
userProfile.Image = new UUID((string)requestData["ImageID"]);
}
// dont' know how yet
if (requestData.Contains("MaturePublish"))
{
}
if (requestData.Contains("AboutText"))
{
userProfile.AboutText = (string)requestData["AboutText"];
}
if (requestData.Contains("FLAboutText"))
{
userProfile.FirstLifeAboutText = (string)requestData["FLAboutText"];
}
// not in DB yet.
if (requestData.Contains("ProfileURL"))
{
}
if (requestData.Contains("home_region"))
{
try
{
userProfile.HomeRegion = Convert.ToUInt64((string)requestData["home_region"]);
}
catch (ArgumentException)
{
m_log.Error("[PROFILE]:Failed to set home region, Invalid Argument");
}
catch (FormatException)
{
m_log.Error("[PROFILE]:Failed to set home region, Invalid Format");
}
catch (OverflowException)
{
m_log.Error("[PROFILE]:Failed to set home region, Value was too large");
}
}
if (requestData.Contains("home_region_id"))
{
UUID regionID;
UUID.TryParse((string)requestData["home_region_id"], out regionID);
userProfile.HomeRegionID = regionID;
}
if (requestData.Contains("home_pos_x"))
{
try
{
userProfile.HomeLocationX = (float)Convert.ToDecimal((string)requestData["home_pos_x"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set home postion x");
}
}
if (requestData.Contains("home_pos_y"))
{
try
{
userProfile.HomeLocationY = (float)Convert.ToDecimal((string)requestData["home_pos_y"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set home postion y");
}
}
if (requestData.Contains("home_pos_z"))
{
try
{
userProfile.HomeLocationZ = (float)Convert.ToDecimal((string)requestData["home_pos_z"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set home postion z");
}
}
if (requestData.Contains("home_look_x"))
{
try
{
userProfile.HomeLookAtX = (float)Convert.ToDecimal((string)requestData["home_look_x"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set home lookat x");
}
}
if (requestData.Contains("home_look_y"))
{
try
{
userProfile.HomeLookAtY = (float)Convert.ToDecimal((string)requestData["home_look_y"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set home lookat y");
}
}
if (requestData.Contains("home_look_z"))
{
try
{
userProfile.HomeLookAtZ = (float)Convert.ToDecimal((string)requestData["home_look_z"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set home lookat z");
}
}
if (requestData.Contains("user_flags"))
{
try
{
userProfile.UserFlags = Convert.ToInt32((string)requestData["user_flags"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set user flags");
}
}
if (requestData.Contains("god_level"))
{
try
{
userProfile.GodLevel = Convert.ToInt32((string)requestData["god_level"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set god level");
}
}
if (requestData.Contains("custom_type"))
{
try
{
userProfile.CustomType = (string)requestData["custom_type"];
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set custom type");
}
}
if (requestData.Contains("partner"))
{
try
{
userProfile.Partner = new UUID((string)requestData["partner"]);
}
catch (InvalidCastException)
{
m_log.Error("[PROFILE]:Failed to set partner");
}
}
else
{
userProfile.Partner = UUID.Zero;
}
// call plugin!
bool ret = m_userDataBaseService.UpdateUserProfile(userProfile);
responseData["returnString"] = ret.ToString();
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRPCLogOffUserMethodUUID(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
if (requestData.Contains("avatar_uuid"))
{
try
{
UUID userUUID = new UUID((string)requestData["avatar_uuid"]);
UUID RegionID = new UUID((string)requestData["region_uuid"]);
ulong regionhandle = (ulong)Convert.ToInt64((string)requestData["region_handle"]);
Vector3 position = new Vector3(
(float)Convert.ToDecimal((string)requestData["region_pos_x"]),
(float)Convert.ToDecimal((string)requestData["region_pos_y"]),
(float)Convert.ToDecimal((string)requestData["region_pos_z"]));
Vector3 lookat = new Vector3(
(float)Convert.ToDecimal((string)requestData["lookat_x"]),
(float)Convert.ToDecimal((string)requestData["lookat_y"]),
(float)Convert.ToDecimal((string)requestData["lookat_z"]));
handlerLogOffUser = OnLogOffUser;
if (handlerLogOffUser != null)
handlerLogOffUser(userUUID);
m_userDataBaseService.LogOffUser(userUUID, RegionID, regionhandle, position, lookat);
}
catch (FormatException)
{
m_log.Warn("[LOGOUT]: Error in Logout XMLRPC Params");
return response;
}
}
else
{
return Util.CreateUnknownUserErrorResponse();
}
return response;
}
#endregion
public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle)
{
UserProfileData userProfile = m_userDataBaseService.GetUserProfile(agentID);
if (userProfile != null)
{
userProfile.CurrentAgent.Region = regionID;
userProfile.CurrentAgent.Handle = regionHandle;
m_userDataBaseService.CommitAgent(ref userProfile);
}
}
public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle)
{
UserProfileData userProfile = m_userDataBaseService.GetUserProfile(agentID);
if (userProfile != null)
{
if (userProfile.CurrentAgent.Region == regionID)
{
UserAgentData userAgent = userProfile.CurrentAgent;
if (userAgent != null && userAgent.AgentOnline)
{
userAgent.AgentOnline = false;
userAgent.LogoutTime = Util.UnixTimeSinceEpoch();
if (regionID != UUID.Zero)
{
userAgent.Region = regionID;
}
userAgent.Handle = regionHandle;
userProfile.LastLogin = userAgent.LogoutTime;
m_userDataBaseService.CommitAgent(ref userProfile);
handlerLogOffUser = OnLogOffUser;
if (handlerLogOffUser != null)
handlerLogOffUser(agentID);
}
}
}
}
public void HandleRegionStartup(UUID regionID)
{
m_userDataBaseService.LogoutUsers(regionID);
}
public void HandleRegionShutdown(UUID regionID)
{
m_userDataBaseService.LogoutUsers(regionID);
}
}
}

View File

@ -1,132 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules
{
public class UserServerAvatarAppearanceModule
{
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private UserDataBaseService m_userDataBaseService;
private BaseHttpServer m_httpServer;
public UserServerAvatarAppearanceModule(UserDataBaseService userDataBaseService)
{
m_userDataBaseService = userDataBaseService;
}
public void Initialise(IGridServiceCore core)
{
}
public void PostInitialise()
{
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
m_httpServer = httpServer;
m_httpServer.AddXmlRPCHandler("get_avatar_appearance", XmlRPCGetAvatarAppearance);
m_httpServer.AddXmlRPCHandler("update_avatar_appearance", XmlRPCUpdateAvatarAppearance);
}
public XmlRpcResponse XmlRPCGetAvatarAppearance(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
AvatarAppearance appearance;
Hashtable responseData;
if (requestData.Contains("owner"))
{
appearance = m_userDataBaseService.GetUserAppearance(new UUID((string)requestData["owner"]));
if (appearance == null)
{
responseData = new Hashtable();
responseData["error_type"] = "no appearance";
responseData["error_desc"] = "There was no appearance found for this avatar";
}
else
{
responseData = appearance.ToHashTable();
}
}
else
{
responseData = new Hashtable();
responseData["error_type"] = "unknown_avatar";
responseData["error_desc"] = "The avatar appearance requested is not in the database";
}
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRPCUpdateAvatarAppearance(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData;
if (requestData.Contains("owner"))
{
AvatarAppearance appearance = new AvatarAppearance(requestData);
// TODO: Sometime in the future we may have a database layer that is capable of updating appearance when
// the TextureEntry is null. When that happens, this check can be removed
if (appearance.Texture != null)
m_userDataBaseService.UpdateUserAppearance(new UUID((string)requestData["owner"]), appearance);
responseData = new Hashtable();
responseData["returnString"] = "TRUE";
}
else
{
responseData = new Hashtable();
responseData["error_type"] = "unknown_avatar";
responseData["error_desc"] = "The avatar appearance requested is not in the database";
}
response.Value = responseData;
return response;
}
}
}

View File

@ -1,176 +0,0 @@
/*
* 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.Collections.Generic;
using System.Net;
using System.Reflection;
using log4net;
using Nwc.XmlRpc;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Grid.Framework;
namespace OpenSim.Grid.UserServer.Modules
{
public class UserServerFriendsModule
{
//private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private UserDataBaseService m_userDataBaseService;
private BaseHttpServer m_httpServer;
public UserServerFriendsModule(UserDataBaseService userDataBaseService)
{
m_userDataBaseService = userDataBaseService;
}
public void Initialise(IGridServiceCore core)
{
}
public void PostInitialise()
{
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
m_httpServer = httpServer;
m_httpServer.AddXmlRPCHandler("add_new_user_friend", XmlRpcResponseXmlRPCAddUserFriend);
m_httpServer.AddXmlRPCHandler("remove_user_friend", XmlRpcResponseXmlRPCRemoveUserFriend);
m_httpServer.AddXmlRPCHandler("update_user_friend_perms", XmlRpcResponseXmlRPCUpdateUserFriendPerms);
m_httpServer.AddXmlRPCHandler("get_user_friend_list", XmlRpcResponseXmlRPCGetUserFriendList);
}
public XmlRpcResponse FriendListItemListtoXmlRPCResponse(List<FriendListItem> returnUsers)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
// Query Result Information
responseData["avcount"] = returnUsers.Count.ToString();
for (int i = 0; i < returnUsers.Count; i++)
{
responseData["ownerID" + i] = returnUsers[i].FriendListOwner.ToString();
responseData["friendID" + i] = returnUsers[i].Friend.ToString();
responseData["ownerPerms" + i] = returnUsers[i].FriendListOwnerPerms.ToString();
responseData["friendPerms" + i] = returnUsers[i].FriendPerms.ToString();
}
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRpcResponseXmlRPCAddUserFriend(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
string returnString = "FALSE";
// Query Result Information
if (requestData.Contains("ownerID") && requestData.Contains("friendID") &&
requestData.Contains("friendPerms"))
{
// UserManagerBase.AddNewuserFriend
m_userDataBaseService.AddNewUserFriend(new UUID((string)requestData["ownerID"]),
new UUID((string)requestData["friendID"]),
(uint)Convert.ToInt32((string)requestData["friendPerms"]));
returnString = "TRUE";
}
responseData["returnString"] = returnString;
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRpcResponseXmlRPCRemoveUserFriend(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
string returnString = "FALSE";
// Query Result Information
if (requestData.Contains("ownerID") && requestData.Contains("friendID"))
{
// UserManagerBase.AddNewuserFriend
m_userDataBaseService.RemoveUserFriend(new UUID((string)requestData["ownerID"]),
new UUID((string)requestData["friendID"]));
returnString = "TRUE";
}
responseData["returnString"] = returnString;
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRpcResponseXmlRPCUpdateUserFriendPerms(XmlRpcRequest request, IPEndPoint remoteClient)
{
XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
Hashtable responseData = new Hashtable();
string returnString = "FALSE";
if (requestData.Contains("ownerID") && requestData.Contains("friendID") &&
requestData.Contains("friendPerms"))
{
m_userDataBaseService.UpdateUserFriendPerms(new UUID((string)requestData["ownerID"]),
new UUID((string)requestData["friendID"]),
(uint)Convert.ToInt32((string)requestData["friendPerms"]));
// UserManagerBase.
returnString = "TRUE";
}
responseData["returnString"] = returnString;
response.Value = responseData;
return response;
}
public XmlRpcResponse XmlRpcResponseXmlRPCGetUserFriendList(XmlRpcRequest request, IPEndPoint remoteClient)
{
// XmlRpcResponse response = new XmlRpcResponse();
Hashtable requestData = (Hashtable)request.Params[0];
// Hashtable responseData = new Hashtable();
List<FriendListItem> returndata = new List<FriendListItem>();
if (requestData.Contains("ownerID"))
{
returndata = m_userDataBaseService.GetUserFriendList(new UUID((string)requestData["ownerID"]));
}
return FriendListItemListtoXmlRPCResponse(returndata);
}
}
}

View File

@ -1,316 +0,0 @@
/*
* 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.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Framework.Statistics;
using OpenSim.Grid.Communications.OGS1;
using OpenSim.Grid.Framework;
using OpenSim.Grid.UserServer.Modules;
using Nini.Config;
namespace OpenSim.Grid.UserServer
{
/// <summary>
/// Grid user server main class
/// </summary>
public class OpenUser_Main : BaseOpenSimServer, IGridServiceCore
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected UserConfig Cfg;
protected UserDataBaseService m_userDataBaseService;
public UserManager m_userManager;
protected UserServerAvatarAppearanceModule m_avatarAppearanceModule;
protected UserServerFriendsModule m_friendsModule;
public UserLoginService m_loginService;
public MessageServersConnector m_messagesService;
protected UserServerCommandModule m_consoleCommandModule;
protected UserServerEventDispatchModule m_eventDispatcher;
protected AvatarCreationModule m_appearanceModule;
protected static string m_consoleType = "local";
protected static IConfigSource m_config = null;
protected static string m_configFile = "UserServer_Config.xml";
public static void Main(string[] args)
{
ArgvConfigSource argvSource = new ArgvConfigSource(args);
argvSource.AddSwitch("Startup", "console", "c");
argvSource.AddSwitch("Startup", "xmlfile", "x");
IConfig startupConfig = argvSource.Configs["Startup"];
if (startupConfig != null)
{
m_consoleType = startupConfig.GetString("console", "local");
m_configFile = startupConfig.GetString("xmlfile", "UserServer_Config.xml");
}
m_config = argvSource;
XmlConfigurator.Configure();
m_log.Info("Launching UserServer...");
OpenUser_Main userserver = new OpenUser_Main();
userserver.Startup();
userserver.Work();
}
public OpenUser_Main()
{
switch (m_consoleType)
{
case "rest":
m_console = new RemoteConsole("User");
break;
case "basic":
m_console = new CommandConsole("User");
break;
default:
m_console = new LocalConsole("User");
break;
}
MainConsole.Instance = m_console;
}
public void Work()
{
m_console.Output("Enter help for a list of commands\n");
while (true)
{
m_console.Prompt();
}
}
protected override void StartupSpecific()
{
IInterServiceInventoryServices inventoryService = StartupCoreComponents();
m_stats = StatsManager.StartCollectingUserStats();
//setup services/modules
StartupUserServerModules();
StartOtherComponents(inventoryService);
//PostInitialise the modules
PostInitialiseModules();
//register http handlers and start http server
m_log.Info("[STARTUP]: Starting HTTP process");
RegisterHttpHandlers();
m_httpServer.Start();
base.StartupSpecific();
}
protected virtual IInterServiceInventoryServices StartupCoreComponents()
{
Cfg = new UserConfig("USER SERVER", (Path.Combine(Util.configDir(), m_configFile)));
m_httpServer = new BaseHttpServer(Cfg.HttpPort);
if (m_console is RemoteConsole)
{
RemoteConsole c = (RemoteConsole)m_console;
c.SetServer(m_httpServer);
IConfig netConfig = m_config.AddConfig("Network");
netConfig.Set("ConsoleUser", Cfg.ConsoleUser);
netConfig.Set("ConsolePass", Cfg.ConsolePass);
c.ReadConfig(m_config);
}
RegisterInterface<CommandConsole>(m_console);
RegisterInterface<UserConfig>(Cfg);
//Should be in modules?
IInterServiceInventoryServices inventoryService = new OGS1InterServiceInventoryService(Cfg.InventoryUrl);
// IRegionProfileRouter regionProfileService = new RegionProfileServiceProxy();
RegisterInterface<IInterServiceInventoryServices>(inventoryService);
// RegisterInterface<IRegionProfileRouter>(regionProfileService);
return inventoryService;
}
/// <summary>
/// Start up the user manager
/// </summary>
/// <param name="inventoryService"></param>
protected virtual void StartupUserServerModules()
{
m_log.Info("[STARTUP]: Establishing data connection");
//we only need core components so we can request them from here
IInterServiceInventoryServices inventoryService;
TryGet<IInterServiceInventoryServices>(out inventoryService);
CommunicationsManager commsManager = new UserServerCommsManager(inventoryService);
//setup database access service, for now this has to be created before the other modules.
m_userDataBaseService = new UserDataBaseService(commsManager);
m_userDataBaseService.Initialise(this);
//TODO: change these modules so they fetch the databaseService class in the PostInitialise method
m_userManager = new UserManager(m_userDataBaseService);
m_userManager.Initialise(this);
m_avatarAppearanceModule = new UserServerAvatarAppearanceModule(m_userDataBaseService);
m_avatarAppearanceModule.Initialise(this);
m_friendsModule = new UserServerFriendsModule(m_userDataBaseService);
m_friendsModule.Initialise(this);
m_consoleCommandModule = new UserServerCommandModule();
m_consoleCommandModule.Initialise(this);
m_messagesService = new MessageServersConnector();
m_messagesService.Initialise(this);
}
protected virtual void StartOtherComponents(IInterServiceInventoryServices inventoryService)
{
m_appearanceModule = new AvatarCreationModule(m_userDataBaseService, Cfg, inventoryService);
m_appearanceModule.Initialise(this);
StartupLoginService(inventoryService);
//
// Get the minimum defaultLevel to access to the grid
//
m_loginService.setloginlevel((int)Cfg.DefaultUserLevel);
RegisterInterface<UserLoginService>(m_loginService); //TODO: should be done in the login service
m_eventDispatcher = new UserServerEventDispatchModule(m_userManager, m_messagesService, m_loginService);
m_eventDispatcher.Initialise(this);
}
/// <summary>
/// Start up the login service
/// </summary>
/// <param name="inventoryService"></param>
protected virtual void StartupLoginService(IInterServiceInventoryServices inventoryService)
{
m_loginService = new UserLoginService(
m_userDataBaseService, inventoryService, new LibraryRootFolder(Cfg.LibraryXmlfile), Cfg, Cfg.DefaultStartupMsg, new RegionProfileServiceProxy());
}
protected virtual void PostInitialiseModules()
{
m_consoleCommandModule.PostInitialise(); //it will register its Console command handlers in here
m_userDataBaseService.PostInitialise();
m_messagesService.PostInitialise();
m_eventDispatcher.PostInitialise(); //it will register event handlers in here
m_userManager.PostInitialise();
m_avatarAppearanceModule.PostInitialise();
m_friendsModule.PostInitialise();
}
protected virtual void RegisterHttpHandlers()
{
m_loginService.RegisterHandlers(m_httpServer, Cfg.EnableLLSDLogin, true);
m_userManager.RegisterHandlers(m_httpServer);
m_friendsModule.RegisterHandlers(m_httpServer);
m_avatarAppearanceModule.RegisterHandlers(m_httpServer);
m_messagesService.RegisterHandlers(m_httpServer);
}
public override void ShutdownSpecific()
{
m_eventDispatcher.Close();
}
#region IUGAIMCore
protected Dictionary<Type, object> m_moduleInterfaces = new Dictionary<Type, object>();
/// <summary>
/// Register an Module interface.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="iface"></param>
public void RegisterInterface<T>(T iface)
{
lock (m_moduleInterfaces)
{
if (!m_moduleInterfaces.ContainsKey(typeof(T)))
{
m_moduleInterfaces.Add(typeof(T), iface);
}
}
}
public bool TryGet<T>(out T iface)
{
if (m_moduleInterfaces.ContainsKey(typeof(T)))
{
iface = (T)m_moduleInterfaces[typeof(T)];
return true;
}
iface = default(T);
return false;
}
public T Get<T>()
{
return (T)m_moduleInterfaces[typeof(T)];
}
public BaseHttpServer GetHttpServer()
{
return m_httpServer;
}
#endregion
public void TestResponse(List<InventoryFolderBase> resp)
{
m_console.Output("response got");
}
}
}

View File

@ -1,63 +0,0 @@
/*
* 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.Reflection;
using System.Runtime.InteropServices;
// General information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly : AssemblyTitle("OGS-UserServer")]
[assembly : AssemblyDescription("")]
[assembly : AssemblyConfiguration("")]
[assembly : AssemblyCompany("http://opensimulator.org")]
[assembly : AssemblyProduct("OGS-UserServer")]
[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
[assembly : AssemblyTrademark("")]
[assembly : AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly : ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly : Guid("e266513a-090b-4d38-80f6-8599eef68c8c")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly : AssemblyVersion("0.6.5.*")]
[assembly : AssemblyFileVersion("0.6.5.0")]

View File

@ -1,375 +0,0 @@
/*
* 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.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Framework.Statistics;
using OpenSim.Grid.Communications.OGS1;
using OpenSim.Grid.Framework;
using OpenSim.Grid.UserServer.Modules;
namespace OpenSim.Grid.UserServer
{
public class UserServerCommandModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
protected CommandConsole m_console;
protected UserConfig m_cfg;
protected UserDataBaseService m_userDataBaseService;
protected UserLoginService m_loginService;
protected UUID m_lastCreatedUser = UUID.Random();
protected IGridServiceCore m_core;
public UserServerCommandModule()
{
}
public void Initialise(IGridServiceCore core)
{
m_core = core;
}
public void PostInitialise()
{
UserConfig cfg;
if (m_core.TryGet<UserConfig>(out cfg))
{
m_cfg = cfg;
}
UserDataBaseService userDBservice;
if (m_core.TryGet<UserDataBaseService>(out userDBservice))
{
m_userDataBaseService = userDBservice;
}
UserLoginService loginService;
if (m_core.TryGet<UserLoginService>(out loginService))
{
m_loginService = loginService;
}
CommandConsole console;
if ((m_core.TryGet<CommandConsole>(out console)) && (m_cfg != null)
&& (m_userDataBaseService != null) && (m_loginService != null))
{
RegisterConsoleCommands(console);
}
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
}
private void RegisterConsoleCommands(CommandConsole console)
{
m_console = console;
m_console.Commands.AddCommand("userserver", false, "create user",
"create user [<first> [<last> [<x> <y> [email]]]]",
"Create a new user account", RunCommand);
m_console.Commands.AddCommand("userserver", false, "reset user password",
"reset user password [<first> [<last> [<new password>]]]",
"Reset a user's password", RunCommand);
m_console.Commands.AddCommand("userserver", false, "login level",
"login level <level>",
"Set the minimum user level to log in", HandleLoginCommand);
m_console.Commands.AddCommand("userserver", false, "login reset",
"login reset",
"Reset the login level to allow all users",
HandleLoginCommand);
m_console.Commands.AddCommand("userserver", false, "login text",
"login text <text>",
"Set the text users will see on login", HandleLoginCommand);
m_console.Commands.AddCommand("userserver", false, "test-inventory",
"test-inventory",
"Perform a test inventory transaction", RunCommand);
m_console.Commands.AddCommand("userserver", false, "logoff-user",
"logoff-user <first> <last> <message>",
"Log off a named user", RunCommand);
}
#region Console Command Handlers
public void do_create(string[] args)
{
switch (args[0])
{
case "user":
CreateUser(args);
break;
}
}
/// <summary>
/// Execute switch for some of the reset commands
/// </summary>
/// <param name="args"></param>
protected void Reset(string[] args)
{
if (args.Length == 0)
return;
switch (args[0])
{
case "user":
switch (args[1])
{
case "password":
ResetUserPassword(args);
break;
}
break;
}
}
/// <summary>
/// Create a new user
/// </summary>
/// <param name="cmdparams">string array with parameters: firstname, lastname, password, locationX, locationY, email</param>
protected void CreateUser(string[] cmdparams)
{
string firstName;
string lastName;
string password;
string email;
uint regX = 1000;
uint regY = 1000;
if (cmdparams.Length < 2)
firstName = MainConsole.Instance.CmdPrompt("First name", "Default");
else firstName = cmdparams[1];
if (cmdparams.Length < 3)
lastName = MainConsole.Instance.CmdPrompt("Last name", "User");
else lastName = cmdparams[2];
if (cmdparams.Length < 4)
password = MainConsole.Instance.PasswdPrompt("Password");
else password = cmdparams[3];
if (cmdparams.Length < 5)
regX = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region X", regX.ToString()));
else regX = Convert.ToUInt32(cmdparams[4]);
if (cmdparams.Length < 6)
regY = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region Y", regY.ToString()));
else regY = Convert.ToUInt32(cmdparams[5]);
if (cmdparams.Length < 7)
email = MainConsole.Instance.CmdPrompt("Email", "");
else email = cmdparams[6];
if (null == m_userDataBaseService.GetUserProfile(firstName, lastName))
{
m_lastCreatedUser = m_userDataBaseService.AddUser(firstName, lastName, password, email, regX, regY);
}
else
{
m_log.ErrorFormat("[USERS]: A user with the name {0} {1} already exists!", firstName, lastName);
}
}
/// <summary>
/// Reset a user password.
/// </summary>
/// <param name="cmdparams"></param>
private void ResetUserPassword(string[] cmdparams)
{
string firstName;
string lastName;
string newPassword;
if (cmdparams.Length < 3)
firstName = MainConsole.Instance.CmdPrompt("First name");
else firstName = cmdparams[2];
if (cmdparams.Length < 4)
lastName = MainConsole.Instance.CmdPrompt("Last name");
else lastName = cmdparams[3];
if (cmdparams.Length < 5)
newPassword = MainConsole.Instance.PasswdPrompt("New password");
else newPassword = cmdparams[4];
m_userDataBaseService.ResetUserPassword(firstName, lastName, newPassword);
}
/*
private void HandleTestCommand(string module, string[] cmd)
{
m_log.Info("test command received");
}
*/
private void HandleLoginCommand(string module, string[] cmd)
{
string subcommand = cmd[1];
switch (subcommand)
{
case "level":
// Set the minimal level to allow login
// Useful to allow grid update without worrying about users.
// or fixing critical issues
//
if (cmd.Length > 2)
{
int level = Convert.ToInt32(cmd[2]);
m_loginService.setloginlevel(level);
}
break;
case "reset":
m_loginService.setloginlevel(0);
break;
case "text":
if (cmd.Length > 2)
{
m_loginService.setwelcometext(cmd[2]);
}
break;
}
}
public void RunCommand(string module, string[] cmd)
{
List<string> args = new List<string>(cmd);
string command = cmd[0];
args.RemoveAt(0);
string[] cmdparams = args.ToArray();
switch (command)
{
case "create":
do_create(cmdparams);
break;
case "reset":
Reset(cmdparams);
break;
case "test-inventory":
// RestObjectPosterResponse<List<InventoryFolderBase>> requester = new RestObjectPosterResponse<List<InventoryFolderBase>>();
// requester.ReturnResponseVal = TestResponse;
// requester.BeginPostObject<UUID>(m_userManager._config.InventoryUrl + "RootFolders/", m_lastCreatedUser);
SynchronousRestObjectPoster.BeginPostObject<UUID, List<InventoryFolderBase>>(
"POST", m_cfg.InventoryUrl + "RootFolders/", m_lastCreatedUser);
break;
case "logoff-user":
if (cmdparams.Length >= 3)
{
string firstname = cmdparams[0];
string lastname = cmdparams[1];
string message = "";
for (int i = 2; i < cmdparams.Length; i++)
message += " " + cmdparams[i];
UserProfileData theUser = null;
try
{
theUser = m_loginService.GetTheUser(firstname, lastname);
}
catch (Exception)
{
m_log.Error("[LOGOFF]: Error getting user data from the database.");
}
if (theUser != null)
{
if (theUser.CurrentAgent != null)
{
if (theUser.CurrentAgent.AgentOnline)
{
m_log.Info("[LOGOFF]: Logging off requested user!");
m_loginService.LogOffUser(theUser, message);
theUser.CurrentAgent.AgentOnline = false;
m_loginService.CommitAgent(ref theUser);
}
else
{
m_log.Info(
"[LOGOFF]: User Doesn't appear to be online, sending the logoff message anyway.");
m_loginService.LogOffUser(theUser, message);
theUser.CurrentAgent.AgentOnline = false;
m_loginService.CommitAgent(ref theUser);
}
}
else
{
m_log.Error(
"[LOGOFF]: Unable to logoff-user. User doesn't have an agent record so I can't find the simulator to notify");
}
}
else
{
m_log.Info("[LOGOFF]: User doesn't exist in the database");
}
}
else
{
m_log.Error(
"[LOGOFF]: Invalid amount of parameters. logoff-user takes at least three. Firstname, Lastname, and message");
}
break;
}
}
}
#endregion
}

View File

@ -1,39 +0,0 @@
/*
* 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 OpenSim.Framework.Communications;
namespace OpenSim.Grid.UserServer
{
public class UserServerCommsManager : CommunicationsManager
{
public UserServerCommsManager(IInterServiceInventoryServices interServiceInventoryService)
: base(null, null)
{
}
}
}

View File

@ -1,142 +0,0 @@
/*
* 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.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using OpenMetaverse;
using OpenSim.Data;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Console;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Framework.Statistics;
using OpenSim.Grid.Communications.OGS1;
using OpenSim.Grid.Framework;
using OpenSim.Grid.UserServer.Modules;
namespace OpenSim.Grid.UserServer
{
//Do we actually need these event dispatchers?
//shouldn't the other modules just directly register event handlers to each other?
public class UserServerEventDispatchModule
{
protected UserManager m_userManager;
protected MessageServersConnector m_messagesService;
protected UserLoginService m_loginService;
public UserServerEventDispatchModule(UserManager userManager, MessageServersConnector messagesService, UserLoginService loginService)
{
m_userManager = userManager;
m_messagesService = messagesService;
m_loginService = loginService;
}
public void Initialise(IGridServiceCore core)
{
}
public void PostInitialise()
{
m_loginService.OnUserLoggedInAtLocation += NotifyMessageServersUserLoggedInToLocation;
m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff;
m_messagesService.OnAgentLocation += HandleAgentLocation;
m_messagesService.OnAgentLeaving += HandleAgentLeaving;
m_messagesService.OnRegionStartup += HandleRegionStartup;
m_messagesService.OnRegionShutdown += HandleRegionShutdown;
}
public void RegisterHandlers(BaseHttpServer httpServer)
{
}
public void Close()
{
m_loginService.OnUserLoggedInAtLocation -= NotifyMessageServersUserLoggedInToLocation;
}
#region Event Handlers
public void NotifyMessageServersUserLoggOff(UUID agentID)
{
m_messagesService.TellMessageServersAboutUserLogoff(agentID);
}
public void NotifyMessageServersUserLoggedInToLocation(UUID agentID, UUID sessionID, UUID RegionID,
ulong regionhandle, float positionX, float positionY,
float positionZ, string firstname, string lastname)
{
m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX,
positionY, positionZ, firstname, lastname);
}
public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle)
{
m_userManager.HandleAgentLocation(agentID, regionID, regionHandle);
}
public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle)
{
m_userManager.HandleAgentLeaving(agentID, regionID, regionHandle);
}
public void HandleRegionStartup(UUID regionID)
{
// This might seem strange, that we send this back to the
// server it came from. But there is method to the madness.
// There can be multiple user servers on the same database,
// and each can have multiple messaging servers. So, we send
// it to all known user servers, who send it to all known
// message servers. That way, we should be able to finally
// update presence to all regions and thereby all friends
//
m_userManager.HandleRegionStartup(regionID);
m_messagesService.TellMessageServersAboutRegionShutdown(regionID);
}
public void HandleRegionShutdown(UUID regionID)
{
// This might seem strange, that we send this back to the
// server it came from. But there is method to the madness.
// There can be multiple user servers on the same database,
// and each can have multiple messaging servers. So, we send
// it to all known user servers, who send it to all known
// message servers. That way, we should be able to finally
// update presence to all regions and thereby all friends
//
m_userManager.HandleRegionShutdown(regionID);
m_messagesService.TellMessageServersAboutRegionShutdown(regionID);
}
#endregion
}
}

View File

@ -10,6 +10,7 @@ using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Capabilities;
using OpenSim.Framework.Console;
using OpenSim.Server.Base;
using OpenSim.Services.Interfaces;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
@ -19,6 +20,7 @@ namespace OpenSim.Services.LLLoginService
public class LLLoginService : ILoginService
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static bool Initialized = false;
private IUserAccountService m_UserAccountService;
private IAuthenticationService m_AuthenticationService;
@ -33,6 +35,7 @@ namespace OpenSim.Services.LLLoginService
private string m_DefaultRegionName;
private string m_WelcomeMessage;
private bool m_RequireInventory;
private int m_MinLoginLevel;
public LLLoginService(IConfigSource config, ISimulationService simService, ILibraryService libraryService)
{
@ -84,6 +87,12 @@ namespace OpenSim.Services.LLLoginService
m_LibraryService = ServerUtils.LoadPlugin<ILibraryService>(libService, args);
}
if (!Initialized)
{
Initialized = true;
RegisterCommands();
}
m_log.DebugFormat("[LLOGIN SERVICE]: Starting...");
}
@ -107,6 +116,12 @@ namespace OpenSim.Services.LLLoginService
return LLFailedLoginResponse.UserProblem;
}
if (account.UserLevel < m_MinLoginLevel)
{
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: login is blocked for user level {0}", account.UserLevel);
return LLFailedLoginResponse.LoginBlockedProblem;
}
// Authenticate this user
if (!passwd.StartsWith("$1$"))
passwd = "$1$" + Util.Md5Hash(passwd);
@ -379,5 +394,50 @@ namespace OpenSim.Services.LLLoginService
return null;
}
#region Console Commands
private void RegisterCommands()
{
//MainConsole.Instance.Commands.AddCommand
MainConsole.Instance.Commands.AddCommand("loginservice", false, "login level",
"login level <level>",
"Set the minimum user level to log in", HandleLoginCommand);
MainConsole.Instance.Commands.AddCommand("loginservice", false, "login reset",
"login reset",
"Reset the login level to allow all users",
HandleLoginCommand);
MainConsole.Instance.Commands.AddCommand("loginservice", false, "login text",
"login text <text>",
"Set the text users will see on login", HandleLoginCommand);
}
private void HandleLoginCommand(string module, string[] cmd)
{
string subcommand = cmd[1];
switch (subcommand)
{
case "level":
// Set the minimum level to allow login
// Useful to allow grid update without worrying about users.
// or fixing critical issues
//
if (cmd.Length > 2)
Int32.TryParse(cmd[2], out m_MinLoginLevel);
break;
case "reset":
m_MinLoginLevel = 0;
break;
case "text":
if (cmd.Length > 2)
m_WelcomeMessage = cmd[2];
break;
}
}
}
#endregion
}

View File

@ -787,136 +787,6 @@
<!-- OGS projects -->
<Project frameworkVersion="v3_5" name="OpenSim.Grid.Communications.OGS1" path="OpenSim/Grid/Communications/OGS1" 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.Communications" />
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Grid.Framework" path="OpenSim/Grid/Framework" 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="System.Data"/>
<Reference name="System.Xml"/>
<Reference name="OpenSim.Data"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Grid.GridServer" path="OpenSim/Grid/GridServer" 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="System.Data"/>
<Reference name="System.Xml"/>
<Reference name="Mono.Addins.dll" />
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Data"/>
<Reference name="OpenSim.Data.MySQL"/>
<Reference name="OpenSim.Grid.Framework"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Reference name="Nini.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Grid.GridServer.Modules" path="OpenSim/Grid/GridServer.Modules" 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="System.Data"/>
<Reference name="System.Xml"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Data"/>
<Reference name="OpenSim.Data.MySQL"/>
<Reference name="OpenSim.Grid.Framework"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenSim.Grid.GridServer"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
<Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Server.Base" path="OpenSim/Server/Base" type="Library">
<Configuration name="Debug">
@ -1039,162 +909,6 @@
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Grid.UserServer.Modules" path="OpenSim/Grid/UserServer.Modules" 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="System.Data"/>
<Reference name="System.Xml"/>
<Reference name="System.Web"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Data"/>
<Reference name="OpenSim.Framework.Capabilities"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Framework.Statistics"/>
<Reference name="OpenSim.Services.Interfaces"/>
<Reference name="OpenSim.Services.Connectors"/>
<Reference name="OpenSim.Grid.Framework"/>
<Reference name="OpenSim.Grid.Communications.OGS1"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.StructuredData.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Reference name="DotNetOpenId.dll"/>
<Reference name="Nini.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Grid.UserServer" path="OpenSim/Grid/UserServer" type="Exe">
<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="System.Data"/>
<Reference name="System.Xml"/>
<Reference name="System.Web"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Data"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Framework.Statistics"/>
<Reference name="OpenSim.Grid.Communications.OGS1"/>
<Reference name="OpenSim.Grid.Framework"/>
<Reference name="OpenSim.Grid.UserServer.Modules"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.StructuredData.dll"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Reference name="Nini.dll"/>
<Reference name="DotNetOpenId.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Grid.MessagingServer.Modules" path="OpenSim/Grid/MessagingServer.Modules" 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="System.Data"/>
<Reference name="System.Xml"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Data"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Grid.Framework"/>
<Reference name="OpenSim.Services.Interfaces"/>
<Reference name="OpenSim.Services.Connectors"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Reference name="Nini.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Grid.MessagingServer" path="OpenSim/Grid/MessagingServer" type="Exe">
<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="System.Data"/>
<Reference name="System.Xml"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Communications"/>
<Reference name="OpenSim.Data"/>
<Reference name="OpenSim.Framework.Servers"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Grid.Framework"/>
<Reference name="OpenSim.Grid.MessagingServer.Modules"/>
<Reference name="OpenMetaverseTypes.dll"/>
<Reference name="OpenMetaverse.dll"/>
<Reference name="XMLRPC.dll"/>
<Reference name="log4net.dll"/>
<Reference name="Nini.dll"/>
<Files>
<Match pattern="*.cs" recurse="true"/>
</Files>
</Project>
<Project frameworkVersion="v3_5" name="OpenSim.Services.AssetService" path="OpenSim/Services/AssetService" type="Library">
<Configuration name="Debug">
<Options>
@ -1462,6 +1176,7 @@
<Reference name="System"/>
<Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Capabilities"/>
<Reference name="OpenSim.Framework.Console"/>
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
<Reference name="OpenSim.Services.Interfaces"/>
<Reference name="OpenSim.Services.Base"/>