Agent gets there through the Gatekeeper, but still a few quirks to fix.
parent
5e034f5933
commit
b2e6ec9e12
|
@ -194,9 +194,11 @@ namespace OpenSim.Framework
|
||||||
OSDArray urls = new OSDArray(ServiceURLs.Count * 2);
|
OSDArray urls = new OSDArray(ServiceURLs.Count * 2);
|
||||||
foreach (KeyValuePair<string, object> kvp in ServiceURLs)
|
foreach (KeyValuePair<string, object> kvp in ServiceURLs)
|
||||||
{
|
{
|
||||||
|
//System.Console.WriteLine("XXX " + kvp.Key + "=" + kvp.Value);
|
||||||
urls.Add(OSD.FromString(kvp.Key));
|
urls.Add(OSD.FromString(kvp.Key));
|
||||||
urls.Add(OSD.FromString((kvp.Value == null) ? string.Empty : kvp.Value.ToString()));
|
urls.Add(OSD.FromString((kvp.Value == null) ? string.Empty : kvp.Value.ToString()));
|
||||||
}
|
}
|
||||||
|
args["service_urls"] = urls;
|
||||||
}
|
}
|
||||||
|
|
||||||
return args;
|
return args;
|
||||||
|
@ -289,6 +291,8 @@ namespace OpenSim.Framework
|
||||||
for (int i = 0; i < urls.Count / 2; i++)
|
for (int i = 0; i < urls.Count / 2; i++)
|
||||||
{
|
{
|
||||||
ServiceURLs[urls[i * 2].AsString()] = urls[(i * 2) + 1].AsString();
|
ServiceURLs[urls[i * 2].AsString()] = urls[(i * 2) + 1].AsString();
|
||||||
|
//System.Console.WriteLine("XXX " + urls[i * 2].AsString() + "=" + urls[(i * 2) + 1].AsString());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -239,12 +239,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
//avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
//avatar.Scene.RemoveCapsHandler(avatar.UUID);
|
||||||
|
|
||||||
string capsPath = String.Empty;
|
string capsPath = String.Empty;
|
||||||
|
|
||||||
|
AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
|
||||||
AgentCircuitData agentCircuit = sp.ControllingClient.RequestClientInfo();
|
AgentCircuitData agentCircuit = sp.ControllingClient.RequestClientInfo();
|
||||||
agentCircuit.BaseFolder = UUID.Zero;
|
|
||||||
agentCircuit.InventoryFolder = UUID.Zero;
|
|
||||||
agentCircuit.startpos = position;
|
agentCircuit.startpos = position;
|
||||||
agentCircuit.child = true;
|
agentCircuit.child = true;
|
||||||
agentCircuit.Appearance = sp.Appearance;
|
agentCircuit.Appearance = sp.Appearance;
|
||||||
|
if (currentAgentCircuit != null)
|
||||||
|
agentCircuit.ServiceURLs = currentAgentCircuit.ServiceURLs;
|
||||||
|
|
||||||
if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
|
if (NeedsNewAgent(oldRegionX, newRegionX, oldRegionY, newRegionY))
|
||||||
{
|
{
|
||||||
|
@ -255,9 +257,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
string reason = String.Empty;
|
string reason = String.Empty;
|
||||||
|
|
||||||
// Let's create an agent there if one doesn't exist yet.
|
// Let's create an agent there if one doesn't exist yet.
|
||||||
if (!m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason))
|
if (!CreateAgent(reg, finalDestination, agentCircuit, teleportFlags, out reason))
|
||||||
{
|
{
|
||||||
sp.ControllingClient.SendTeleportFailed(String.Format("Destination is not accepting teleports: {0}",
|
sp.ControllingClient.SendTeleportFailed(String.Format("Destination refused: {0}",
|
||||||
reason));
|
reason));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -345,8 +347,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
agent.CallbackURI = "http://" + sp.Scene.RegionInfo.ExternalHostName + ":" + sp.Scene.RegionInfo.HttpPort +
|
agent.CallbackURI = "http://" + sp.Scene.RegionInfo.ExternalHostName + ":" + sp.Scene.RegionInfo.HttpPort +
|
||||||
"/agent/" + sp.UUID.ToString() + "/" + sp.Scene.RegionInfo.RegionID.ToString() + "/release/";
|
"/agent/" + sp.UUID.ToString() + "/" + sp.Scene.RegionInfo.RegionID.ToString() + "/release/";
|
||||||
|
|
||||||
// Straight to the region. Safe.
|
UpdateAgent(reg, finalDestination, agent);
|
||||||
m_aScene.SimulationService.UpdateAgent(reg, agent);
|
|
||||||
|
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID);
|
"[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID);
|
||||||
|
@ -444,6 +445,16 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual bool CreateAgent(GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason)
|
||||||
|
{
|
||||||
|
return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent)
|
||||||
|
{
|
||||||
|
return m_aScene.SimulationService.UpdateAgent(reg, agent);
|
||||||
|
}
|
||||||
|
|
||||||
protected void KillEntity(Scene scene, uint localID)
|
protected void KillEntity(Scene scene, uint localID)
|
||||||
{
|
{
|
||||||
scene.SendKillObject(localID);
|
scene.SendKillObject(localID);
|
||||||
|
|
|
@ -29,6 +29,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
|
using OpenSim.Framework;
|
||||||
using OpenSim.Region.Framework.Interfaces;
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes;
|
using OpenSim.Region.Framework.Scenes;
|
||||||
using OpenSim.Services.Connectors.Hypergrid;
|
using OpenSim.Services.Connectors.Hypergrid;
|
||||||
|
@ -58,6 +59,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GatekeeperServiceConnector m_GatekeeperConnector;
|
||||||
|
|
||||||
#region ISharedRegionModule
|
#region ISharedRegionModule
|
||||||
|
|
||||||
public override string Name
|
public override string Name
|
||||||
|
@ -74,6 +77,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
if (name == Name)
|
if (name == Name)
|
||||||
{
|
{
|
||||||
m_agentsInTransit = new List<UUID>();
|
m_agentsInTransit = new List<UUID>();
|
||||||
|
m_GatekeeperConnector = new GatekeeperServiceConnector();
|
||||||
m_Enabled = true;
|
m_Enabled = true;
|
||||||
m_log.InfoFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name);
|
m_log.InfoFormat("[HG ENTITY TRANSFER MODULE]: {0} enabled.", Name);
|
||||||
}
|
}
|
||||||
|
@ -131,6 +135,29 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool CreateAgent(GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason)
|
||||||
|
{
|
||||||
|
reason = string.Empty;
|
||||||
|
if (reg.RegionLocX != finalDestination.RegionLocX && reg.RegionLocY != finalDestination.RegionLocY)
|
||||||
|
{
|
||||||
|
// this user is going to another grid
|
||||||
|
reg.RegionName = finalDestination.RegionName;
|
||||||
|
return m_GatekeeperConnector.CreateAgent(reg, agentCircuit, teleportFlags, out reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_aScene.SimulationService.CreateAgent(reg, agentCircuit, teleportFlags, out reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool UpdateAgent(GridRegion reg, GridRegion finalDestination, AgentData agent)
|
||||||
|
{
|
||||||
|
if (reg.RegionLocX != finalDestination.RegionLocX && reg.RegionLocY != finalDestination.RegionLocY)
|
||||||
|
{
|
||||||
|
// this user is going to another grid
|
||||||
|
return m_GatekeeperConnector.UpdateAgent(reg, agent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_aScene.SimulationService.UpdateAgent(reg, agent);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,7 @@
|
||||||
<RegionModule id="LLLoginServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Login.LLLoginServiceInConnectorModule" /> \
|
<RegionModule id="LLLoginServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Login.LLLoginServiceInConnectorModule" /> \
|
||||||
<RegionModule id="SimulationServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Simulation.SimulationServiceInConnectorModule" /> \
|
<RegionModule id="SimulationServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Simulation.SimulationServiceInConnectorModule" /> \
|
||||||
<RegionModule id="GridInfoServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Grid.GridInfoServiceInConnectorModule" /> \
|
<RegionModule id="GridInfoServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Grid.GridInfoServiceInConnectorModule" /> \
|
||||||
|
<RegionModule id="AuthenticationServiceInConnectorModule" type="OpenSim.Region.CoreModules.ServiceConnectorsIn.Authentication.AuthenticationServiceInConnectorModule" />
|
||||||
<RegionModule id="AccessModule" type="OpenSim.Region.CoreModules.World.AccessModule" /> \
|
<RegionModule id="AccessModule" type="OpenSim.Region.CoreModules.World.AccessModule" /> \
|
||||||
|
|
||||||
</Extension>
|
</Extension>
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* 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.Reflection;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using log4net;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
using OpenSim.Server.Base;
|
||||||
|
using OpenSim.Server.Handlers.Base;
|
||||||
|
using OpenSim.Server.Handlers.Authentication;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Authentication
|
||||||
|
{
|
||||||
|
public class AuthenticationServiceInConnectorModule : ISharedRegionModule
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private static bool m_Enabled = false;
|
||||||
|
|
||||||
|
private IConfigSource m_Config;
|
||||||
|
bool m_Registered = false;
|
||||||
|
|
||||||
|
#region IRegionModule interface
|
||||||
|
|
||||||
|
public void Initialise(IConfigSource config)
|
||||||
|
{
|
||||||
|
m_Config = config;
|
||||||
|
IConfig moduleConfig = config.Configs["Modules"];
|
||||||
|
if (moduleConfig != null)
|
||||||
|
{
|
||||||
|
m_Enabled = moduleConfig.GetBoolean("AuthenticationServiceInConnector", false);
|
||||||
|
if (m_Enabled)
|
||||||
|
{
|
||||||
|
m_log.Info("[AUTHENTICATION IN CONNECTOR]: Authentication Service In Connector enabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PostInitialise()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public Type ReplaceableInterface
|
||||||
|
{
|
||||||
|
get { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get { return "AuthenticationServiceInConnectorModule"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRegion(Scene scene)
|
||||||
|
{
|
||||||
|
if (!m_Enabled)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveRegion(Scene scene)
|
||||||
|
{
|
||||||
|
if (!m_Enabled)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegionLoaded(Scene scene)
|
||||||
|
{
|
||||||
|
if (!m_Enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!m_Registered)
|
||||||
|
{
|
||||||
|
m_Registered = true;
|
||||||
|
|
||||||
|
m_log.Info("[AUTHENTICATION IN CONNECTOR]: Starting...");
|
||||||
|
|
||||||
|
new AuthenticationServiceConnector(m_Config, MainServer.Instance, "AuthenticationService");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
using OpenSim.Server.Base;
|
||||||
|
using OpenSim.Server.Handlers.Base;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
using OpenSim.Server.Handlers.Simulation;
|
||||||
|
using Utils = OpenSim.Server.Handlers.Simulation.Utils;
|
||||||
|
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.StructuredData;
|
||||||
|
using Nini.Config;
|
||||||
|
using log4net;
|
||||||
|
|
||||||
|
|
||||||
|
namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
|
{
|
||||||
|
public class AgentHandler : OpenSim.Server.Handlers.Simulation.AgentHandler
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private IGatekeeperService m_GatekeeperService;
|
||||||
|
|
||||||
|
public AgentHandler(IGatekeeperService gatekeeper)
|
||||||
|
{
|
||||||
|
m_GatekeeperService = gatekeeper;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
|
||||||
|
{
|
||||||
|
return m_GatekeeperService.LoginAgent(aCircuit, destination, out reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool UpdateAgent(GridRegion destination, AgentData agent)
|
||||||
|
{
|
||||||
|
return m_GatekeeperService.UpdateAgent(destination, agent);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void ReleaseAgent(UUID regionID, UUID id)
|
||||||
|
{
|
||||||
|
m_GatekeeperService.ReleaseAgent(regionID, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -26,21 +26,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Net;
|
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Server.Base;
|
using OpenSim.Server.Base;
|
||||||
using OpenSim.Services.Interfaces;
|
using OpenSim.Services.Interfaces;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
using OpenSim.Server.Handlers.Base;
|
using OpenSim.Server.Handlers.Base;
|
||||||
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
|
||||||
|
|
||||||
using OpenMetaverse;
|
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nwc.XmlRpc;
|
|
||||||
|
|
||||||
namespace OpenSim.Server.Handlers.Hypergrid
|
namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
{
|
{
|
||||||
|
@ -65,8 +60,13 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
if (m_GatekeeperService == null)
|
if (m_GatekeeperService == null)
|
||||||
throw new Exception("Gatekeeper server connector cannot proceed because of missing service");
|
throw new Exception("Gatekeeper server connector cannot proceed because of missing service");
|
||||||
|
|
||||||
server.AddXmlRPCHandler("link_region", LinkRegionRequest, false);
|
HypergridHandlers hghandlers = new HypergridHandlers(m_GatekeeperService);
|
||||||
server.AddXmlRPCHandler("get_region", GetRegion, false);
|
server.AddXmlRPCHandler("link_region", hghandlers.LinkRegionRequest, false);
|
||||||
|
server.AddXmlRPCHandler("get_region", hghandlers.GetRegion, false);
|
||||||
|
|
||||||
|
server.AddHTTPHandler("/foreignagent/", new AgentHandler(m_GatekeeperService).Handler);
|
||||||
|
server.AddHTTPHandler("/foreignobject/", new ObjectHandler(m_GatekeeperService).Handler);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server)
|
public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server)
|
||||||
|
@ -74,65 +74,5 @@ namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Someone wants to link to us
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="request"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public XmlRpcResponse LinkRegionRequest(XmlRpcRequest request, IPEndPoint remoteClient)
|
|
||||||
{
|
|
||||||
Hashtable requestData = (Hashtable)request.Params[0];
|
|
||||||
//string host = (string)requestData["host"];
|
|
||||||
//string portstr = (string)requestData["port"];
|
|
||||||
string name = (string)requestData["region_name"];
|
|
||||||
|
|
||||||
UUID regionID = UUID.Zero;
|
|
||||||
string imageURL = string.Empty;
|
|
||||||
ulong regionHandle = 0;
|
|
||||||
string reason = string.Empty;
|
|
||||||
|
|
||||||
bool success = m_GatekeeperService.LinkRegion(name, out regionID, out regionHandle, out imageURL, out reason);
|
|
||||||
|
|
||||||
Hashtable hash = new Hashtable();
|
|
||||||
hash["result"] = success.ToString();
|
|
||||||
hash["uuid"] = regionID.ToString();
|
|
||||||
hash["handle"] = regionHandle.ToString();
|
|
||||||
hash["region_image"] = imageURL;
|
|
||||||
|
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
|
||||||
response.Value = hash;
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
public XmlRpcResponse GetRegion(XmlRpcRequest request, IPEndPoint remoteClient)
|
|
||||||
{
|
|
||||||
Hashtable requestData = (Hashtable)request.Params[0];
|
|
||||||
//string host = (string)requestData["host"];
|
|
||||||
//string portstr = (string)requestData["port"];
|
|
||||||
string regionID_str = (string)requestData["region_uuid"];
|
|
||||||
UUID regionID = UUID.Zero;
|
|
||||||
UUID.TryParse(regionID_str, out regionID);
|
|
||||||
|
|
||||||
GridRegion regInfo = m_GatekeeperService.GetHyperlinkRegion(regionID);
|
|
||||||
|
|
||||||
Hashtable hash = new Hashtable();
|
|
||||||
if (regInfo == null)
|
|
||||||
hash["result"] = "false";
|
|
||||||
else
|
|
||||||
{
|
|
||||||
hash["result"] = "true";
|
|
||||||
hash["uuid"] = regInfo.RegionID.ToString();
|
|
||||||
hash["x"] = regInfo.RegionLocX.ToString();
|
|
||||||
hash["y"] = regInfo.RegionLocY.ToString();
|
|
||||||
hash["region_name"] = regInfo.RegionName;
|
|
||||||
hash["hostname"] = regInfo.ExternalHostName;
|
|
||||||
hash["http_port"] = regInfo.HttpPort.ToString();
|
|
||||||
hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString();
|
|
||||||
}
|
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
|
||||||
response.Value = hash;
|
|
||||||
return response;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,115 @@
|
||||||
|
/*
|
||||||
|
* 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 OpenSim.Services.Interfaces;
|
||||||
|
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
||||||
|
|
||||||
|
using log4net;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
|
namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
|
{
|
||||||
|
public class HypergridHandlers
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private IGatekeeperService m_GatekeeperService;
|
||||||
|
|
||||||
|
public HypergridHandlers(IGatekeeperService gatekeeper)
|
||||||
|
{
|
||||||
|
m_GatekeeperService = gatekeeper;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Someone wants to link to us
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public XmlRpcResponse LinkRegionRequest(XmlRpcRequest request, IPEndPoint remoteClient)
|
||||||
|
{
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
//string host = (string)requestData["host"];
|
||||||
|
//string portstr = (string)requestData["port"];
|
||||||
|
string name = (string)requestData["region_name"];
|
||||||
|
|
||||||
|
UUID regionID = UUID.Zero;
|
||||||
|
string imageURL = string.Empty;
|
||||||
|
ulong regionHandle = 0;
|
||||||
|
string reason = string.Empty;
|
||||||
|
|
||||||
|
bool success = m_GatekeeperService.LinkRegion(name, out regionID, out regionHandle, out imageURL, out reason);
|
||||||
|
|
||||||
|
Hashtable hash = new Hashtable();
|
||||||
|
hash["result"] = success.ToString();
|
||||||
|
hash["uuid"] = regionID.ToString();
|
||||||
|
hash["handle"] = regionHandle.ToString();
|
||||||
|
hash["region_image"] = imageURL;
|
||||||
|
|
||||||
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
|
response.Value = hash;
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public XmlRpcResponse GetRegion(XmlRpcRequest request, IPEndPoint remoteClient)
|
||||||
|
{
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
//string host = (string)requestData["host"];
|
||||||
|
//string portstr = (string)requestData["port"];
|
||||||
|
string regionID_str = (string)requestData["region_uuid"];
|
||||||
|
UUID regionID = UUID.Zero;
|
||||||
|
UUID.TryParse(regionID_str, out regionID);
|
||||||
|
|
||||||
|
GridRegion regInfo = m_GatekeeperService.GetHyperlinkRegion(regionID);
|
||||||
|
|
||||||
|
Hashtable hash = new Hashtable();
|
||||||
|
if (regInfo == null)
|
||||||
|
hash["result"] = "false";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hash["result"] = "true";
|
||||||
|
hash["uuid"] = regInfo.RegionID.ToString();
|
||||||
|
hash["x"] = regInfo.RegionLocX.ToString();
|
||||||
|
hash["y"] = regInfo.RegionLocY.ToString();
|
||||||
|
hash["region_name"] = regInfo.RegionName;
|
||||||
|
hash["hostname"] = regInfo.ExternalHostName;
|
||||||
|
hash["http_port"] = regInfo.HttpPort.ToString();
|
||||||
|
hash["internal_port"] = regInfo.InternalEndPoint.Port.ToString();
|
||||||
|
}
|
||||||
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
|
response.Value = hash;
|
||||||
|
return response;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSimulator Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
using OpenSim.Server.Base;
|
||||||
|
using OpenSim.Server.Handlers.Base;
|
||||||
|
using OpenSim.Services.Interfaces;
|
||||||
|
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
using OpenSim.Server.Handlers.Simulation;
|
||||||
|
using Utils = OpenSim.Server.Handlers.Simulation.Utils;
|
||||||
|
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.StructuredData;
|
||||||
|
using Nini.Config;
|
||||||
|
using log4net;
|
||||||
|
|
||||||
|
|
||||||
|
namespace OpenSim.Server.Handlers.Hypergrid
|
||||||
|
{
|
||||||
|
public class ObjectHandler : OpenSim.Server.Handlers.Simulation.ObjectHandler
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
private IGatekeeperService m_GatekeeperService;
|
||||||
|
|
||||||
|
public ObjectHandler(IGatekeeperService gatekeeper)
|
||||||
|
{
|
||||||
|
m_GatekeeperService = gatekeeper;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool CreateObject(GridRegion destination, ISceneObject sog)
|
||||||
|
{
|
||||||
|
return m_GatekeeperService.LoginAttachment(destination, sog);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -52,6 +52,8 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private ISimulationService m_SimulationService;
|
private ISimulationService m_SimulationService;
|
||||||
|
|
||||||
|
public AgentHandler() { }
|
||||||
|
|
||||||
public AgentHandler(ISimulationService sim)
|
public AgentHandler(ISimulationService sim)
|
||||||
{
|
{
|
||||||
m_SimulationService = sim;
|
m_SimulationService = sim;
|
||||||
|
@ -117,7 +119,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id)
|
protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id)
|
||||||
{
|
{
|
||||||
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
||||||
if (args == null)
|
if (args == null)
|
||||||
|
@ -171,7 +173,8 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
|
|
||||||
// This is the meaning of POST agent
|
// This is the meaning of POST agent
|
||||||
//m_regionClient.AdjustUserInformation(aCircuit);
|
//m_regionClient.AdjustUserInformation(aCircuit);
|
||||||
bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason);
|
//bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason);
|
||||||
|
bool result = CreateAgent(destination, aCircuit, teleportFlags, out reason);
|
||||||
|
|
||||||
resp["reason"] = OSD.FromString(reason);
|
resp["reason"] = OSD.FromString(reason);
|
||||||
resp["success"] = OSD.FromBoolean(result);
|
resp["success"] = OSD.FromBoolean(result);
|
||||||
|
@ -181,7 +184,13 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp);
|
responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void DoAgentPut(Hashtable request, Hashtable responsedata)
|
// subclasses can override this
|
||||||
|
protected virtual bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
|
||||||
|
{
|
||||||
|
return m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void DoAgentPut(Hashtable request, Hashtable responsedata)
|
||||||
{
|
{
|
||||||
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
||||||
if (args == null)
|
if (args == null)
|
||||||
|
@ -237,7 +246,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
|
|
||||||
//agent.Dump();
|
//agent.Dump();
|
||||||
// This is one of the meanings of PUT agent
|
// This is one of the meanings of PUT agent
|
||||||
result = m_SimulationService.UpdateAgent(destination, agent);
|
result = UpdateAgent(destination, agent);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ("AgentPosition".Equals(messageType))
|
else if ("AgentPosition".Equals(messageType))
|
||||||
|
@ -263,6 +272,12 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
//responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); ??? instead
|
//responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); ??? instead
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// subclasses cab override this
|
||||||
|
protected virtual bool UpdateAgent(GridRegion destination, AgentData agent)
|
||||||
|
{
|
||||||
|
return m_SimulationService.UpdateAgent(destination, agent);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void DoAgentGet(Hashtable request, Hashtable responsedata, UUID id, UUID regionID)
|
protected virtual void DoAgentGet(Hashtable request, Hashtable responsedata, UUID id, UUID regionID)
|
||||||
{
|
{
|
||||||
GridRegion destination = new GridRegion();
|
GridRegion destination = new GridRegion();
|
||||||
|
@ -305,7 +320,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void DoAgentDelete(Hashtable request, Hashtable responsedata, UUID id, string action, UUID regionID)
|
protected void DoAgentDelete(Hashtable request, Hashtable responsedata, UUID id, string action, UUID regionID)
|
||||||
{
|
{
|
||||||
m_log.Debug(" >>> DoDelete action:" + action + "; RegionID:" + regionID);
|
m_log.Debug(" >>> DoDelete action:" + action + "; RegionID:" + regionID);
|
||||||
|
|
||||||
|
@ -313,7 +328,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
destination.RegionID = regionID;
|
destination.RegionID = regionID;
|
||||||
|
|
||||||
if (action.Equals("release"))
|
if (action.Equals("release"))
|
||||||
m_SimulationService.ReleaseAgent(regionID, id, "");
|
ReleaseAgent(regionID, id);
|
||||||
else
|
else
|
||||||
m_SimulationService.CloseAgent(destination, id);
|
m_SimulationService.CloseAgent(destination, id);
|
||||||
|
|
||||||
|
@ -322,6 +337,11 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
|
|
||||||
m_log.Debug("[AGENT HANDLER]: Agent Released/Deleted.");
|
m_log.Debug("[AGENT HANDLER]: Agent Released/Deleted.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void ReleaseAgent(UUID regionID, UUID id)
|
||||||
|
{
|
||||||
|
m_SimulationService.ReleaseAgent(regionID, id, "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,8 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private ISimulationService m_SimulationService;
|
private ISimulationService m_SimulationService;
|
||||||
|
|
||||||
|
public ObjectHandler() { }
|
||||||
|
|
||||||
public ObjectHandler(ISimulationService sim)
|
public ObjectHandler(ISimulationService sim)
|
||||||
{
|
{
|
||||||
m_SimulationService = sim;
|
m_SimulationService = sim;
|
||||||
|
@ -110,7 +112,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void DoObjectPost(Hashtable request, Hashtable responsedata, UUID regionID)
|
protected void DoObjectPost(Hashtable request, Hashtable responsedata, UUID regionID)
|
||||||
{
|
{
|
||||||
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
||||||
if (args == null)
|
if (args == null)
|
||||||
|
@ -181,7 +183,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// This is the meaning of POST object
|
// This is the meaning of POST object
|
||||||
result = m_SimulationService.CreateObject(destination, sog, false);
|
result = CreateObject(destination, sog);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -192,6 +194,12 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
responsedata["str_response_string"] = result.ToString();
|
responsedata["str_response_string"] = result.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// subclasses can override this
|
||||||
|
protected virtual bool CreateObject(GridRegion destination, ISceneObject sog)
|
||||||
|
{
|
||||||
|
return m_SimulationService.CreateObject(destination, sog, false);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void DoObjectPut(Hashtable request, Hashtable responsedata, UUID regionID)
|
protected virtual void DoObjectPut(Hashtable request, Hashtable responsedata, UUID regionID)
|
||||||
{
|
{
|
||||||
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
OSDMap args = Utils.GetOSDMap((string)request["body"]);
|
||||||
|
|
|
@ -65,6 +65,11 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
|
|
||||||
#region Agents
|
#region Agents
|
||||||
|
|
||||||
|
protected virtual string AgentPath()
|
||||||
|
{
|
||||||
|
return "/agent/";
|
||||||
|
}
|
||||||
|
|
||||||
public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason)
|
public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason)
|
||||||
{
|
{
|
||||||
reason = String.Empty;
|
reason = String.Empty;
|
||||||
|
@ -80,7 +85,7 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
string uri = string.Empty;
|
string uri = string.Empty;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + "/agent/" + aCircuit.AgentID + "/";
|
uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + aCircuit.AgentID + "/";
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -197,7 +202,8 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
catch (WebException ex)
|
catch (WebException ex)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message);
|
m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message);
|
||||||
// ignore, really
|
reason = "Destination did not reply";
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -224,7 +230,7 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
string uri = string.Empty;
|
string uri = string.Empty;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + "/agent/" + cAgentData.AgentID + "/";
|
uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + cAgentData.AgentID + "/";
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -329,7 +335,7 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
{
|
{
|
||||||
agent = null;
|
agent = null;
|
||||||
// Eventually, we want to use a caps url instead of the agentID
|
// Eventually, we want to use a caps url instead of the agentID
|
||||||
string uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + "/agent/" + id + "/" + destination.RegionID.ToString() + "/";
|
string uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + id + "/" + destination.RegionID.ToString() + "/";
|
||||||
//Console.WriteLine(" >>> DoRetrieveRootAgentCall <<< " + uri);
|
//Console.WriteLine(" >>> DoRetrieveRootAgentCall <<< " + uri);
|
||||||
|
|
||||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
|
||||||
|
@ -426,7 +432,7 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
string uri = string.Empty;
|
string uri = string.Empty;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + "/agent/" + id + "/" + destination.RegionID.ToString() + "/";
|
uri = "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + AgentPath() + id + "/" + destination.RegionID.ToString() + "/";
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -474,10 +480,15 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
|
|
||||||
#region Objects
|
#region Objects
|
||||||
|
|
||||||
|
protected virtual string ObjectPath()
|
||||||
|
{
|
||||||
|
return "/object/";
|
||||||
|
}
|
||||||
|
|
||||||
public bool CreateObject(GridRegion destination, ISceneObject sog, bool isLocalCall)
|
public bool CreateObject(GridRegion destination, ISceneObject sog, bool isLocalCall)
|
||||||
{
|
{
|
||||||
string uri
|
string uri
|
||||||
= "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + "/object/" + sog.UUID + "/";
|
= "http://" + destination.ExternalEndPoint.Address + ":" + destination.HttpPort + ObjectPath() + sog.UUID + "/";
|
||||||
//m_log.Debug(" >>> DoCreateObjectCall <<< " + uri);
|
//m_log.Debug(" >>> DoCreateObjectCall <<< " + uri);
|
||||||
|
|
||||||
WebRequest ObjectCreateRequest = WebRequest.Create(uri);
|
WebRequest ObjectCreateRequest = WebRequest.Create(uri);
|
||||||
|
|
|
@ -164,54 +164,100 @@ namespace OpenSim.Services.HypergridService
|
||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool LoginAgent(AgentCircuitData aCircuit, GridRegion destination)
|
public bool LoginAgent(AgentCircuitData aCircuit, GridRegion destination, out string reason)
|
||||||
{
|
{
|
||||||
|
reason = string.Empty;
|
||||||
|
|
||||||
string authURL = string.Empty;
|
string authURL = string.Empty;
|
||||||
if (aCircuit.ServiceURLs.ContainsKey("HomeURI"))
|
if (aCircuit.ServiceURLs.ContainsKey("HomeURI"))
|
||||||
authURL = aCircuit.ServiceURLs["HomeURI"].ToString();
|
authURL = aCircuit.ServiceURLs["HomeURI"].ToString();
|
||||||
|
|
||||||
m_log.DebugFormat("[GATEKEEPER SERVICE]: Request to login foreign agent {0} {1} @ {2} ({3}) at destination {4}",
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: Request to login foreign agent {0} {1} @ {2} ({3}) at destination {4}",
|
||||||
aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName);
|
aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName);
|
||||||
|
|
||||||
if (!Authenticate(aCircuit))
|
if (!Authenticate(aCircuit))
|
||||||
{
|
{
|
||||||
|
reason = "Unable to verify identity";
|
||||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Unable to verify identity of agent {0} {1}. Refusing service.", aCircuit.firstname, aCircuit.lastname);
|
m_log.InfoFormat("[GATEKEEPER SERVICE]: Unable to verify identity of agent {0} {1}. Refusing service.", aCircuit.firstname, aCircuit.lastname);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: Identity verified for {0} {1} @ {2}", aCircuit.firstname, aCircuit.lastname, authURL);
|
||||||
|
|
||||||
// Check to see if we have a local user with that UUID
|
// Check to see if we have a local user with that UUID
|
||||||
UserAccount account = m_UserAccountService.GetUserAccount(m_ScopeID, aCircuit.AgentID);
|
UserAccount account = m_UserAccountService.GetUserAccount(m_ScopeID, aCircuit.AgentID);
|
||||||
if (account != null)
|
if (account != null)
|
||||||
{
|
{
|
||||||
// No, sorry; go away
|
// No, sorry; go away
|
||||||
|
reason = "User identifier not allowed on this grid";
|
||||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Foreign agent {0} {1} has UUID of local user {3}. Refusing service.",
|
m_log.InfoFormat("[GATEKEEPER SERVICE]: Foreign agent {0} {1} has UUID of local user {3}. Refusing service.",
|
||||||
aCircuit.firstname, aCircuit.lastname, aCircuit.AgentID);
|
aCircuit.firstname, aCircuit.lastname, aCircuit.AgentID);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: User ID ok");
|
||||||
|
|
||||||
// May want to authorize
|
// May want to authorize
|
||||||
|
|
||||||
// Login the presence
|
// Login the presence
|
||||||
if (!m_PresenceService.LoginAgent(aCircuit.AgentID.ToString(), aCircuit.SessionID, aCircuit.SecureSessionID))
|
if (!m_PresenceService.LoginAgent(aCircuit.AgentID.ToString(), aCircuit.SessionID, aCircuit.SecureSessionID))
|
||||||
{
|
{
|
||||||
|
reason = "Unable to login presence";
|
||||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Presence login failed for foreign agent {0} {1}. Refusing service.",
|
m_log.InfoFormat("[GATEKEEPER SERVICE]: Presence login failed for foreign agent {0} {1}. Refusing service.",
|
||||||
aCircuit.firstname, aCircuit.lastname);
|
aCircuit.firstname, aCircuit.lastname);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: Login presence ok");
|
||||||
|
|
||||||
|
// Get the region
|
||||||
|
destination = m_GridService.GetRegionByUUID(m_ScopeID, destination.RegionID);
|
||||||
|
if (destination == null)
|
||||||
|
{
|
||||||
|
reason = "Destination region not found";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: destination ok : {0}", destination.RegionName);
|
||||||
|
|
||||||
// Finally launch the agent at the destination
|
// Finally launch the agent at the destination
|
||||||
string reason = string.Empty;
|
|
||||||
aCircuit.firstname = aCircuit.firstname + "." + aCircuit.lastname;
|
aCircuit.firstname = aCircuit.firstname + "." + aCircuit.lastname;
|
||||||
aCircuit.lastname = "@" + aCircuit.ServiceURLs["HomeURI"].ToString();
|
aCircuit.lastname = "@" + aCircuit.ServiceURLs["HomeURI"].ToString();
|
||||||
return m_SimulationService.CreateAgent(destination, aCircuit, 0, out reason);
|
return m_SimulationService.CreateAgent(destination, aCircuit, 0, out reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool LoginAttachments(ISceneObject sog, GridRegion destination)
|
public bool UpdateAgent(GridRegion destination, AgentData agent)
|
||||||
{
|
{
|
||||||
|
// Get the region
|
||||||
|
destination = m_GridService.GetRegionByUUID(m_ScopeID, destination.RegionID);
|
||||||
|
if (destination == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_SimulationService.UpdateAgent(destination, agent);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool LoginAttachment(GridRegion destination, ISceneObject sog)
|
||||||
|
{
|
||||||
|
// Get the region
|
||||||
|
destination = m_GridService.GetRegionByUUID(m_ScopeID, destination.RegionID);
|
||||||
|
if (destination == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// May want to filter attachments
|
// May want to filter attachments
|
||||||
return m_SimulationService.CreateObject(destination, sog, false);
|
return m_SimulationService.CreateObject(destination, sog, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ReleaseAgent(UUID regionID, UUID agentID)
|
||||||
|
{
|
||||||
|
GridRegion region = m_GridService.GetRegionByUUID(m_ScopeID, regionID);
|
||||||
|
if (region != null)
|
||||||
|
{
|
||||||
|
string uri = "http://" + region.ExternalHostName + ":" + region.HttpPort +
|
||||||
|
"/agent/" + agentID.ToString() + "/" + regionID.ToString() + "/release/";
|
||||||
|
|
||||||
|
m_SimulationService.ReleaseAgent(regionID, agentID, uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected bool Authenticate(AgentCircuitData aCircuit)
|
protected bool Authenticate(AgentCircuitData aCircuit)
|
||||||
{
|
{
|
||||||
string authURL = string.Empty;
|
string authURL = string.Empty;
|
||||||
|
@ -227,7 +273,17 @@ namespace OpenSim.Services.HypergridService
|
||||||
Object[] args = new Object[] { authURL };
|
Object[] args = new Object[] { authURL };
|
||||||
IAuthenticationService authService = ServerUtils.LoadPlugin<IAuthenticationService>(m_AuthDll, args);
|
IAuthenticationService authService = ServerUtils.LoadPlugin<IAuthenticationService>(m_AuthDll, args);
|
||||||
if (authService != null)
|
if (authService != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
return authService.Verify(aCircuit.AgentID, aCircuit.SecureSessionID.ToString(), 30);
|
return authService.Verify(aCircuit.AgentID, aCircuit.SecureSessionID.ToString(), 30);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[GATEKEEPER SERVICE]: Unable to contact authentication service at {0}", authURL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
using OpenSim.Framework;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Services.Interfaces
|
namespace OpenSim.Services.Interfaces
|
||||||
|
@ -36,5 +37,11 @@ namespace OpenSim.Services.Interfaces
|
||||||
{
|
{
|
||||||
bool LinkRegion(string regionDescriptor, out UUID regionID, out ulong regionHandle, out string imageURL, out string reason);
|
bool LinkRegion(string regionDescriptor, out UUID regionID, out ulong regionHandle, out string imageURL, out string reason);
|
||||||
GridRegion GetHyperlinkRegion(UUID regionID);
|
GridRegion GetHyperlinkRegion(UUID regionID);
|
||||||
|
|
||||||
|
bool LoginAgent(AgentCircuitData aCircuit, GridRegion destination, out string reason);
|
||||||
|
bool UpdateAgent(GridRegion destination, AgentData agent);
|
||||||
|
void ReleaseAgent(UUID regionID, UUID agentID);
|
||||||
|
|
||||||
|
bool LoginAttachment(GridRegion destination, ISceneObject sog);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,4 +44,5 @@ namespace OpenSim.Services.Interfaces
|
||||||
List<GridRegion> GetRegionsByName(string name);
|
List<GridRegion> GetRegionsByName(string name);
|
||||||
List<GridRegion> GetRegionRange(int xmin, int xmax, int ymin, int ymax);
|
List<GridRegion> GetRegionRange(int xmin, int xmax, int ymin, int ymax);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,8 +28,7 @@
|
||||||
NeighbourServiceInConnector = true
|
NeighbourServiceInConnector = true
|
||||||
LibraryModule = true
|
LibraryModule = true
|
||||||
LLLoginServiceInConnector = true
|
LLLoginServiceInConnector = true
|
||||||
;; err, temporary
|
AuthenticationServiceInConnector = true
|
||||||
SimulationServiceInConnector = true
|
|
||||||
|
|
||||||
[AssetService]
|
[AssetService]
|
||||||
; For the AssetServiceInConnector
|
; For the AssetServiceInConnector
|
||||||
|
|
Loading…
Reference in New Issue