diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/Chat/IRCBridgeModule.cs | 121 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Resources/OptionalModules.addin.xml | 3 |
2 files changed, 49 insertions, 75 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Chat/IRCBridgeModule.cs b/OpenSim/Region/OptionalModules/Avatar/Chat/IRCBridgeModule.cs index fdc2bd9..5ebbd7b 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Chat/IRCBridgeModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Chat/IRCBridgeModule.cs | |||
@@ -38,87 +38,61 @@ using OpenSim.Region.Framework.Scenes; | |||
38 | 38 | ||
39 | namespace OpenSim.Region.OptionalModules.Avatar.Chat | 39 | namespace OpenSim.Region.OptionalModules.Avatar.Chat |
40 | { | 40 | { |
41 | public class IRCBridgeModule : IRegionModule | 41 | public class IRCBridgeModule : INonSharedRegionModule |
42 | { | 42 | { |
43 | private static readonly ILog m_log = | 43 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
44 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
45 | 44 | ||
46 | internal static bool configured = false; | 45 | internal static bool m_pluginEnabled = false; |
47 | internal static bool enabled = false; | 46 | internal static IConfig m_config = null; |
48 | internal static IConfig m_config = null; | ||
49 | 47 | ||
50 | internal static List<ChannelState> m_channels = new List<ChannelState>(); | 48 | internal static List<ChannelState> m_channels = new List<ChannelState>(); |
51 | internal static List<RegionState> m_regions = new List<RegionState>(); | 49 | internal static List<RegionState> m_regions = new List<RegionState>(); |
52 | 50 | ||
53 | internal static string password = String.Empty; | 51 | internal static string m_password = String.Empty; |
52 | internal RegionState m_region = null; | ||
54 | 53 | ||
55 | internal RegionState region = null; | 54 | #region INonSharedRegionModule Members |
56 | |||
57 | #region IRegionModule Members | ||
58 | 55 | ||
59 | public string Name | 56 | public string Name |
60 | { | 57 | { |
61 | get { return "IRCBridgeModule"; } | 58 | get { return "IRCBridgeModule"; } |
62 | } | 59 | } |
63 | 60 | ||
64 | public bool IsSharedModule | 61 | public void Initialise(IConfigSource config) |
65 | { | 62 | { |
66 | get { return false; } | 63 | m_config = config.Configs["IRC"]; |
67 | } | 64 | if (m_config == null) |
68 | |||
69 | public void Initialise(Scene scene, IConfigSource config) | ||
70 | { | ||
71 | // Do a once-only scan of the configuration file to make | ||
72 | // sure it's basically intact. | ||
73 | |||
74 | if (!configured) | ||
75 | { | 65 | { |
76 | configured = true; | 66 | m_log.InfoFormat("[IRC-Bridge] module not configured"); |
77 | 67 | return; | |
78 | try | 68 | } |
79 | { | ||
80 | if ((m_config = config.Configs["IRC"]) == null) | ||
81 | { | ||
82 | m_log.InfoFormat("[IRC-Bridge] module not configured"); | ||
83 | return; | ||
84 | } | ||
85 | |||
86 | if (!m_config.GetBoolean("enabled", false)) | ||
87 | { | ||
88 | m_log.InfoFormat("[IRC-Bridge] module disabled in configuration"); | ||
89 | return; | ||
90 | } | ||
91 | } | ||
92 | catch (Exception e) | ||
93 | { | ||
94 | m_log.ErrorFormat("[IRC-Bridge] configuration failed : {0}", e.Message); | ||
95 | return; | ||
96 | } | ||
97 | 69 | ||
98 | enabled = true; | 70 | if (!m_config.GetBoolean("enabled", false)) |
71 | { | ||
72 | m_log.InfoFormat("[IRC-Bridge] module disabled in configuration"); | ||
73 | return; | ||
74 | } | ||
99 | 75 | ||
100 | if (config.Configs["RemoteAdmin"] != null) | 76 | if (config.Configs["RemoteAdmin"] != null) |
101 | { | 77 | { |
102 | password = config.Configs["RemoteAdmin"].GetString("access_password", password); | 78 | m_password = config.Configs["RemoteAdmin"].GetString("access_password", m_password); |
103 | scene.CommsManager.HttpServer.AddXmlRPCHandler("irc_admin", XmlRpcAdminMethod, false); | ||
104 | } | ||
105 | } | 79 | } |
106 | 80 | ||
107 | // Iff the IRC bridge is enabled, then each new region may be | 81 | m_pluginEnabled = true; |
108 | // connected to IRC. But it should NOT be obligatory (and it | 82 | } |
109 | // is not). | 83 | |
110 | // We have to do ALL of the startup here because PostInitialize | 84 | public void AddRegion(Scene scene) |
111 | // is not called when a region gets created in-flight from the | 85 | { |
112 | // command line. | 86 | if (m_pluginEnabled) |
113 | |||
114 | if (enabled) | ||
115 | { | 87 | { |
116 | try | 88 | try |
117 | { | 89 | { |
118 | m_log.InfoFormat("[IRC-Bridge] Connecting region {0}", scene.RegionInfo.RegionName); | 90 | m_log.InfoFormat("[IRC-Bridge] Connecting region {0}", scene.RegionInfo.RegionName); |
119 | region = new RegionState(scene, m_config); | 91 | if (!String.IsNullOrEmpty(m_password)) |
120 | lock (m_regions) m_regions.Add(region); | 92 | scene.CommsManager.HttpServer.AddXmlRPCHandler("irc_admin", XmlRpcAdminMethod, false); |
121 | region.Open(); | 93 | m_region = new RegionState(scene, m_config); |
94 | lock (m_regions) m_regions.Add(m_region); | ||
95 | m_region.Open(); | ||
122 | } | 96 | } |
123 | catch (Exception e) | 97 | catch (Exception e) |
124 | { | 98 | { |
@@ -132,34 +106,33 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
132 | } | 106 | } |
133 | } | 107 | } |
134 | 108 | ||
135 | // This module can be called in-flight in which case PostInitialize | ||
136 | // is not called following Initialize. So no use is made of this | ||
137 | // call. | ||
138 | 109 | ||
139 | public void PostInitialise() | 110 | public void RegionLoaded(Scene scene) |
140 | { | 111 | { |
141 | } | 112 | } |
142 | 113 | ||
143 | // Called immediately before the region module is unloaded. Cleanup | 114 | public void RemoveRegion(Scene scene) |
144 | // the region. | ||
145 | |||
146 | public void Close() | ||
147 | { | 115 | { |
148 | if (!enabled) | 116 | if (!m_pluginEnabled) |
149 | return; | 117 | return; |
150 | 118 | ||
151 | if (region == null) | 119 | if (m_region == null) |
152 | return; | 120 | return; |
153 | 121 | ||
154 | region.Close(); | 122 | if (!String.IsNullOrEmpty(m_password)) |
123 | scene.CommsManager.HttpServer.RemoveXmlRPCHandler("irc_admin"); | ||
124 | |||
125 | m_region.Close(); | ||
155 | 126 | ||
156 | if (m_regions.Contains(region)) | 127 | if (m_regions.Contains(m_region)) |
157 | { | 128 | { |
158 | lock (m_regions) m_regions.Remove(region); | 129 | lock (m_regions) m_regions.Remove(m_region); |
159 | } | 130 | } |
160 | |||
161 | } | 131 | } |
162 | 132 | ||
133 | public void Close() | ||
134 | { | ||
135 | } | ||
163 | #endregion | 136 | #endregion |
164 | 137 | ||
165 | public static XmlRpcResponse XmlRpcAdminMethod(XmlRpcRequest request) | 138 | public static XmlRpcResponse XmlRpcAdminMethod(XmlRpcRequest request) |
@@ -175,11 +148,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Chat | |||
175 | bool found = false; | 148 | bool found = false; |
176 | string region = String.Empty; | 149 | string region = String.Empty; |
177 | 150 | ||
178 | if (password != String.Empty) | 151 | if (m_password != String.Empty) |
179 | { | 152 | { |
180 | if (!requestData.ContainsKey("password")) | 153 | if (!requestData.ContainsKey("password")) |
181 | throw new Exception("Invalid request"); | 154 | throw new Exception("Invalid request"); |
182 | if ((string)requestData["password"] != password) | 155 | if ((string)requestData["password"] != m_password) |
183 | throw new Exception("Invalid request"); | 156 | throw new Exception("Invalid request"); |
184 | } | 157 | } |
185 | 158 | ||
diff --git a/OpenSim/Region/OptionalModules/Resources/OptionalModules.addin.xml b/OpenSim/Region/OptionalModules/Resources/OptionalModules.addin.xml index 60d4780..69d3e57 100644 --- a/OpenSim/Region/OptionalModules/Resources/OptionalModules.addin.xml +++ b/OpenSim/Region/OptionalModules/Resources/OptionalModules.addin.xml | |||
@@ -1,4 +1,4 @@ | |||
1 | <Addin id="OpenSim.Region.OptionalModules" version="0.1"> | 1 | <Addin id="OpenSim.Region.OptionalModules" version="0.2"> |
2 | <Runtime> | 2 | <Runtime> |
3 | <Import assembly="OpenSim.Region.OptionalModules.dll"/> | 3 | <Import assembly="OpenSim.Region.OptionalModules.dll"/> |
4 | </Runtime> | 4 | </Runtime> |
@@ -8,6 +8,7 @@ | |||
8 | </Dependencies> | 8 | </Dependencies> |
9 | 9 | ||
10 | <Extension path = "/OpenSim/RegionModules"> | 10 | <Extension path = "/OpenSim/RegionModules"> |
11 | <RegionModule id="IRCBridge" type="OpenSim.Region.OptionalModules.Avatar.Chat.IRCBridgeModule" /> | ||
11 | <RegionModule id="XmlRpcGroups" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsModule" /> | 12 | <RegionModule id="XmlRpcGroups" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsModule" /> |
12 | <RegionModule id="XmlRpcGroupsMessaging" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsMessaging" /> | 13 | <RegionModule id="XmlRpcGroupsMessaging" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsMessaging" /> |
13 | </Extension> | 14 | </Extension> |