diff --git a/OpenSim/Client/Linden/Resources/LindenModules.addin.xml b/OpenSim/Client/Linden/Resources/LindenModules.addin.xml
index 6a55ce815f..a07a00fd90 100644
--- a/OpenSim/Client/Linden/Resources/LindenModules.addin.xml
+++ b/OpenSim/Client/Linden/Resources/LindenModules.addin.xml
@@ -8,8 +8,10 @@
+
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
index e4b0fd5520..d654d133fd 100644
--- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
+++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
@@ -51,12 +51,14 @@
+
\
\
+ \
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Login/LLLoginServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Login/LLLoginServiceInConnectorModule.cs
new file mode 100644
index 0000000000..ecb6c917fd
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Login/LLLoginServiceInConnectorModule.cs
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the 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.Login;
+using OpenSim.Services.Interfaces;
+
+
+namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Login
+{
+ public class LLLoginServiceInConnectorModule : ISharedRegionModule
+ {
+ 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("LLLoginServiceInConnector", false);
+ if (m_Enabled)
+ {
+ m_log.Info("[LLLOGIN IN CONNECTOR]: LLLoginerviceInConnector enabled");
+ }
+
+ }
+
+ }
+
+ public void PostInitialise()
+ {
+ if (!m_Enabled)
+ return;
+
+ m_log.Info("[LLLOGIN IN CONNECTOR]: Starting...");
+ }
+
+ public void Close()
+ {
+ }
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public string Name
+ {
+ get { return "LLLoginServiceInConnectorModule"; }
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ 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)
+ {
+ if (!m_Registered)
+ {
+ m_Registered = true;
+ new LLLoginServiceInConnector(m_Config, MainServer.Instance, scene);
+ //Object[] args = new Object[] { m_Config, MainServer.Instance, this, scene };
+ //ServerUtils.LoadPlugin("OpenSim.Server.Handlers.dll:LLLoginServiceInConnector", args);
+ }
+
+ }
+
+ #endregion
+
+ }
+}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
new file mode 100644
index 0000000000..430cc6e29d
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs
@@ -0,0 +1,298 @@
+/*
+ * 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 OpenMetaverse;
+using OpenSim.Framework;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
+
+namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation
+{
+ public class LocalSimulationConnectorModule : ISharedRegionModule, ISimulationService
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private List m_sceneList = new List();
+
+
+ #region IRegionModule
+
+ public void Initialise(IConfigSource config)
+ {
+ // This module is always on
+ m_log.Debug("[LOCAL SIMULATION]: Enabling LocalSimulation module");
+ }
+
+ public void PostInitialise()
+ {
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ RemoveScene(scene);
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ Init(scene);
+ }
+
+ public void Close()
+ {
+ }
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public string Name
+ {
+ get { return "LocalSimulationConnectorModule"; }
+ }
+
+ ///
+ /// Can be called from other modules.
+ ///
+ ///
+ public void RemoveScene(Scene scene)
+ {
+ lock (m_sceneList)
+ {
+ if (m_sceneList.Contains(scene))
+ {
+ m_sceneList.Remove(scene);
+ }
+ }
+ }
+
+ ///
+ /// Can be called from other modules.
+ ///
+ ///
+ public void Init(Scene scene)
+ {
+ if (!m_sceneList.Contains(scene))
+ {
+ lock (m_sceneList)
+ {
+ m_sceneList.Add(scene);
+ scene.RegisterModuleInterface(this);
+ }
+
+ }
+ }
+
+ #endregion /* IRegionModule */
+
+ #region ISimulation
+
+ /**
+ * Agent-related communications
+ */
+
+ public bool CreateAgent(ulong regionHandle, AgentCircuitData aCircuit, uint teleportFlags, out string reason)
+ {
+
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+// m_log.DebugFormat("[LOCAL COMMS]: Found region {0} to send SendCreateChildAgent", regionHandle);
+ return s.NewUserConnection(aCircuit, teleportFlags, out reason);
+ }
+ }
+
+// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for SendCreateChildAgent", regionHandle);
+ uint x = 0, y = 0;
+ Utils.LongToUInts(regionHandle, out x, out y);
+ reason = "Did not find region " + x + "-" + y;
+ return false;
+ }
+
+ public bool UpdateAgent(ulong regionHandle, AgentData cAgentData)
+ {
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ //m_log.DebugFormat(
+ // "[LOCAL COMMS]: Found region {0} {1} to send ChildAgentUpdate",
+ // s.RegionInfo.RegionName, regionHandle);
+
+ s.IncomingChildAgentDataUpdate(cAgentData);
+ return true;
+ }
+ }
+
+// m_log.DebugFormat("[LOCAL COMMS]: Did not find region {0} for ChildAgentUpdate", regionHandle);
+ return false;
+ }
+
+ public bool UpdateAgent(ulong regionHandle, AgentPosition cAgentData)
+ {
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ //m_log.Debug("[LOCAL COMMS]: Found region to send ChildAgentUpdate");
+ s.IncomingChildAgentDataUpdate(cAgentData);
+ return true;
+ }
+ }
+ //m_log.Debug("[LOCAL COMMS]: region not found for ChildAgentUpdate");
+ return false;
+ }
+
+ public bool RetrieveAgent(ulong regionHandle, UUID id, out IAgentData agent)
+ {
+ agent = null;
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ //m_log.Debug("[LOCAL COMMS]: Found region to send ChildAgentUpdate");
+ return s.IncomingRetrieveRootAgent(id, out agent);
+ }
+ }
+ //m_log.Debug("[LOCAL COMMS]: region not found for ChildAgentUpdate");
+ return false;
+ }
+
+ public bool ReleaseAgent(ulong regionHandle, UUID id, string uri)
+ {
+ //uint x, y;
+ //Utils.LongToUInts(regionHandle, out x, out y);
+ //x = x / Constants.RegionSize;
+ //y = y / Constants.RegionSize;
+ //m_log.Debug("\n >>> Local SendReleaseAgent " + x + "-" + y);
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ //m_log.Debug("[LOCAL COMMS]: Found region to SendReleaseAgent");
+ return s.IncomingReleaseAgent(id);
+ }
+ }
+ //m_log.Debug("[LOCAL COMMS]: region not found in SendReleaseAgent");
+ return false;
+ }
+
+ public bool CloseAgent(ulong regionHandle, UUID id)
+ {
+ //uint x, y;
+ //Utils.LongToUInts(regionHandle, out x, out y);
+ //x = x / Constants.RegionSize;
+ //y = y / Constants.RegionSize;
+ //m_log.Debug("\n >>> Local SendCloseAgent " + x + "-" + y);
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ //m_log.Debug("[LOCAL COMMS]: Found region to SendCloseAgent");
+ return s.IncomingCloseAgent(id);
+ }
+ }
+ //m_log.Debug("[LOCAL COMMS]: region not found in SendCloseAgent");
+ return false;
+ }
+
+ /**
+ * Object-related communications
+ */
+
+ public bool CreateObject(ulong regionHandle, ISceneObject sog, bool isLocalCall)
+ {
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ //m_log.Debug("[LOCAL COMMS]: Found region to SendCreateObject");
+ if (isLocalCall)
+ {
+ // We need to make a local copy of the object
+ ISceneObject sogClone = sog.CloneForNewScene();
+ sogClone.SetState(sog.GetStateSnapshot(), s);
+ return s.IncomingCreateObject(sogClone);
+ }
+ else
+ {
+ // Use the object as it came through the wire
+ return s.IncomingCreateObject(sog);
+ }
+ }
+ }
+ return false;
+ }
+
+ public bool CreateObject(ulong regionHandle, UUID userID, UUID itemID)
+ {
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionHandle)
+ {
+ return s.IncomingCreateObject(userID, itemID);
+ }
+ }
+ return false;
+ }
+
+
+ #endregion /* IInterregionComms */
+
+ #region Misc
+
+ public IScene GetScene(ulong regionhandle)
+ {
+ foreach (Scene s in m_sceneList)
+ {
+ if (s.RegionInfo.RegionHandle == regionhandle)
+ return s;
+ }
+ // ? weird. should not happen
+ return m_sceneList[0];
+ }
+
+ public bool IsLocalRegion(ulong regionhandle)
+ {
+ foreach (Scene s in m_sceneList)
+ if (s.RegionInfo.RegionHandle == regionhandle)
+ return true;
+ return false;
+ }
+
+ #endregion
+ }
+}
diff --git a/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
index 42ecd4d221..d5e073c6b4 100644
--- a/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
+++ b/OpenSim/Server/Handlers/Login/LLLoginServiceInConnector.cs
@@ -47,6 +47,7 @@ namespace OpenSim.Server.Handlers.Login
public LLLoginServiceInConnector(IConfigSource config, IHttpServer server, IScene scene) :
base(config, server, String.Empty)
{
+ m_log.Debug("[LLLOGIN IN CONNECTOR]: Starting...");
string loginService = ReadLocalServiceFromConfig(config);
ISimulationService simService = scene.RequestModuleInterface();
@@ -85,7 +86,7 @@ namespace OpenSim.Server.Handlers.Login
private void InitializeHandlers(IHttpServer server)
{
LLLoginHandlers loginHandlers = new LLLoginHandlers(m_LoginService);
- server.AddXmlRPCHandler("Login_to_simulator", loginHandlers.HandleXMLRPCLogin, false);
+ server.AddXmlRPCHandler("login_to_simulator", loginHandlers.HandleXMLRPCLogin, false);
server.SetDefaultLLSDHandler(loginHandlers.HandleLLSDLogin);
}
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index 7d24637903..57b703c585 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -64,6 +64,8 @@ namespace OpenSim.Services.LLLoginService
m_PresenceService = ServerUtils.LoadPlugin(presenceService, args);
m_LocalSimulationService = simService;
+ m_log.DebugFormat("[LLOGIN SERVICE]: Starting...");
+
}
public LLLoginService(IConfigSource config) : this(config, null)
diff --git a/bin/config-include/StandaloneHypergrid.ini b/bin/config-include/StandaloneHypergrid.ini
index 7b1d43d4b5..ac514baa88 100644
--- a/bin/config-include/StandaloneHypergrid.ini
+++ b/bin/config-include/StandaloneHypergrid.ini
@@ -24,6 +24,7 @@
HypergridServiceInConnector = true
NeighbourServiceInConnector = true
LibraryModule = true
+ LLLoginServiceInConnector = true
[AssetService]
; For the AssetServiceInConnector
@@ -62,7 +63,7 @@
LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"
[LoginService]
- LocalServiceModule = "OpenSim.Services.LLoginService.dll:LLLoginService"
+ LocalServiceModule = "OpenSim.Services.LLLoginService.dll:LLLoginService"
UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService"
AuthenticationService = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService"
InventoryService = "OpenSim.Services.InventoryService.dll:InventoryService"