aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/Environment/Interfaces/IEmailModule.cs48
-rw-r--r--OpenSim/Region/Environment/Modules/Scripting/EMailModules/EmailModule.cs90
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs27
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
28using System;
29using OpenSim.Framework;
30using libsecondlife;
31
32namespace 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 @@
1using System;
2using System.Reflection;
3using System.Collections.Generic;
4using libsecondlife;
5using OpenSim.Framework;
6using OpenSim.Region.Environment.Interfaces;
7using OpenSim.Region.Environment.Scenes;
8using log4net;
9using Nini.Config;
10
11namespace 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()