diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
index 10e2ec2fca..bb67794cc4 100644
--- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
+++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
@@ -23,6 +23,8 @@
+
+
diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/LocalInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/LocalInterregionComms.cs
index 5d2fc37a1d..d2af2db0b3 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/LocalInterregionComms.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/LocalInterregionComms.cs
@@ -258,23 +258,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Interregion
}
- /**
- * Region-related communications
- */
-
- public bool SendHelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
- {
- foreach (Scene s in m_sceneList)
- {
- if (s.RegionInfo.RegionHandle == regionHandle)
- {
- //m_log.Debug("[LOCAL COMMS]: Found region to SendHelloNeighbour");
- return s.IncomingHelloNeighbour(thisRegion);
- }
- }
- return false;
- }
-
#endregion /* IInterregionComms */
#region Misc
diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/RESTInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/RESTInterregionComms.cs
index dd37d47539..37305d5c53 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/RESTInterregionComms.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectors/Interregion/RESTInterregionComms.cs
@@ -130,7 +130,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Interregion
{
m_aScene.CommsManager.HttpServer.AddHTTPHandler("/agent/", AgentHandler);
m_aScene.CommsManager.HttpServer.AddHTTPHandler("/object/", ObjectHandler);
- m_aScene.CommsManager.HttpServer.AddHTTPHandler("/region/", RegionHandler);
}
#endregion /* IRegionModule */
@@ -291,32 +290,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Interregion
return false;
}
- /**
- * Region-related communications
- */
-
- public bool SendHelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
- {
- // Try local first
- if (m_localBackend.SendHelloNeighbour(regionHandle, thisRegion))
- {
- //m_log.Debug("[REST COMMS]: LocalBackEnd SendHelloNeighbour succeeded");
- return true;
- }
-
- // else do the remote thing
- RegionInfo regInfo = m_commsManager.GridService.RequestNeighbourInfo(regionHandle);
- if ((regInfo != null) &&
- // Don't remote-call this instance; that's a startup hickup
- !((regInfo.ExternalHostName == thisRegion.ExternalHostName) && (regInfo.HttpPort == thisRegion.HttpPort)))
- {
- return m_regionClient.DoHelloNeighbourCall(regInfo, thisRegion);
- }
- //else
- // m_log.Warn("[REST COMMS]: Region not found " + regionHandle);
- return false;
- }
-
#endregion /* IInterregionComms */
#region Incoming calls from remote instances
@@ -702,98 +675,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Interregion
responsedata["str_response_string"] = result.ToString();
}
- /*
- * Region-related incoming calls
- *
- */
-
- public Hashtable RegionHandler(Hashtable request)
- {
- //m_log.Debug("[CONNECTION DEBUGGING]: RegionHandler Called");
-
- //m_log.Debug("---------------------------");
- //m_log.Debug(" >> uri=" + request["uri"]);
- //m_log.Debug(" >> content-type=" + request["content-type"]);
- //m_log.Debug(" >> http-method=" + request["http-method"]);
- //m_log.Debug("---------------------------\n");
-
- Hashtable responsedata = new Hashtable();
- responsedata["content_type"] = "text/html";
-
- UUID regionID;
- string action;
- ulong regionHandle;
- if (!GetParams((string)request["uri"], out regionID, out regionHandle, out action))
- {
- m_log.InfoFormat("[REST COMMS]: Invalid parameters for object message {0}", request["uri"]);
- responsedata["int_response_code"] = 404;
- responsedata["str_response_string"] = "false";
-
- return responsedata;
- }
-
- // Next, let's parse the verb
- string method = (string)request["http-method"];
- if (method.Equals("POST"))
- {
- DoRegionPost(request, responsedata, regionID);
- return responsedata;
- }
- //else if (method.Equals("PUT"))
- //{
- // DoRegionPut(request, responsedata, regionID);
- // return responsedata;
- //}
- //else if (method.Equals("DELETE"))
- //{
- // DoRegionDelete(request, responsedata, regiontID);
- // return responsedata;
- //}
- else
- {
- m_log.InfoFormat("[REST COMMS]: method {0} not supported in region message", method);
- responsedata["int_response_code"] = 404;
- responsedata["str_response_string"] = "false";
-
- return responsedata;
- }
-
- }
-
- protected virtual void DoRegionPost(Hashtable request, Hashtable responsedata, UUID id)
- {
- OSDMap args = RegionClient.GetOSDMap((string)request["body"]);
- if (args == null)
- {
- responsedata["int_response_code"] = 400;
- responsedata["str_response_string"] = "false";
- return;
- }
-
- // retrieve the regionhandle
- ulong regionhandle = 0;
- if (args["destination_handle"] != null)
- UInt64.TryParse(args["destination_handle"].AsString(), out regionhandle);
-
- RegionInfo aRegion = new RegionInfo();
- try
- {
- aRegion.UnpackRegionInfoData(args);
- }
- catch (Exception ex)
- {
- m_log.InfoFormat("[REST COMMS]: exception on unpacking HelloNeighbour message {0}", ex.Message);
- return;
- }
-
- // This is the meaning of POST region
- bool result = m_localBackend.SendHelloNeighbour(regionhandle, aRegion);
-
- responsedata["int_response_code"] = 200;
- responsedata["str_response_string"] = result.ToString();
- }
-
-
#endregion
#region Misc
diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Neighbour/LocalNeighbourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Neighbour/LocalNeighbourServiceConnector.cs
new file mode 100644
index 0000000000..7f6186c9f6
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectors/Neighbour/LocalNeighbourServiceConnector.cs
@@ -0,0 +1,136 @@
+/*
+ * 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 log4net;
+using Nini.Config;
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using OpenSim.Framework;
+using OpenSim.Server.Base;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
+
+namespace OpenSim.Region.CoreModules.ServiceConnectors.Neighbour
+{
+ public class LocalNeighbourServicesConnector :
+ ISharedRegionModule, INeighbourService
+ {
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ private List m_Scenes = new List();
+
+ private bool m_Enabled = false;
+
+ public LocalNeighbourServicesConnector()
+ {
+ }
+
+ public LocalNeighbourServicesConnector(List scenes)
+ {
+ m_Scenes = scenes;
+ }
+
+ #region ISharedRegionModule
+
+ public string Name
+ {
+ get { return "LocalNeighbourServicesConnector"; }
+ }
+
+ public void Initialise(IConfigSource source)
+ {
+ IConfig moduleConfig = source.Configs["Modules"];
+ if (moduleConfig != null)
+ {
+ string name = moduleConfig.GetString("NeighbourServices", this.Name);
+ if (name == Name)
+ {
+ // m_Enabled rules whether this module registers as INeighbourService or not
+ m_Enabled = true;
+ m_log.Info("[NEIGHBOUR CONNECTOR]: Local neighbour connector enabled");
+ }
+ }
+ }
+
+ public void Close()
+ {
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ // Always add
+ m_Scenes.Add(scene);
+
+ if (!m_Enabled)
+ return;
+
+ scene.RegisterModuleInterface(this);
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ m_log.Info("[NEIGHBOUR CONNECTOR]: Local neighbour connector enabled for region " + scene.RegionInfo.RegionName);
+ }
+
+ public void PostInitialise()
+ {
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ // Always remove
+ if (m_Scenes.Contains(scene))
+ m_Scenes.Remove(scene);
+ }
+
+ #endregion ISharedRegionModule
+
+ #region INeighbourService
+
+ public bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
+ {
+ m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}",
+ thisRegion.RegionName, regionHandle, m_Scenes.Count);
+ foreach (Scene s in m_Scenes)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ m_log.Debug("[NEIGHBOUR CONNECTOR]: Found region to SendHelloNeighbour");
+ return s.IncomingHelloNeighbour(thisRegion);
+ }
+ }
+ m_log.DebugFormat("[NEIGHBOUR CONNECTOR]: region handle {0} not found", regionHandle);
+ return false;
+ }
+
+ #endregion INeighbourService
+ }
+}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Neighbour/RemoteNeighourServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Neighbour/RemoteNeighourServiceConnector.cs
new file mode 100644
index 0000000000..b0bd428191
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectors/Neighbour/RemoteNeighourServiceConnector.cs
@@ -0,0 +1,146 @@
+/*
+ * 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 log4net;
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using Nini.Config;
+using OpenSim.Framework;
+using OpenSim.Services.Connectors;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
+using OpenSim.Server.Base;
+
+namespace OpenSim.Region.CoreModules.ServiceConnectors.Neighbour
+{
+ public class RemoteNeighbourServicesConnector :
+ NeighbourServicesConnector, ISharedRegionModule, INeighbourService
+ {
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ private bool m_Enabled = false;
+ private LocalNeighbourServicesConnector m_LocalService;
+ private string serviceDll;
+ private List m_Scenes = new List();
+
+ public string Name
+ {
+ get { return "RemoteNeighbourServicesConnector"; }
+ }
+
+ public void Initialise(IConfigSource source)
+ {
+ IConfig moduleConfig = source.Configs["Modules"];
+ if (moduleConfig != null)
+ {
+ string name = moduleConfig.GetString("NeighbourServices");
+ if (name == Name)
+ {
+ m_LocalService = new LocalNeighbourServicesConnector();
+
+ //IConfig neighbourConfig = source.Configs["NeighbourService"];
+ //if (neighbourConfig == null)
+ //{
+ // m_log.Error("[NEIGHBOUR CONNECTOR]: NeighbourService missing from OpenSim.ini");
+ // return;
+ //}
+ //serviceDll = neighbourConfig.GetString("LocalServiceModule", String.Empty);
+ //if (serviceDll == String.Empty)
+ //{
+ // m_log.Error("[NEIGHBOUR CONNECTOR]: No LocalServiceModule named in section NeighbourService");
+ // return;
+ //}
+
+ m_Enabled = true;
+
+ m_log.Info("[NEIGHBOUR CONNECTOR]: Remote Neighbour connector enabled");
+ }
+ }
+ }
+
+ public void PostInitialise()
+ {
+ //if (m_Enabled)
+ //{
+ // Object[] args = new Object[] { m_Scenes };
+ // m_LocalService =
+ // ServerUtils.LoadPlugin(serviceDll,
+ // args);
+
+ // if (m_LocalService == null)
+ // {
+ // m_log.Error("[NEIGHBOUR CONNECTOR]: Can't load neighbour service");
+ // Unregister();
+ // return;
+ // }
+ //}
+ }
+
+ public void Close()
+ {
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ scene.RegisterModuleInterface(this);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (m_Enabled && m_Scenes.Contains(scene))
+ m_Scenes.Remove(scene);
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ m_log.InfoFormat("[NEIGHBOUR CONNECTOR]: Enabled remote neighbours for region {0}", scene.RegionInfo.RegionName);
+
+ }
+
+ #region INeighbourService
+
+ public override bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
+ {
+ if (m_LocalService.HelloNeighbour(regionHandle, thisRegion))
+ return true;
+
+ return base.HelloNeighbour(regionHandle, thisRegion);
+ }
+
+ #endregion INeighbourService
+ }
+}
diff --git a/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs b/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs
index d239ef49a4..8f4d3d54eb 100644
--- a/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs
+++ b/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs
@@ -100,11 +100,6 @@ namespace OpenSim.Region.Framework.Interfaces
#endregion Objects
- #region Regions
-
- bool SendHelloNeighbour(ulong regionHandle, RegionInfo thisRegion);
-
- #endregion Regions
}
// This may not be needed, but having it here for now.
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 5349d874a5..d3437b9f58 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1198,7 +1198,7 @@ namespace OpenSim.Region.Framework.Scenes
// These two 'commands' *must be* next to each other or sim rebooting fails.
m_sceneGridService.RegisterRegion(m_interregionCommsOut, RegionInfo);
- m_sceneGridService.InformNeighborsThatRegionisUp(RegionInfo);
+ m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface(), RegionInfo);
Dictionary dGridSettings = m_sceneGridService.GetGridSettings();
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 8cc5cd889c..833f8047e2 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -39,6 +39,7 @@ using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Framework.Communications.Capabilities;
using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Services.Interfaces;
using OSD = OpenMetaverse.StructuredData.OSD;
namespace OpenSim.Region.Framework.Scenes
@@ -485,7 +486,7 @@ namespace OpenSim.Region.Framework.Scenes
#endregion
- public delegate void InformNeighbourThatRegionUpDelegate(RegionInfo region, ulong regionhandle);
+ public delegate void InformNeighbourThatRegionUpDelegate(INeighbourService nService, RegionInfo region, ulong regionhandle);
private void InformNeighborsThatRegionisUpCompleted(IAsyncResult iar)
{
@@ -498,7 +499,7 @@ namespace OpenSim.Region.Framework.Scenes
///
///
///
- private void InformNeighboursThatRegionIsUpAsync(RegionInfo region, ulong regionhandle)
+ private void InformNeighboursThatRegionIsUpAsync(INeighbourService neighbourService, RegionInfo region, ulong regionhandle)
{
m_log.Info("[INTERGRID]: Starting to inform neighbors that I'm here");
//RegionUpData regiondata = new RegionUpData(region.RegionLocX, region.RegionLocY, region.ExternalHostName, region.InternalEndPoint.Port);
@@ -506,7 +507,12 @@ namespace OpenSim.Region.Framework.Scenes
//bool regionAccepted =
// m_commsProvider.InterRegion.RegionUp(new SerializableRegionInfo(region), regionhandle);
- bool regionAccepted = m_interregionCommsOut.SendHelloNeighbour(regionhandle, region);
+ //bool regionAccepted = m_interregionCommsOut.SendHelloNeighbour(regionhandle, region);
+ bool regionAccepted = false;
+ if (neighbourService != null)
+ regionAccepted = neighbourService.HelloNeighbour(regionhandle, region);
+ else
+ m_log.DebugFormat("[SCS]: No neighbour service provided for informing neigbhours of this region");
if (regionAccepted)
{
@@ -527,7 +533,7 @@ namespace OpenSim.Region.Framework.Scenes
/// Called by scene when region is initialized (not always when it's listening for agents)
/// This is an inter-region message that informs the surrounding neighbors that the sim is up.
///
- public void InformNeighborsThatRegionisUp(RegionInfo region)
+ public void InformNeighborsThatRegionisUp(INeighbourService neighbourService, RegionInfo region)
{
//m_log.Info("[INTER]: " + debugRegionName + ": SceneCommunicationService: Sending InterRegion Notification that region is up " + region.RegionName);
@@ -541,7 +547,7 @@ namespace OpenSim.Region.Framework.Scenes
{
InformNeighbourThatRegionUpDelegate d = InformNeighboursThatRegionIsUpAsync;
- d.BeginInvoke(region, neighbours[i].RegionHandle,
+ d.BeginInvoke(neighbourService, region, neighbours[i].RegionHandle,
InformNeighborsThatRegionisUpCompleted,
d);
}
diff --git a/OpenSim/Server/Handlers/Simulation/Utils.cs b/OpenSim/Server/Handlers/Base/Utils.cs
similarity index 95%
rename from OpenSim/Server/Handlers/Simulation/Utils.cs
rename to OpenSim/Server/Handlers/Base/Utils.cs
index e21d1b841f..f1610ff157 100644
--- a/OpenSim/Server/Handlers/Simulation/Utils.cs
+++ b/OpenSim/Server/Handlers/Base/Utils.cs
@@ -1,97 +1,97 @@
-/*
- * 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.Net;
-
-using OpenSim.Framework;
-using OpenSim.Framework.Servers.HttpServer;
-using OpenSim.Services.Interfaces;
-using OpenMetaverse;
-
-namespace OpenSim.Server.Handlers.Simulation
-{
- public class Utils
- {
- ///
- /// Extract the param from an uri.
- ///
- /// Something like this: /uuid/ or /uuid/handle/release
- /// uuid on uuid field
- /// optional action
- public static bool GetParams(string path, out UUID uuid, out ulong regionHandle, out string action)
- {
- uuid = UUID.Zero;
- action = "";
- regionHandle = 0;
-
- path = path.Trim(new char[] { '/' });
- string[] parts = path.Split('/');
- if (parts.Length <= 1)
- {
- return false;
- }
- else
- {
- if (!UUID.TryParse(parts[0], out uuid))
- return false;
-
- if (parts.Length >= 2)
- UInt64.TryParse(parts[1], out regionHandle);
- if (parts.Length >= 3)
- action = parts[2];
-
- return true;
- }
- }
-
- public static bool GetAuthentication(OSHttpRequest httpRequest, out string authority, out string authKey)
- {
- authority = string.Empty;
- authKey = string.Empty;
-
- Uri authUri;
-
- string auth = httpRequest.Headers["authentication"];
- // Authentication keys look like this:
- // http://orgrid.org:8002/
- if ((auth != null) && (!string.Empty.Equals(auth)) && auth != "None")
- {
- if (Uri.TryCreate(auth, UriKind.Absolute, out authUri))
- {
- authority = authUri.Authority;
- authKey = authUri.PathAndQuery.Trim('/');
- return true;
- }
- }
-
- return false;
- }
-
- }
-}
+/*
+ * 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.Net;
+
+using OpenSim.Framework;
+using OpenSim.Framework.Servers.HttpServer;
+using OpenSim.Services.Interfaces;
+using OpenMetaverse;
+
+namespace OpenSim.Server.Handlers.Base
+{
+ public class RestHandlerUtils
+ {
+ ///
+ /// Extract the param from an uri.
+ ///
+ /// Something like this: /uuid/ or /uuid/handle/release
+ /// uuid on uuid field
+ /// optional action
+ public static bool GetParams(string path, out UUID uuid, out ulong regionHandle, out string action)
+ {
+ uuid = UUID.Zero;
+ action = "";
+ regionHandle = 0;
+
+ path = path.Trim(new char[] { '/' });
+ string[] parts = path.Split('/');
+ if (parts.Length <= 1)
+ {
+ return false;
+ }
+ else
+ {
+ if (!UUID.TryParse(parts[0], out uuid))
+ return false;
+
+ if (parts.Length >= 2)
+ UInt64.TryParse(parts[1], out regionHandle);
+ if (parts.Length >= 3)
+ action = parts[2];
+
+ return true;
+ }
+ }
+
+ public static bool GetAuthentication(OSHttpRequest httpRequest, out string authority, out string authKey)
+ {
+ authority = string.Empty;
+ authKey = string.Empty;
+
+ Uri authUri;
+
+ string auth = httpRequest.Headers["authentication"];
+ // Authentication keys look like this:
+ // http://orgrid.org:8002/
+ if ((auth != null) && (!string.Empty.Equals(auth)) && auth != "None")
+ {
+ if (Uri.TryCreate(auth, UriKind.Absolute, out authUri))
+ {
+ authority = authUri.Authority;
+ authKey = authUri.PathAndQuery.Trim('/');
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ }
+}
diff --git a/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs b/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs
new file mode 100644
index 0000000000..6336f4f194
--- /dev/null
+++ b/OpenSim/Server/Handlers/Neighbour/NeighbourHandlers.cs
@@ -0,0 +1,203 @@
+/*
+ * 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 System.Net;
+using System.Text;
+
+using OpenSim.Server.Base;
+using OpenSim.Server.Handlers.Base;
+using OpenSim.Services.Interfaces;
+using OpenSim.Framework;
+using OpenSim.Framework.Servers.HttpServer;
+
+using OpenMetaverse;
+using OpenMetaverse.StructuredData;
+using Nini.Config;
+using log4net;
+
+
+namespace OpenSim.Server.Handlers.Neighbour
+{
+ public class NeighbourGetHandler : BaseStreamHandler
+ {
+ // TODO: unused: private ISimulationService m_SimulationService;
+ // TODO: unused: private IAuthenticationService m_AuthenticationService;
+
+ public NeighbourGetHandler(INeighbourService service, IAuthenticationService authentication) :
+ base("GET", "/region")
+ {
+ // TODO: unused: m_SimulationService = service;
+ // TODO: unused: m_AuthenticationService = authentication;
+ }
+
+ public override byte[] Handle(string path, Stream request,
+ OSHttpRequest httpRequest, OSHttpResponse httpResponse)
+ {
+ // Not implemented yet
+ Console.WriteLine("--- Get region --- " + path);
+ httpResponse.StatusCode = (int)HttpStatusCode.NotImplemented;
+ return new byte[] { };
+ }
+ }
+
+ public class NeighbourPostHandler : BaseStreamHandler
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private INeighbourService m_NeighbourService;
+ private IAuthenticationService m_AuthenticationService;
+ // TODO: unused: private bool m_AllowForeignGuests;
+
+ public NeighbourPostHandler(INeighbourService service, IAuthenticationService authentication) :
+ base("POST", "/region")
+ {
+ m_NeighbourService = service;
+ m_AuthenticationService = authentication;
+ // TODO: unused: m_AllowForeignGuests = foreignGuests;
+ }
+
+ public override byte[] Handle(string path, Stream request,
+ OSHttpRequest httpRequest, OSHttpResponse httpResponse)
+ {
+ byte[] result = new byte[0];
+
+ UUID regionID;
+ string action;
+ ulong regionHandle;
+ if (RestHandlerUtils.GetParams(path, out regionID, out regionHandle, out action))
+ {
+ m_log.InfoFormat("[RegionPostHandler]: Invalid parameters for neighbour message {0}", path);
+ httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
+ httpResponse.StatusDescription = "Invalid parameters for neighbour message " + path;
+
+ return result;
+ }
+
+ if (m_AuthenticationService != null)
+ {
+ // Authentication
+ string authority = string.Empty;
+ string authToken = string.Empty;
+ if (!RestHandlerUtils.GetAuthentication(httpRequest, out authority, out authToken))
+ {
+ m_log.InfoFormat("[RegionPostHandler]: Authentication failed for neighbour message {0}", path);
+ httpResponse.StatusCode = (int)HttpStatusCode.Unauthorized;
+ return result;
+ }
+ if (!m_AuthenticationService.VerifyUserKey(regionID, authToken))
+ {
+ m_log.InfoFormat("[RegionPostHandler]: Authentication failed for neighbour message {0}", path);
+ httpResponse.StatusCode = (int)HttpStatusCode.Forbidden;
+ return result;
+ }
+ m_log.DebugFormat("[RegionPostHandler]: Authentication succeeded for {0}", regionID);
+ }
+
+ OSDMap args = Util.GetOSDMap(request, (int)httpRequest.ContentLength);
+ if (args == null)
+ {
+ httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
+ httpResponse.StatusDescription = "Unable to retrieve data";
+ m_log.DebugFormat("[RegionPostHandler]: Unable to retrieve data for post {0}", path);
+ return result;
+ }
+
+ // retrieve the regionhandle
+ ulong regionhandle = 0;
+ if (args["destination_handle"] != null)
+ UInt64.TryParse(args["destination_handle"].AsString(), out regionhandle);
+
+ RegionInfo aRegion = new RegionInfo();
+ try
+ {
+ aRegion.UnpackRegionInfoData(args);
+ }
+ catch (Exception ex)
+ {
+ m_log.InfoFormat("[RegionPostHandler]: exception on unpacking region info {0}", ex.Message);
+ httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
+ httpResponse.StatusDescription = "Problems with data deserialization";
+ return result;
+ }
+
+ // Finally!
+ bool success = m_NeighbourService.HelloNeighbour(regionhandle, aRegion);
+
+ OSDMap resp = new OSDMap(1);
+
+ resp["success"] = OSD.FromBoolean(success);
+
+ httpResponse.StatusCode = (int)HttpStatusCode.OK;
+
+ return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(resp));
+ }
+ }
+
+ public class NeighbourPutHandler : BaseStreamHandler
+ {
+ // TODO: unused: private ISimulationService m_SimulationService;
+ // TODO: unused: private IAuthenticationService m_AuthenticationService;
+
+ public NeighbourPutHandler(INeighbourService service, IAuthenticationService authentication) :
+ base("PUT", "/region")
+ {
+ // TODO: unused: m_SimulationService = service;
+ // TODO: unused: m_AuthenticationService = authentication;
+ }
+
+ public override byte[] Handle(string path, Stream request,
+ OSHttpRequest httpRequest, OSHttpResponse httpResponse)
+ {
+ // Not implemented yet
+ httpResponse.StatusCode = (int)HttpStatusCode.NotImplemented;
+ return new byte[] { };
+ }
+ }
+
+ public class NeighbourDeleteHandler : BaseStreamHandler
+ {
+ // TODO: unused: private ISimulationService m_SimulationService;
+ // TODO: unused: private IAuthenticationService m_AuthenticationService;
+
+ public NeighbourDeleteHandler(INeighbourService service, IAuthenticationService authentication) :
+ base("DELETE", "/region")
+ {
+ // TODO: unused: m_SimulationService = service;
+ // TODO: unused: m_AuthenticationService = authentication;
+ }
+
+ public override byte[] Handle(string path, Stream request,
+ OSHttpRequest httpRequest, OSHttpResponse httpResponse)
+ {
+ // Not implemented yet
+ httpResponse.StatusCode = (int)HttpStatusCode.NotImplemented;
+ return new byte[] { };
+ }
+ }
+}
diff --git a/OpenSim/Server/Handlers/Neighbour/NeighbourServiceInConnector.cs b/OpenSim/Server/Handlers/Neighbour/NeighbourServiceInConnector.cs
new file mode 100644
index 0000000000..a708b3733c
--- /dev/null
+++ b/OpenSim/Server/Handlers/Neighbour/NeighbourServiceInConnector.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.Generic;
+using System.Reflection;
+using log4net;
+using Nini.Config;
+using OpenSim.Server.Base;
+using OpenSim.Services.Interfaces;
+using OpenSim.Framework;
+using OpenSim.Framework.Servers.HttpServer;
+using OpenSim.Server.Handlers.Base;
+
+namespace OpenSim.Server.Handlers.Neighbour
+{
+ public class NeighbourServiceInConnector : ServiceConnector
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+ private INeighbourService m_NeighbourService;
+ private IAuthenticationService m_AuthenticationService = null;
+
+ public NeighbourServiceInConnector(IConfigSource source, IHttpServer server, INeighbourService nService, IScene scene) :
+ base(source, server)
+ {
+
+ m_NeighbourService = nService;
+ if (m_NeighbourService == null)
+ {
+ m_log.Error("[NEIGHBOUR IN CONNECTOR]: neighbour service was not provided");
+ return;
+ }
+
+ //bool authentication = neighbourConfig.GetBoolean("RequireAuthentication", false);
+ //if (authentication)
+ // m_AuthenticationService = scene.RequestModuleInterface();
+
+
+ server.AddStreamHandler(new NeighbourPostHandler(m_NeighbourService, m_AuthenticationService));
+ server.AddStreamHandler(new NeighbourGetHandler(m_NeighbourService, m_AuthenticationService));
+ }
+ }
+}
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
index c14ad99a67..8e4d7d098d 100644
--- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
+++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
@@ -32,6 +32,7 @@ using System.Net;
using System.Text;
using OpenSim.Server.Base;
+using OpenSim.Server.Handlers.Base;
using OpenSim.Services.Interfaces;
using OpenSim.Framework;
using OpenSim.Framework.Servers.HttpServer;
@@ -88,7 +89,7 @@ namespace OpenSim.Server.Handlers.Simulation
UUID agentID;
string action;
ulong regionHandle;
- if (!Utils.GetParams(path, out agentID, out regionHandle, out action))
+ if (!RestHandlerUtils.GetParams(path, out agentID, out regionHandle, out action))
{
m_log.InfoFormat("[AgentPostHandler]: Invalid parameters for agent message {0}", path);
httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
@@ -102,7 +103,7 @@ namespace OpenSim.Server.Handlers.Simulation
// Authentication
string authority = string.Empty;
string authToken = string.Empty;
- if (!Utils.GetAuthentication(httpRequest, out authority, out authToken))
+ if (!RestHandlerUtils.GetAuthentication(httpRequest, out authority, out authToken))
{
m_log.InfoFormat("[AgentPostHandler]: Authentication failed for agent message {0}", path);
httpResponse.StatusCode = (int)HttpStatusCode.Unauthorized;
diff --git a/OpenSim/SimulatorServices/NeighbourServiceInConnectorModule.cs b/OpenSim/SimulatorServices/NeighbourServiceInConnectorModule.cs
new file mode 100644
index 0000000000..e281ebb8ec
--- /dev/null
+++ b/OpenSim/SimulatorServices/NeighbourServiceInConnectorModule.cs
@@ -0,0 +1,137 @@
+/*
+ * 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.Services.Interfaces;
+
+
+namespace OpenSim.SimulatorServices
+{
+ public class NeighbourServiceInConnectorModule : ISharedRegionModule, INeighbourService
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private static bool m_Enabled = false;
+ private static bool m_Registered = false;
+
+ private IConfigSource m_Config;
+ private List m_Scenes = new List();
+
+ #region IRegionModule interface
+
+ public void Initialise(IConfigSource config)
+ {
+ m_Config = config;
+
+ IConfig moduleConfig = config.Configs["Modules"];
+ if (moduleConfig != null)
+ {
+ m_Enabled = moduleConfig.GetBoolean("NeighbourServiceInConnector", false);
+ if (m_Enabled)
+ {
+ m_log.Info("[NEIGHBOUR IN CONNECTOR]: NeighbourServiceInConnector enabled");
+ }
+
+ }
+
+ }
+
+ public void PostInitialise()
+ {
+ if (!m_Enabled)
+ return;
+
+ m_log.Info("[NEIGHBOUR IN CONNECTOR]: Starting...");
+ }
+
+ public void Close()
+ {
+ }
+
+ public string Name
+ {
+ get { return "NeighbourServiceInConnectorModule"; }
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ if (!m_Registered)
+ {
+ m_Registered = true;
+ Object[] args = new Object[] { m_Config, scene.CommsManager.HttpServer, this, scene };
+ ServerUtils.LoadPlugin("OpenSim.Server.Handlers.dll:NeighbourServiceInConnector", args);
+ }
+
+ m_Scenes.Add(scene);
+
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (m_Enabled && m_Scenes.Contains(scene))
+ m_Scenes.Remove(scene);
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ }
+
+ #endregion
+
+ #region INeighbourService
+
+ public bool HelloNeighbour(ulong regionHandle, RegionInfo thisRegion)
+ {
+ m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: HelloNeighbour from {0}, to {1}. Count = {2}",
+ thisRegion.RegionName, regionHandle, m_Scenes.Count);
+ foreach (Scene s in m_Scenes)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ m_log.Debug("[NEIGHBOUR IN CONNECTOR]: Found region to SendHelloNeighbour");
+ return s.IncomingHelloNeighbour(thisRegion);
+ }
+ }
+ m_log.DebugFormat("[NEIGHBOUR IN CONNECTOR]: region handle {0} not found", regionHandle);
+ return false;
+ }
+
+ #endregion INeighbourService
+ }
+}
diff --git a/OpenSim/SimulatorServices/Resources/SimulatorServices.addin.xml b/OpenSim/SimulatorServices/Resources/SimulatorServices.addin.xml
index 77d7d703a1..c83af7b83a 100644
--- a/OpenSim/SimulatorServices/Resources/SimulatorServices.addin.xml
+++ b/OpenSim/SimulatorServices/Resources/SimulatorServices.addin.xml
@@ -9,7 +9,8 @@
-
+
+
diff --git a/bin/config-include/Grid.ini b/bin/config-include/Grid.ini
index 68326b8b9d..f9ded418e8 100644
--- a/bin/config-include/Grid.ini
+++ b/bin/config-include/Grid.ini
@@ -10,4 +10,6 @@
[Modules]
AssetServices = "RemoteAssetServicesConnector"
InventoryServices = "RemoteInventoryServicesConnector"
+ NeighbourServices = "RemoteNeighbourServicesConnector"
+ NeighbourServiceInConnector = true
diff --git a/bin/config-include/GridHypergrid.ini b/bin/config-include/GridHypergrid.ini
index 30d520e9de..fa3c4edc0f 100644
--- a/bin/config-include/GridHypergrid.ini
+++ b/bin/config-include/GridHypergrid.ini
@@ -10,6 +10,9 @@
[Modules]
AssetServices = "HGAssetBroker"
InventoryServices = "HGInventoryBroker"
+ NeighbourServices = "RemoteNeighbourServicesConnector"
+ NeighbourServiceInConnector = true
+
[AssetService]
LocalGridAssetService = "OpenSim.Services.Connectors.dll:AssetServicesConnector"
diff --git a/bin/config-include/Standalone.ini b/bin/config-include/Standalone.ini
index a0cd098c45..c1873584d1 100644
--- a/bin/config-include/Standalone.ini
+++ b/bin/config-include/Standalone.ini
@@ -6,12 +6,11 @@
[Includes]
Include-Common = "config-include/StandaloneCommon.ini"
- Include-Stable = "config-include/StableSettings.ini"
[Modules]
AssetServices = "LocalAssetServicesConnector"
InventoryServices = "LocalInventoryServicesConnector"
-
+ NeighbourServices = "LocalNeighbourServicesConnector"
[AssetService]
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
diff --git a/bin/config-include/StandaloneHypergrid.ini b/bin/config-include/StandaloneHypergrid.ini
index f9621326a3..d8aec4925a 100644
--- a/bin/config-include/StandaloneHypergrid.ini
+++ b/bin/config-include/StandaloneHypergrid.ini
@@ -10,7 +10,7 @@
[Modules]
AssetServices = "HGAssetBroker"
InventoryServices = "HGInventoryBroker"
-
+ NeighbourServices = "LocalNeighbourServicesConnector"
[AssetService]
; For the RegionAssetService
diff --git a/prebuild.xml b/prebuild.xml
index 5b521d5928..6a17b9de47 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -1316,6 +1316,7 @@
+
@@ -1323,6 +1324,7 @@
+