diff --git a/OpenSim/Client/Linden/LLStandaloneLoginModule.cs b/OpenSim/Client/Linden/LLStandaloneLoginModule.cs index 6474feb0e7..9cfa3c1e1f 100644 --- a/OpenSim/Client/Linden/LLStandaloneLoginModule.cs +++ b/OpenSim/Client/Linden/LLStandaloneLoginModule.cs @@ -54,6 +54,7 @@ namespace OpenSim.Client.Linden protected bool m_enabled = false; // Module is only enabled if running in standalone mode protected bool authenticate; + protected bool m_warn_already_logged; protected string welcomeMessage; public bool RegionLoginsEnabled @@ -78,9 +79,11 @@ namespace OpenSim.Client.Linden public void Initialise(IConfigSource source) { IConfig startupConfig = source.Configs["Startup"]; + IConfig stdaloneConfig = source.Configs["StandAlone"]; if (startupConfig != null) { m_enabled = !startupConfig.GetBoolean("gridmode", false); + m_warn_already_logged = stdaloneConfig.GetBoolean("warn_user_already_logged_in", true); } if (m_enabled) @@ -112,6 +115,7 @@ namespace OpenSim.Client.Linden //TODO: fix the casting of the user service, maybe by registering the userManagerBase with scenes, or refactoring so we just need a IUserService reference m_loginService = new LLStandaloneLoginService((UserManagerBase)m_firstScene.CommsManager.UserAdminService, welcomeMessage, m_firstScene.CommsManager.InterServiceInventoryService, m_firstScene.CommsManager.NetworkServersInfo, authenticate, rootFolder, this); + m_loginService.WarnAlreadyLogged = m_warn_already_logged; httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod); diff --git a/OpenSim/Client/Linden/LLStandaloneLoginService.cs b/OpenSim/Client/Linden/LLStandaloneLoginService.cs index ea3a74a747..d9af24d7d1 100644 --- a/OpenSim/Client/Linden/LLStandaloneLoginService.cs +++ b/OpenSim/Client/Linden/LLStandaloneLoginService.cs @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) Contributors, http://opensimulator.org/ * See CONTRIBUTORS.TXT for a full list of copyright holders. * @@ -52,6 +52,14 @@ namespace OpenSim.Client.Linden protected NetworkServersInfo m_serversInfo; protected bool m_authUsers = false; + // If true, warns the user that he is already logged, forcing another login. + // If false, skips message and logs in directly, kicking out current user. + public bool WarnAlreadyLogged + { + get { return m_warn_already_logged; } + set { m_warn_already_logged = value; } + } + /// /// Used to make requests to the local regions. /// diff --git a/OpenSim/Framework/Communications/Services/LoginService.cs b/OpenSim/Framework/Communications/Services/LoginService.cs index 284788781b..34d24cbba0 100644 --- a/OpenSim/Framework/Communications/Services/LoginService.cs +++ b/OpenSim/Framework/Communications/Services/LoginService.cs @@ -61,6 +61,8 @@ namespace OpenSim.Framework.Communications.Services protected uint m_defaultHomeX; protected uint m_defaultHomeY; + protected bool m_warn_already_logged = true; + /// /// Used by the login service to make requests to the inventory service. /// @@ -181,11 +183,20 @@ namespace OpenSim.Framework.Communications.Services // Reject the login - m_log.InfoFormat( - "[LOGIN END]: XMLRPC Notifying user {0} {1} that they are already logged in", - firstname, lastname); + if (m_warn_already_logged) + { + m_log.InfoFormat( + "[LOGIN END]: XMLRPC Notifying user {0} {1} that they are already logged in", + firstname, lastname); - return logResponse.CreateAlreadyLoggedInResponse(); + return logResponse.CreateAlreadyLoggedInResponse(); + } + else + { + m_log.InfoFormat( + "[LOGIN]: User {0} {1} is already logged in, not notifying user, kicking old presence and starting new login.", + firstname, lastname); + } } // Otherwise... diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index cae87eed07..b47d207900 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -256,6 +256,10 @@ accounts_authenticate = true welcome_message = "Welcome to OpenSimulator" + ; Shows or skips the "please wait 5 minutes" message when you crash or are already logged in. + ; If false, it will silently kick the user from the scene and login. + warn_user_already_logged_in = true + ; Inventory database provider inventory_plugin = "OpenSim.Data.SQLite.dll" ; inventory_plugin = "OpenSim.Data.MySQL.dll"