diff options
Diffstat (limited to 'OpenSim')
3 files changed, 163 insertions, 2 deletions
diff --git a/OpenSim/Region/Environment/Interfaces/IEmailModule.cs b/OpenSim/Region/Environment/Interfaces/IEmailModule.cs new file mode 100644 index 0000000..aae5d9c --- /dev/null +++ b/OpenSim/Region/Environment/Interfaces/IEmailModule.cs | |||
@@ -0,0 +1,48 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using OpenSim.Framework; | ||
30 | using libsecondlife; | ||
31 | |||
32 | namespace OpenSim.Region.Environment.Interfaces | ||
33 | { | ||
34 | public class Email | ||
35 | { | ||
36 | public string time; | ||
37 | public string sender; | ||
38 | public string subject; | ||
39 | public string message; | ||
40 | public int numLeft; | ||
41 | } | ||
42 | |||
43 | public interface IEmailModule : IRegionModule | ||
44 | { | ||
45 | void SendEmail(LLUUID objectID, string address, string subject, string body); | ||
46 | Email GetNextEmail(LLUUID objectID, string sender, string subject); | ||
47 | } | ||
48 | } | ||
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 0000000..5d33b04 --- /dev/null +++ b/OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs | |||
@@ -0,0 +1,90 @@ | |||
1 | using System; | ||
2 | using System.Reflection; | ||
3 | using System.Collections.Generic; | ||
4 | using libsecondlife; | ||
5 | using OpenSim.Framework; | ||
6 | using OpenSim.Region.Environment.Interfaces; | ||
7 | using OpenSim.Region.Environment.Scenes; | ||
8 | using log4net; | ||
9 | using Nini.Config; | ||
10 | |||
11 | namespace OpenSim.Region.Environment.Modules.Scripting.EmailModules | ||
12 | { | ||
13 | public class EmailModule : IEmailModule | ||
14 | { | ||
15 | // | ||
16 | // Log | ||
17 | // | ||
18 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
19 | |||
20 | // | ||
21 | // Module vars | ||
22 | // | ||
23 | private IConfigSource m_Config; | ||
24 | |||
25 | // Scenes by Region Handle | ||
26 | private Dictionary<ulong, Scene> m_Scenes = | ||
27 | new Dictionary<ulong, Scene>(); | ||
28 | |||
29 | private bool m_Enabled = false; | ||
30 | |||
31 | public void Initialise(Scene scene, IConfigSource config) | ||
32 | { | ||
33 | m_Config = config; | ||
34 | |||
35 | IConfig startupConfig = m_Config.Configs["Startup"]; | ||
36 | |||
37 | m_Enabled = (startupConfig.GetString("emailmodule", | ||
38 | "DefaultEmailModule") == "DefaultEmailModule"); | ||
39 | |||
40 | // It's a go! | ||
41 | if (m_Enabled) | ||
42 | { | ||
43 | lock (m_Scenes) | ||
44 | { | ||
45 | // Claim the interface slot | ||
46 | scene.RegisterModuleInterface<IEmailModule>(this); | ||
47 | |||
48 | // Add to scene list | ||
49 | if (m_Scenes.ContainsKey(scene.RegionInfo.RegionHandle)) | ||
50 | { | ||
51 | m_Scenes[scene.RegionInfo.RegionHandle] = scene; | ||
52 | } | ||
53 | else | ||
54 | { | ||
55 | m_Scenes.Add(scene.RegionInfo.RegionHandle, scene); | ||
56 | } | ||
57 | } | ||
58 | |||
59 | m_log.Info("[EMAIL] Activated DefaultEmailModule"); | ||
60 | } | ||
61 | } | ||
62 | |||
63 | public void PostInitialise() | ||
64 | { | ||
65 | } | ||
66 | |||
67 | public void Close() | ||
68 | { | ||
69 | } | ||
70 | |||
71 | public string Name | ||
72 | { | ||
73 | get { return "DefaultEmailModule"; } | ||
74 | } | ||
75 | |||
76 | public bool IsSharedModule | ||
77 | { | ||
78 | get { return true; } | ||
79 | } | ||
80 | |||
81 | public void SendEmail(LLUUID objectID, string address, string subject, string body) | ||
82 | { | ||
83 | } | ||
84 | |||
85 | public Email GetNextEmail(LLUUID objectID, string sender, string subject) | ||
86 | { | ||
87 | return null; | ||
88 | } | ||
89 | } | ||
90 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 1579233..7887515 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 | |||
2042 | public void llEmail(string address, string subject, string message) | 2042 | public void llEmail(string address, string subject, string message) |
2043 | { | 2043 | { |
2044 | m_host.AddScriptLPS(1); | 2044 | m_host.AddScriptLPS(1); |
2045 | NotImplemented("llEmail"); | 2045 | IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface<IEmailModule>(); |
2046 | if(emailModule == null) | ||
2047 | return; | ||
2048 | |||
2049 | emailModule.SendEmail(m_host.UUID, address, subject, message); | ||
2046 | } | 2050 | } |
2047 | 2051 | ||
2048 | public void llGetNextEmail(string address, string subject) | 2052 | public void llGetNextEmail(string address, string subject) |
2049 | { | 2053 | { |
2050 | m_host.AddScriptLPS(1); | 2054 | m_host.AddScriptLPS(1); |
2051 | NotImplemented("llGetNextEmail"); | 2055 | IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface<IEmailModule>(); |
2056 | if(emailModule == null) | ||
2057 | return; | ||
2058 | Email email; | ||
2059 | |||
2060 | email = emailModule.GetNextEmail(m_host.UUID, address, subject); | ||
2061 | |||
2062 | if(email == null) | ||
2063 | return; | ||
2064 | |||
2065 | m_ScriptEngine.PostObjectEvent(m_host.LocalId, | ||
2066 | new EventParams("email", | ||
2067 | new Object[] { | ||
2068 | new LSL_Types.LSLString(email.time), | ||
2069 | new LSL_Types.LSLString(email.sender), | ||
2070 | new LSL_Types.LSLString(email.subject), | ||
2071 | new LSL_Types.LSLString(email.message), | ||
2072 | new LSL_Types.LSLInteger(email.numLeft)}, | ||
2073 | new DetectParams[0])); | ||
2074 | |||
2052 | } | 2075 | } |
2053 | 2076 | ||
2054 | public string llGetKey() | 2077 | public string llGetKey() |