diff --git a/OpenSim/Region/Environment/Interfaces/IEmailModule.cs b/OpenSim/Region/Environment/Interfaces/IEmailModule.cs new file mode 100644 index 0000000000..aae5d9c961 --- /dev/null +++ b/OpenSim/Region/Environment/Interfaces/IEmailModule.cs @@ -0,0 +1,48 @@ +/* + * 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 OpenSim 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 OpenSim.Framework; +using libsecondlife; + +namespace OpenSim.Region.Environment.Interfaces +{ + public class Email + { + public string time; + public string sender; + public string subject; + public string message; + public int numLeft; + } + + public interface IEmailModule : IRegionModule + { + void SendEmail(LLUUID objectID, string address, string subject, string body); + Email GetNextEmail(LLUUID objectID, string sender, string subject); + } +} diff --git a/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs b/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs new file mode 100644 index 0000000000..5d33b04f78 --- /dev/null +++ b/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs @@ -0,0 +1,90 @@ +using System; +using System.Reflection; +using System.Collections.Generic; +using libsecondlife; +using OpenSim.Framework; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Scenes; +using log4net; +using Nini.Config; + +namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules +{ + public class EmailModule : IEmailModule + { + // + // Log + // + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + // + // Module vars + // + private IConfigSource m_Config; + + // Scenes by Region Handle + private Dictionary m_Scenes = + new Dictionary(); + + private bool m_Enabled = false; + + public void Initialise(Scene scene, IConfigSource config) + { + m_Config = config; + + IConfig startupConfig = m_Config.Configs["Startup"]; + + m_Enabled = (startupConfig.GetString("emailmodule", + "DefaultEmailModule") == "DefaultEmailModule"); + + // It's a go! + if (m_Enabled) + { + lock (m_Scenes) + { + // Claim the interface slot + scene.RegisterModuleInterface(this); + + // Add to scene list + if (m_Scenes.ContainsKey(scene.RegionInfo.RegionHandle)) + { + m_Scenes[scene.RegionInfo.RegionHandle] = scene; + } + else + { + m_Scenes.Add(scene.RegionInfo.RegionHandle, scene); + } + } + + m_log.Info("[EMAIL] Activated DefaultEmailModule"); + } + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + public string Name + { + get { return "DefaultEmailModule"; } + } + + public bool IsSharedModule + { + get { return true; } + } + + public void SendEmail(LLUUID objectID, string address, string subject, string body) + { + } + + public Email GetNextEmail(LLUUID objectID, string sender, string subject) + { + return null; + } + } +} diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 1579233e5b..78875159f4 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -2042,13 +2042,36 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llEmail(string address, string subject, string message) { m_host.AddScriptLPS(1); - NotImplemented("llEmail"); + IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface(); + if(emailModule == null) + return; + + emailModule.SendEmail(m_host.UUID, address, subject, message); } public void llGetNextEmail(string address, string subject) { m_host.AddScriptLPS(1); - NotImplemented("llGetNextEmail"); + IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface(); + if(emailModule == null) + return; + Email email; + + email = emailModule.GetNextEmail(m_host.UUID, address, subject); + + if(email == null) + return; + + m_ScriptEngine.PostObjectEvent(m_host.LocalId, + new EventParams("email", + new Object[] { + new LSL_Types.LSLString(email.time), + new LSL_Types.LSLString(email.sender), + new LSL_Types.LSLString(email.subject), + new LSL_Types.LSLString(email.message), + new LSL_Types.LSLInteger(email.numLeft)}, + new DetectParams[0])); + } public string llGetKey()