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"