From b2e6ec9e12ad07eb08496ebe8ca0476b793017d5 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Sun, 17 Jan 2010 18:04:55 -0800
Subject: Agent gets there through the Gatekeeper, but still a few quirks to
fix.
---
OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs | 79 ++++++++++++++
.../Hypergrid/GatekeeperServerConnector.cs | 74 ++-----------
.../Server/Handlers/Hypergrid/HypergridHandlers.cs | 115 +++++++++++++++++++++
.../Server/Handlers/Hypergrid/ObjectHandlers.cs | 68 ++++++++++++
4 files changed, 269 insertions(+), 67 deletions(-)
create mode 100644 OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs
create mode 100644 OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs
create mode 100644 OpenSim/Server/Handlers/Hypergrid/ObjectHandlers.cs
(limited to 'OpenSim/Server/Handlers/Hypergrid')
diff --git a/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs
new file mode 100644
index 0000000..a56363c
--- /dev/null
+++ b/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs
@@ -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);
+ }
+
+ }
+
+}
diff --git a/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs
index f72b36c..27b793d 100644
--- a/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs
+++ b/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs
@@ -26,21 +26,16 @@
*/
using System;
-using System.Collections;
using System.Collections.Generic;
using System.Reflection;
-using System.Net;
using Nini.Config;
using OpenSim.Framework;
using OpenSim.Server.Base;
using OpenSim.Services.Interfaces;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Server.Handlers.Base;
-using GridRegion = OpenSim.Services.Interfaces.GridRegion;
-using OpenMetaverse;
using log4net;
-using Nwc.XmlRpc;
namespace OpenSim.Server.Handlers.Hypergrid
{
@@ -65,8 +60,13 @@ namespace OpenSim.Server.Handlers.Hypergrid
if (m_GatekeeperService == null)
throw new Exception("Gatekeeper server connector cannot proceed because of missing service");
- server.AddXmlRPCHandler("link_region", LinkRegionRequest, false);
- server.AddXmlRPCHandler("get_region", GetRegion, false);
+ HypergridHandlers hghandlers = new HypergridHandlers(m_GatekeeperService);
+ 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)
@@ -74,65 +74,5 @@ namespace OpenSim.Server.Handlers.Hypergrid
{
}
- ///
- /// Someone wants to link to us
- ///
- ///
- ///
- 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;
-
- }
}
}
diff --git a/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs
new file mode 100644
index 0000000..baafd7d
--- /dev/null
+++ b/OpenSim/Server/Handlers/Hypergrid/HypergridHandlers.cs
@@ -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;
+ }
+
+ ///
+ /// Someone wants to link to us
+ ///
+ ///
+ ///
+ 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;
+
+ }
+
+ }
+}
diff --git a/OpenSim/Server/Handlers/Hypergrid/ObjectHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/ObjectHandlers.cs
new file mode 100644
index 0000000..20eb375
--- /dev/null
+++ b/OpenSim/Server/Handlers/Hypergrid/ObjectHandlers.cs
@@ -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);
+ }
+
+ }
+}
\ No newline at end of file
--
cgit v1.1