From 836849455431b59239db485aae6261e6313779e5 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 May 2010 13:52:21 -0700 Subject: [PATCH 01/12] Removed the unreferenced MaxPrimsPerFrame from OpenSim.ini.example --- bin/OpenSim.ini.example | 3 --- 1 file changed, 3 deletions(-) diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index f49cd975f1..a5eb78b777 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -87,9 +87,6 @@ ; YOU HAVE BEEN WARNED!!! TrustBinaries = false - ; How many prims to send to each avatar in the scene on each Update() - ; MaxPrimsPerFrame = 200 - ; Combine all contiguous regions into one large region ; Order your regions from South to North, West to East in your regions.ini and then set this to true ; Warning! Don't use this with regions that have existing content!, This will likely break them From 4e7013d5d565bf6e9dab8a1c88a5b7c992be6114 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 13 May 2010 07:59:30 -0700 Subject: [PATCH 02/12] Made fields consistently protected. --- .../Services/LLLoginService/LLLoginService.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index f97222ef63..9e24a396c1 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -58,21 +58,21 @@ namespace OpenSim.Services.LLLoginService protected IInventoryService m_InventoryService; protected IGridService m_GridService; protected IPresenceService m_PresenceService; - private ISimulationService m_LocalSimulationService; - private ISimulationService m_RemoteSimulationService; + protected ISimulationService m_LocalSimulationService; + protected ISimulationService m_RemoteSimulationService; protected ILibraryService m_LibraryService; protected IFriendsService m_FriendsService; protected IAvatarService m_AvatarService; - private IUserAgentService m_UserAgentService; + protected IUserAgentService m_UserAgentService; - private GatekeeperServiceConnector m_GatekeeperConnector; + protected GatekeeperServiceConnector m_GatekeeperConnector; - private string m_DefaultRegionName; + protected string m_DefaultRegionName; protected string m_WelcomeMessage; - private bool m_RequireInventory; + protected bool m_RequireInventory; protected int m_MinLoginLevel; - private string m_GatekeeperURL; - private bool m_AllowRemoteSetLoginLevel; + protected string m_GatekeeperURL; + protected bool m_AllowRemoteSetLoginLevel; IConfig m_LoginServerConfig; From 3d72a73b22b0cf0dbe951a3e0ae28473728b01a0 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey Date: Fri, 14 May 2010 21:22:53 +0100 Subject: [PATCH 03/12] Apply patch from http://opensimulator.org/mantis/bug_view_page.php?bug_id=4671 Fixes a bug where the viewer didn't recieve the uuid of a chat broadcasting object Thanks crystalsgalicia! --- OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs index 6dacbba0df..02f0968c40 100644 --- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs @@ -264,6 +264,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat fromName = avatar.Name; sourceType = ChatSourceType.Agent; } + else if (c.SenderUUID != UUID.Zero) + { + fromID = c.SenderUUID; + } // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType); From 98f2b798ff9e23c3cbc2fdf33d6ea4956b80ba8a Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 3 May 2010 21:34:38 +0100 Subject: [PATCH 04/12] Address symptom of Mantis 4588 (though not the cause) by moving the avatar dereference inside the exception catch --- OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs index 9df60743ae..a895d6e838 100644 --- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs @@ -143,10 +143,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule } private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) - { - ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); + { try { + ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); + if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0) { avatar.Invulnerable = false; From df2f69f295a16a0e3de510de566d8bb607c9664d Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey Date: Sat, 15 May 2010 02:07:07 +0100 Subject: [PATCH 05/12] Make "nant distbin" remove BUILDING.txt --- .nant/local.include | 1 + 1 file changed, 1 insertion(+) diff --git a/.nant/local.include b/.nant/local.include index b78b3efcdc..97353e05f2 100644 --- a/.nant/local.include +++ b/.nant/local.include @@ -20,6 +20,7 @@ + From 4b755c6d80b3161dda7a7e70fed0e1f5e81ea8ad Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Sat, 15 May 2010 02:17:10 +0100 Subject: [PATCH 06/12] delete now unused MessageServerInfo --- .../Framework/Servers/MessageServerInfo.cs | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 OpenSim/Framework/Servers/MessageServerInfo.cs diff --git a/OpenSim/Framework/Servers/MessageServerInfo.cs b/OpenSim/Framework/Servers/MessageServerInfo.cs deleted file mode 100644 index 57ceb7184c..0000000000 --- a/OpenSim/Framework/Servers/MessageServerInfo.cs +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System.Collections.Generic; - -namespace OpenSim.Framework.Servers -{ - public class MessageServerInfo - { - public string URI; - public string sendkey; - public string recvkey; - public List responsibleForRegions; - - public MessageServerInfo() - { - } - - public override string ToString() - { - return URI; - } - } -} From 2a1e45f65736214a9e8d782be1f92bb78725121f Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 15 May 2010 19:25:14 -0700 Subject: [PATCH 07/12] Finalized the client's TCP IP address verification process for HG1.5. --- OpenSim/Framework/AgentCircuitManager.cs | 26 +++++ OpenSim/Framework/Capabilities/Caps.cs | 12 ++- OpenSim/Framework/IScene.cs | 2 + .../Agent/Capabilities/CapabilitiesModule.cs | 2 +- OpenSim/Region/Framework/Scenes/Scene.cs | 95 ++++++++++++++----- OpenSim/Region/Framework/Scenes/SceneBase.cs | 1 + .../Framework/Scenes/Tests/SceneBaseTests.cs | 5 + .../Hypergrid/UserAgentServiceConnector.cs | 5 + .../HypergridService/UserAgentService.cs | 27 +++--- .../Services/Interfaces/IGatekeeperService.cs | 1 + .../Services/LLLoginService/LLLoginService.cs | 17 ++-- 11 files changed, 148 insertions(+), 45 deletions(-) diff --git a/OpenSim/Framework/AgentCircuitManager.cs b/OpenSim/Framework/AgentCircuitManager.cs index e5dbb5a81a..49d7822416 100644 --- a/OpenSim/Framework/AgentCircuitManager.cs +++ b/OpenSim/Framework/AgentCircuitManager.cs @@ -36,6 +36,7 @@ namespace OpenSim.Framework public class AgentCircuitManager { public Dictionary AgentCircuits = new Dictionary(); + public Dictionary AgentCircuitsByUUID = new Dictionary(); public virtual AuthenticateResponse AuthenticateSession(UUID sessionID, UUID agentID, uint circuitcode) { @@ -86,10 +87,12 @@ namespace OpenSim.Framework if (AgentCircuits.ContainsKey(circuitCode)) { AgentCircuits[circuitCode] = agentData; + AgentCircuitsByUUID[agentData.AgentID] = agentData; } else { AgentCircuits.Add(circuitCode, agentData); + AgentCircuitsByUUID.Add(agentData.AgentID, agentData); } } } @@ -99,10 +102,26 @@ namespace OpenSim.Framework lock (AgentCircuits) { if (AgentCircuits.ContainsKey(circuitCode)) + { + UUID agentID = AgentCircuits[circuitCode].AgentID; AgentCircuits.Remove(circuitCode); + AgentCircuitsByUUID.Remove(agentID); + } } } + public virtual void RemoveCircuit(UUID agentID) + { + lock (AgentCircuits) + { + if (AgentCircuitsByUUID.ContainsKey(agentID)) + { + uint circuitCode = AgentCircuitsByUUID[agentID].circuitcode; + AgentCircuits.Remove(circuitCode); + AgentCircuitsByUUID.Remove(agentID); + } + } + } public AgentCircuitData GetAgentCircuitData(uint circuitCode) { AgentCircuitData agentCircuit = null; @@ -110,6 +129,13 @@ namespace OpenSim.Framework return agentCircuit; } + public AgentCircuitData GetAgentCircuitData(UUID agentID) + { + AgentCircuitData agentCircuit = null; + AgentCircuitsByUUID.TryGetValue(agentID, out agentCircuit); + return agentCircuit; + } + public void UpdateAgentData(AgentCircuitData agentData) { if (AgentCircuits.ContainsKey((uint) agentData.circuitcode)) diff --git a/OpenSim/Framework/Capabilities/Caps.cs b/OpenSim/Framework/Capabilities/Caps.cs index b27d0112af..62a1e17f50 100644 --- a/OpenSim/Framework/Capabilities/Caps.cs +++ b/OpenSim/Framework/Capabilities/Caps.cs @@ -99,6 +99,7 @@ namespace OpenSim.Framework.Capabilities // private static readonly string m_remoteParcelRequestPath = "0009/";// This is in the LandManagementModule. //private string eventQueue = "0100/"; + private IScene m_Scene; private IHttpServer m_httpListener; private UUID m_agentID; private IAssetService m_assetCache; @@ -130,9 +131,10 @@ namespace OpenSim.Framework.Capabilities public FetchInventoryDescendentsCAPS CAPSFetchInventoryDescendents = null; public GetClientDelegate GetClient = null; - public Caps(IAssetService assetCache, IHttpServer httpServer, string httpListen, uint httpPort, string capsPath, + public Caps(IScene scene, IAssetService assetCache, IHttpServer httpServer, string httpListen, uint httpPort, string capsPath, UUID agent, bool dumpAssetsToFile, string regionName) { + m_Scene = scene; m_assetCache = assetCache; m_capsObjectPath = capsPath; m_httpListener = httpServer; @@ -278,7 +280,13 @@ namespace OpenSim.Framework.Capabilities public string CapsRequest(string request, string path, string param, OSHttpRequest httpRequest, OSHttpResponse httpResponse) { - //m_log.Debug("[CAPS]: Seed Caps Request in region: " + m_regionName); + m_log.Debug("[CAPS]: Seed Caps Request in region: " + m_regionName); + + if (!m_Scene.CheckClient(m_agentID, httpRequest.RemoteIPEndPoint)) + { + m_log.DebugFormat("[CAPS]: Unauthorized CAPS client"); + return string.Empty; + } string result = LLSDHelpers.SerialiseLLSDReply(m_capsHandlers.CapsDetails); diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs index 19ab409098..6798b7be8a 100644 --- a/OpenSim/Framework/IScene.cs +++ b/OpenSim/Framework/IScene.cs @@ -102,5 +102,7 @@ namespace OpenSim.Framework void AddCommand(object module, string command, string shorthelp, string longhelp, CommandDelegate callback); ISceneObject DeserializeObject(string representation); + + bool CheckClient(UUID agentID, System.Net.IPEndPoint ep); } } diff --git a/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs index 2a1355b9ef..a6f5d97ad2 100644 --- a/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs +++ b/OpenSim/Region/CoreModules/Agent/Capabilities/CapabilitiesModule.cs @@ -107,7 +107,7 @@ namespace OpenSim.Region.CoreModules.Agent.Capabilities } Caps caps - = new Caps( + = new Caps(m_scene, m_scene.AssetService, MainServer.Instance, m_scene.RegionInfo.ExternalHostName, MainServer.Instance.Port, capsObjectPath, agentId, m_scene.DumpAssetsToFile, m_scene.RegionInfo.RegionName); diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index edbef4c884..401551de36 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2629,34 +2629,23 @@ namespace OpenSim.Region.Framework.Scenes AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(client.CircuitCode); // Do the verification here - System.Net.EndPoint ep = client.GetClientEP(); + System.Net.IPEndPoint ep = (System.Net.IPEndPoint)client.GetClientEP(); if (aCircuit != null) { - if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0) + if (!VerifyClient(aCircuit, ep, out vialogin)) { - m_log.DebugFormat("[Scene]: Incoming client {0} {1} in region {2} via Login", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); - vialogin = true; - IUserAgentVerificationModule userVerification = RequestModuleInterface(); - if (userVerification != null && ep != null) + // uh-oh, this is fishy + m_log.WarnFormat("[Scene]: Agent {0} with session {1} connecting with unidentified end point {2}. Refusing service.", + client.AgentId, client.SessionId, ep.ToString()); + try { - if (!userVerification.VerifyClient(aCircuit, ep.ToString())) - { - // uh-oh, this is fishy - m_log.WarnFormat("[Scene]: Agent {0} with session {1} connecting with unidentified end point {2}. Refusing service.", - client.AgentId, client.SessionId, ep.ToString()); - try - { - client.Close(); - } - catch (Exception e) - { - m_log.DebugFormat("[Scene]: Exception while closing aborted client: {0}", e.StackTrace); - } - return; - } - else - m_log.DebugFormat("[Scene]: User Client Verification for {0} {1} returned true", aCircuit.firstname, aCircuit.lastname); + client.Close(); } + catch (Exception e) + { + m_log.DebugFormat("[Scene]: Exception while closing aborted client: {0}", e.StackTrace); + } + return; } } @@ -2682,7 +2671,65 @@ namespace OpenSim.Region.Framework.Scenes EventManager.TriggerOnClientLogin(client); } - + private bool VerifyClient(AgentCircuitData aCircuit, System.Net.IPEndPoint ep, out bool vialogin) + { + vialogin = false; + + // Do the verification here + if ((aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0) + { + m_log.DebugFormat("[Scene]: Incoming client {0} {1} in region {2} via Login", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); + vialogin = true; + IUserAgentVerificationModule userVerification = RequestModuleInterface(); + if (userVerification != null && ep != null) + { + if (!userVerification.VerifyClient(aCircuit, ep.Address.ToString())) + { + // uh-oh, this is fishy + m_log.DebugFormat("[Scene]: User Client Verification for {0} {1} in {2} returned false", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); + return false; + } + else + m_log.DebugFormat("[Scene]: User Client Verification for {0} {1} in {2} returned true", aCircuit.firstname, aCircuit.lastname, RegionInfo.RegionName); + } + } + + return true; + } + + // Called by Caps, on the first HTTP contact from the client + public override bool CheckClient(UUID agentID, System.Net.IPEndPoint ep) + { + AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(agentID); + if (aCircuit != null) + { + bool vialogin = false; + if (!VerifyClient(aCircuit, ep, out vialogin)) + { + // if it doesn't pass, we remove the agentcircuitdata altogether + // and the scene presence and the client, if they exist + try + { + ScenePresence sp = GetScenePresence(agentID); + if (sp != null) + sp.ControllingClient.Close(); + + // BANG! SLASH! + m_authenticateHandler.RemoveCircuit(agentID); + + return false; + } + catch (Exception e) + { + m_log.DebugFormat("[Scene]: Exception while closing aborted client: {0}", e.StackTrace); + } + } + else + return true; + } + + return false; + } /// /// Register for events from the client diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index 3218dadc24..bfc19b754c 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs @@ -536,5 +536,6 @@ namespace OpenSim.Region.Framework.Scenes get { return false; } } + public abstract bool CheckClient(UUID agentID, System.Net.IPEndPoint ep); } } diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs index dd9f8f6654..42587c1116 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs @@ -70,6 +70,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests { throw new NotImplementedException(); } + + public override bool CheckClient(UUID agentID, System.Net.IPEndPoint ep) + { + throw new NotImplementedException(); + } } [Test] diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs index 3e91e3a113..42eca05ec5 100644 --- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs @@ -204,6 +204,11 @@ namespace OpenSim.Services.Connectors.Hypergrid return args; } + public void SetClientToken(UUID sessionID, string token) + { + // no-op + } + public GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt) { position = Vector3.UnitY; lookAt = Vector3.UnitY; diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index 64f7e8aaca..01729607fa 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs @@ -148,6 +148,15 @@ namespace OpenSim.Services.HypergridService return true; } + public void SetClientToken(UUID sessionID, string token) + { + if (m_TravelingAgents.ContainsKey(sessionID)) + { + m_log.DebugFormat("[USER AGENT SERVICE]: Setting token {0} for session {1}", token, sessionID); + m_TravelingAgents[sessionID].ClientToken = token; + } + } + TravelingAgentInfo UpdateTravelInfo(AgentCircuitData agentCircuit, GridRegion region) { TravelingAgentInfo travel = new TravelingAgentInfo(); @@ -203,22 +212,16 @@ namespace OpenSim.Services.HypergridService public bool VerifyClient(UUID sessionID, string token) { - return true; + m_log.DebugFormat("[USER AGENT SERVICE]: Verifying Client session {0} with token {1}", sessionID, token); + //return true; // Commenting this for now until I understand better what part of a sender's // info stays unchanged throughout a session // - //if (m_TravelingAgents.ContainsKey(sessionID)) - //{ - // // Aquiles heel. Must trust the first grid upon login - // if (m_TravelingAgents[sessionID].ClientToken == string.Empty) - // { - // m_TravelingAgents[sessionID].ClientToken = token; - // return true; - // } - // return m_TravelingAgents[sessionID].ClientToken == token; - //} - //return false; + if (m_TravelingAgents.ContainsKey(sessionID)) + return m_TravelingAgents[sessionID].ClientToken == token; + + return false; } public bool VerifyAgent(UUID sessionID, string token) diff --git a/OpenSim/Services/Interfaces/IGatekeeperService.cs b/OpenSim/Services/Interfaces/IGatekeeperService.cs index ca7b9b3324..2d397bc03d 100644 --- a/OpenSim/Services/Interfaces/IGatekeeperService.cs +++ b/OpenSim/Services/Interfaces/IGatekeeperService.cs @@ -49,6 +49,7 @@ namespace OpenSim.Services.Interfaces public interface IUserAgentService { bool LoginAgentToGrid(AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, out string reason); + void SetClientToken(UUID sessionID, string token); void LogoutAgent(UUID userID, UUID sessionID); GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt); diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 9e24a396c1..7471c7721d 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -329,7 +329,7 @@ namespace OpenSim.Services.LLLoginService // Instantiate/get the simulation interface and launch an agent at the destination // string reason = string.Empty; - AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where, clientVersion, out where, out reason); + AgentCircuitData aCircuit = LaunchAgentAtGrid(gatekeeper, destination, account, avatar, session, secureSession, position, where, clientVersion, clientIP, out where, out reason); if (aCircuit == null) { @@ -589,7 +589,7 @@ namespace OpenSim.Services.LLLoginService } protected AgentCircuitData LaunchAgentAtGrid(GridRegion gatekeeper, GridRegion destination, UserAccount account, AvatarData avatar, - UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, out string where, out string reason) + UUID session, UUID secureSession, Vector3 position, string currentWhere, string viewer, IPEndPoint clientIP, out string where, out string reason) { where = currentWhere; ISimulationService simConnector = null; @@ -655,7 +655,7 @@ namespace OpenSim.Services.LLLoginService { circuitCode = (uint)Util.RandomClass.Next(); ; aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, viewer); - success = LaunchAgentIndirectly(gatekeeper, destination, aCircuit, out reason); + success = LaunchAgentIndirectly(gatekeeper, destination, aCircuit, clientIP, out reason); if (!success && m_GridService != null) { // Try the fallback regions @@ -664,7 +664,7 @@ namespace OpenSim.Services.LLLoginService { foreach (GridRegion r in fallbacks) { - success = LaunchAgentIndirectly(gatekeeper, r, aCircuit, out reason); + success = LaunchAgentIndirectly(gatekeeper, r, aCircuit, clientIP, out reason); if (success) { where = "safe"; @@ -741,10 +741,15 @@ namespace OpenSim.Services.LLLoginService return simConnector.CreateAgent(region, aCircuit, (int)Constants.TeleportFlags.ViaLogin, out reason); } - private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, out string reason) + private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason) { m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName); - return m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, out reason); + if (m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, out reason)) + { + m_UserAgentService.SetClientToken(aCircuit.SessionID, clientIP.Address.ToString()); + return true; + } + return false; } #region Console Commands From 74b23ff9c644f20e04ebda1c03eb69af29c417cc Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 15 May 2010 19:58:30 -0700 Subject: [PATCH 08/12] Almost, but not quite. Commenting verification again, until I understand where 127.0.0.1 is being transformed to the local IP address. I suspect it's Adam's NAT snippets. --- OpenSim/Services/HypergridService/UserAgentService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index 01729607fa..4a275c6f58 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs @@ -213,15 +213,15 @@ namespace OpenSim.Services.HypergridService public bool VerifyClient(UUID sessionID, string token) { m_log.DebugFormat("[USER AGENT SERVICE]: Verifying Client session {0} with token {1}", sessionID, token); - //return true; + return true; // Commenting this for now until I understand better what part of a sender's // info stays unchanged throughout a session // - if (m_TravelingAgents.ContainsKey(sessionID)) - return m_TravelingAgents[sessionID].ClientToken == token; + //if (m_TravelingAgents.ContainsKey(sessionID)) + // return m_TravelingAgents[sessionID].ClientToken == token; - return false; + //return false; } public bool VerifyAgent(UUID sessionID, string token) From dc1a3e9787d15f98e815b10935481606edc38f3f Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Sat, 15 May 2010 23:21:36 -0400 Subject: [PATCH 09/12] * Add User Friendly Configuration File Exists check. If OpenSim.ini and either StandaloneCommon.ini or GridCommon.ini don't exist in various casings then offer to copy the files for the user while warning them that they're missing out if they don't read the files. --- OpenSim/Region/Application/Application.cs | 116 +++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs index 7721cdf491..951d66f81d 100644 --- a/OpenSim/Region/Application/Application.cs +++ b/OpenSim/Region/Application/Application.cs @@ -105,7 +105,7 @@ namespace OpenSim // Check if the system is compatible with OpenSimulator. // Ensures that the minimum system requirements are met - m_log.Info("Performing compatibility checks... "); + m_log.Info("Performing compatibility checks... \n"); string supported = String.Empty; if (Util.IsEnvironmentSupported(ref supported)) { @@ -120,6 +120,112 @@ namespace OpenSim Culture.SetCurrentCulture(); + // Validate that the user has the most basic configuration done + // If not, offer to do the most basic configuration for them warning them along the way of the importance of + // reading these files. + m_log.Info("Checking for reguired configuration...\n"); + + bool OpenSim_Ini = (File.Exists(Path.Combine(Util.configDir(), "OpenSim.ini"))) + || (File.Exists(Path.Combine(Util.configDir(), "opensim.ini"))) + || (File.Exists(Path.Combine(Util.configDir(), "openSim.ini"))) + || (File.Exists(Path.Combine(Util.configDir(), "Opensim.ini"))); + + bool StanaloneCommon_ProperCased = File.Exists(Path.Combine(Path.Combine(Util.configDir(), "config-include"), "StandaloneCommon.ini")); + bool StanaloneCommon_lowercased = File.Exists(Path.Combine(Path.Combine(Util.configDir(), "config-include"), "standalonecommon.ini")); + bool GridCommon_ProperCased = File.Exists(Path.Combine(Path.Combine(Util.configDir(), "config-include"), "GridCommon.ini")); + bool GridCommon_lowerCased = File.Exists(Path.Combine(Path.Combine(Util.configDir(), "config-include"), "gridcommon.ini")); + + if ((OpenSim_Ini) + && ( + (StanaloneCommon_ProperCased + || StanaloneCommon_lowercased + || GridCommon_ProperCased + || GridCommon_lowerCased + ))) + { + m_log.Info("Required Configuration Files Found\n"); + } + else + { + MainConsole.Instance = new LocalConsole("Region"); + string resp = MainConsole.Instance.CmdPrompt( + "\n\n*************Required Configuration files not found.*************\n\n OpenSimulator will not run without these files.\n\nRemember, these file names are Case Sensitive in Linux and Proper Cased.\n1. ./OpenSim.ini\nand\n2. ./config-include/StandaloneCommon.ini \nor\n3. ./config-include/GridCommon.ini\n\nAlso, you will want to examine these files in great detail because only the basic system will load by default. OpenSimulator can do a LOT more if you spend a little time going through these files.\n\n" + ": " + "Do you want to copy the most basic Defaults from standalone?", + "yes"); + if (resp == "yes") + { + + if (!(OpenSim_Ini)) + { + try + { + File.Copy(Path.Combine(Util.configDir(), "OpenSim.ini.example"), + Path.Combine(Util.configDir(), "OpenSim.ini")); + } catch (UnauthorizedAccessException) + { + MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, Make sure OpenSim has have the required permissions\n"); + } catch (ArgumentException) + { + MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, The current directory is invalid.\n"); + } catch (System.IO.PathTooLongException) + { + MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, the Path to these files is too long.\n"); + } catch (System.IO.DirectoryNotFoundException) + { + MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, the current directory is reporting as not found.\n"); + } catch (System.IO.FileNotFoundException) + { + MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, the example is not found, please make sure that the example files exist.\n"); + } catch (System.IO.IOException) + { + // Destination file exists already or a hard drive failure... .. so we can just drop this one + //MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, the example is not found, please make sure that the example files exist.\n"); + } catch (System.NotSupportedException) + { + MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, The current directory is invalid.\n"); + } + + } + if (!(StanaloneCommon_ProperCased || StanaloneCommon_lowercased)) + { + try + { + File.Copy(Path.Combine(Path.Combine(Util.configDir(), "config-include"), "StandaloneCommon.ini.example"), + Path.Combine(Path.Combine(Util.configDir(), "config-include"), "StandaloneCommon.ini")); + } + catch (UnauthorizedAccessException) + { + MainConsole.Instance.Output("Unable to Copy StandaloneCommon.ini.example to StandaloneCommon.ini, Make sure OpenSim has the required permissions\n"); + } + catch (ArgumentException) + { + MainConsole.Instance.Output("Unable to Copy StandaloneCommon.ini.example to StandaloneCommon.ini, The current directory is invalid.\n"); + } + catch (System.IO.PathTooLongException) + { + MainConsole.Instance.Output("Unable to Copy StandaloneCommon.ini.example to StandaloneCommon.ini, the Path to these files is too long.\n"); + } + catch (System.IO.DirectoryNotFoundException) + { + MainConsole.Instance.Output("Unable to Copy StandaloneCommon.ini.example to StandaloneCommon.ini, the current directory is reporting as not found.\n"); + } + catch (System.IO.FileNotFoundException) + { + MainConsole.Instance.Output("Unable to Copy StandaloneCommon.ini.example to StandaloneCommon.ini, the example is not found, please make sure that the example files exist.\n"); + } + catch (System.IO.IOException) + { + // Destination file exists already or a hard drive failure... .. so we can just drop this one + //MainConsole.Instance.Output("Unable to Copy OpenSim.ini.example to OpenSim.ini, the example is not found, please make sure that the example files exist.\n"); + } + catch (System.NotSupportedException) + { + MainConsole.Instance.Output("Unable to Copy StandaloneCommon.ini.example to StandaloneCommon.ini, The current directory is invalid.\n"); + } + } + } + MainConsole.Instance = null; + } + configSource.Alias.AddAlias("On", true); configSource.Alias.AddAlias("Off", false); configSource.Alias.AddAlias("True", true); @@ -145,6 +251,8 @@ namespace OpenSim // load Crash directory config m_crashDir = configSource.Configs["Startup"].GetString("crash_dir", m_crashDir); + + if (background) { m_sim = new OpenSimBackground(configSource); @@ -152,8 +260,14 @@ namespace OpenSim } else { + + + + m_sim = new OpenSim(configSource); + + m_sim.Startup(); while (true) From e5e52e4072f8eab2a44f79dd4a31403d5eb2d5a7 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 15 May 2010 20:27:25 -0700 Subject: [PATCH 10/12] This combination is working. It all points to not being able to use 127.0.0.1/localhost in testing HG situations. The login server must have the LAN IP address, and the regions must show ExternalHostname as SYSTEMIP. Working, but this needs more testing. --- OpenSim/Services/HypergridService/UserAgentService.cs | 10 +++++----- OpenSim/Services/LLLoginService/LLLoginService.cs | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index 4a275c6f58..2f1fed40db 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs @@ -213,15 +213,15 @@ namespace OpenSim.Services.HypergridService public bool VerifyClient(UUID sessionID, string token) { m_log.DebugFormat("[USER AGENT SERVICE]: Verifying Client session {0} with token {1}", sessionID, token); - return true; + //return true; // Commenting this for now until I understand better what part of a sender's // info stays unchanged throughout a session - // - //if (m_TravelingAgents.ContainsKey(sessionID)) - // return m_TravelingAgents[sessionID].ClientToken == token; - //return false; + if (m_TravelingAgents.ContainsKey(sessionID)) + return m_TravelingAgents[sessionID].ClientToken == token; + + return false; } public bool VerifyAgent(UUID sessionID, string token) diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 7471c7721d..9d151dfe18 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -746,6 +746,7 @@ namespace OpenSim.Services.LLLoginService m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName); if (m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, out reason)) { + //IPAddress addr = NetworkUtil.GetIPFor(clientIP.Address, gatekeeper.ExternalEndPoint.Address); m_UserAgentService.SetClientToken(aCircuit.SessionID, clientIP.Address.ToString()); return true; } From d4192dcb2efd0e3a3a3ed887337344ada5b9b4c6 Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Sun, 16 May 2010 01:47:53 -0400 Subject: [PATCH 11/12] * Revert last commit for now at Melanie_T's request. * Additional ways of configuring opensim break with this --- OpenSim/Region/Application/Application.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/Application/Application.cs b/OpenSim/Region/Application/Application.cs index 951d66f81d..b860cf6bc0 100644 --- a/OpenSim/Region/Application/Application.cs +++ b/OpenSim/Region/Application/Application.cs @@ -123,6 +123,7 @@ namespace OpenSim // Validate that the user has the most basic configuration done // If not, offer to do the most basic configuration for them warning them along the way of the importance of // reading these files. + /* m_log.Info("Checking for reguired configuration...\n"); bool OpenSim_Ini = (File.Exists(Path.Combine(Util.configDir(), "OpenSim.ini"))) @@ -225,7 +226,7 @@ namespace OpenSim } MainConsole.Instance = null; } - + */ configSource.Alias.AddAlias("On", true); configSource.Alias.AddAlias("Off", false); configSource.Alias.AddAlias("True", true); From 49f4becdae9faf4afbf03c4e464237e323de496d Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 16 May 2010 08:10:57 -0700 Subject: [PATCH 12/12] * Fixed configs in StandaloneHypergrid.ini, it still had the SQLite connection strings. * Added a comment in LLLoginService.cs, for future reference --- OpenSim/Services/LLLoginService/LLLoginService.cs | 6 ++++-- bin/config-include/StandaloneHypergrid.ini | 3 --- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 9d151dfe18..712b8991b4 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -746,8 +746,10 @@ namespace OpenSim.Services.LLLoginService m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName); if (m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, out reason)) { - //IPAddress addr = NetworkUtil.GetIPFor(clientIP.Address, gatekeeper.ExternalEndPoint.Address); - m_UserAgentService.SetClientToken(aCircuit.SessionID, clientIP.Address.ToString()); + // We may need to do this at some point, + // so leaving it here in comments. + //IPAddress addr = NetworkUtil.GetIPFor(clientIP.Address, destination.ExternalEndPoint.Address); + m_UserAgentService.SetClientToken(aCircuit.SessionID, /*addr.Address.ToString() */ clientIP.Address.ToString()); return true; } return false; diff --git a/bin/config-include/StandaloneHypergrid.ini b/bin/config-include/StandaloneHypergrid.ini index 32b240b8b5..52e30e211c 100644 --- a/bin/config-include/StandaloneHypergrid.ini +++ b/bin/config-include/StandaloneHypergrid.ini @@ -42,7 +42,6 @@ [AvatarService] LocalServiceModule = "OpenSim.Services.AvatarService.dll:AvatarService" - ConnectionString = "URI=file:avatars.db,version=3" [LibraryService] LocalServiceModule = "OpenSim.Services.InventoryService.dll:LibraryService" @@ -54,7 +53,6 @@ [AuthenticationService] LocalServiceModule = "OpenSim.Services.AuthenticationService.dll:PasswordAuthenticationService" - ConnectionString = "URI=file:auth.db,version=3" [GridService] ; LocalGridServicesConnector needs this @@ -82,7 +80,6 @@ [FriendsService] LocalServiceModule = "OpenSim.Services.FriendsService.dll" - ConnectionString = "URI=file:friends.db,version=3" [Friends] Connector = "OpenSim.Services.FriendsService.dll"