aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs')
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs191
1 files changed, 98 insertions, 93 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index cceaa9b..4095674 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -41,6 +41,7 @@ using log4net;
41using Nini.Config; 41using Nini.Config;
42using Nwc.XmlRpc; 42using Nwc.XmlRpc;
43using OpenSim.Framework; 43using OpenSim.Framework;
44using Mono.Addins;
44 45
45using OpenSim.Framework.Capabilities; 46using OpenSim.Framework.Capabilities;
46using OpenSim.Framework.Servers; 47using OpenSim.Framework.Servers;
@@ -52,7 +53,8 @@ using System.Text.RegularExpressions;
52 53
53namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice 54namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
54{ 55{
55 public class FreeSwitchVoiceModule : IRegionModule, IVoiceModule 56 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "FreeSwitchVoiceModule")]
57 public class FreeSwitchVoiceModule : INonSharedRegionModule, IVoiceModule
56 { 58 {
57 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 59 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
58 60
@@ -64,8 +66,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
64 private static readonly string m_chatSessionRequestPath = "0009/"; 66 private static readonly string m_chatSessionRequestPath = "0009/";
65 67
66 // Control info 68 // Control info
67 private static bool m_WOF = true; 69 private static bool m_Enabled = false;
68 private static bool m_pluginEnabled = false;
69 70
70 // FreeSwitch server is going to contact us and ask us all 71 // FreeSwitch server is going to contact us and ask us all
71 // sorts of things. 72 // sorts of things.
@@ -104,9 +105,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
104 105
105 private IConfig m_config; 106 private IConfig m_config;
106 107
107 public void Initialise(Scene scene, IConfigSource config) 108 public void Initialise(IConfigSource config)
108 { 109 {
109 m_scene = scene;
110 m_config = config.Configs["FreeSwitchVoice"]; 110 m_config = config.Configs["FreeSwitchVoice"];
111 111
112 if (null == m_config) 112 if (null == m_config)
@@ -121,86 +121,106 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
121 return; 121 return;
122 } 122 }
123 123
124 // This is only done the FIRST time this method is invoked. 124 m_Enabled = true;
125 if (m_WOF)
126 {
127 m_pluginEnabled = true;
128 m_WOF = false;
129 125
130 try 126 try
127 {
128 m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty);
129 m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty);
130 m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty);
131
132 // XXX: get IP address of HTTP server. (This can be this OpenSim server or another, or could be a dedicated grid service or may live on the freeswitch server)
133
134 string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty);
135 int servicePort = m_config.GetInt("freeswitch_service_port", 80);
136 IPAddress serviceIPAddress = IPAddress.Parse(serviceIP);
137 // m_FreeSwitchServiceIP = new IPEndPoint(serviceIPAddress, servicePort);
138 m_freeSwitchServicePort = servicePort;
139 m_freeSwitchRealm = m_config.GetString("freeswitch_realm", String.Empty);
140 m_freeSwitchSIPProxy = m_config.GetString("freeswitch_sip_proxy", m_freeSwitchRealm);
141 m_freeSwitchAttemptUseSTUN = m_config.GetBoolean("freeswitch_attempt_stun", true);
142 // m_freeSwitchSTUNServer = m_config.GetString("freeswitch_stun_server", m_freeSwitchRealm);
143 m_freeSwitchEchoServer = m_config.GetString("freeswitch_echo_server", m_freeSwitchRealm);
144 m_freeSwitchEchoPort = m_config.GetInt("freeswitch_echo_port", 50505);
145 m_freeSwitchDefaultWellKnownIP = m_config.GetString("freeswitch_well_known_ip", m_freeSwitchRealm);
146 m_openSimWellKnownHTTPAddress = m_config.GetString("opensim_well_known_http_address", serviceIPAddress.ToString());
147 m_freeSwitchDefaultTimeout = m_config.GetInt("freeswitch_default_timeout", 5000);
148 // m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120);
149 m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty);
150 m_freeSwitchContext = m_config.GetString("freeswitch_context", "default");
151
152 if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
153 String.IsNullOrEmpty(m_freeSwitchServerPass) ||
154 String.IsNullOrEmpty(m_freeSwitchRealm) ||
155 String.IsNullOrEmpty(m_freeSwitchAPIPrefix))
131 { 156 {
132 m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty); 157 m_log.Error("[FreeSwitchVoice] plugin mis-configured");
133 m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty); 158 m_log.Info("[FreeSwitchVoice] plugin disabled: incomplete configuration");
134 m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty); 159 return;
135 160 }
136 // XXX: get IP address of HTTP server. (This can be this OpenSim server or another, or could be a dedicated grid service or may live on the freeswitch server)
137
138 string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty);
139 int servicePort = m_config.GetInt("freeswitch_service_port", 80);
140 IPAddress serviceIPAddress = IPAddress.Parse(serviceIP);
141 // m_FreeSwitchServiceIP = new IPEndPoint(serviceIPAddress, servicePort);
142 m_freeSwitchServicePort = servicePort;
143 m_freeSwitchRealm = m_config.GetString("freeswitch_realm", String.Empty);
144 m_freeSwitchSIPProxy = m_config.GetString("freeswitch_sip_proxy", m_freeSwitchRealm);
145 m_freeSwitchAttemptUseSTUN = m_config.GetBoolean("freeswitch_attempt_stun", true);
146 // m_freeSwitchSTUNServer = m_config.GetString("freeswitch_stun_server", m_freeSwitchRealm);
147 m_freeSwitchEchoServer = m_config.GetString("freeswitch_echo_server", m_freeSwitchRealm);
148 m_freeSwitchEchoPort = m_config.GetInt("freeswitch_echo_port", 50505);
149 m_freeSwitchDefaultWellKnownIP = m_config.GetString("freeswitch_well_known_ip", m_freeSwitchRealm);
150 m_openSimWellKnownHTTPAddress = m_config.GetString("opensim_well_known_http_address", serviceIPAddress.ToString());
151 m_freeSwitchDefaultTimeout = m_config.GetInt("freeswitch_default_timeout", 5000);
152 // m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120);
153 m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty);
154 m_freeSwitchContext = m_config.GetString("freeswitch_context", "default");
155
156 if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
157 String.IsNullOrEmpty(m_freeSwitchServerPass) ||
158 String.IsNullOrEmpty(m_freeSwitchRealm) ||
159 String.IsNullOrEmpty(m_freeSwitchAPIPrefix))
160 {
161 m_log.Error("[FreeSwitchVoice] plugin mis-configured");
162 m_log.Info("[FreeSwitchVoice] plugin disabled: incomplete configuration");
163 return;
164 }
165 161
166 // set up http request handlers for 162 // set up http request handlers for
167 // - prelogin: viv_get_prelogin.php 163 // - prelogin: viv_get_prelogin.php
168 // - signin: viv_signin.php 164 // - signin: viv_signin.php
169 // - buddies: viv_buddy.php 165 // - buddies: viv_buddy.php
170 // - ???: viv_watcher.php 166 // - ???: viv_watcher.php
171 // - signout: viv_signout.php 167 // - signout: viv_signout.php
172 MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), 168 MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix),
173 FreeSwitchSLVoiceGetPreloginHTTPHandler); 169 FreeSwitchSLVoiceGetPreloginHTTPHandler);
174 170
175 // RestStreamHandler h = new 171 // RestStreamHandler h = new
176 // RestStreamHandler("GET", 172 // RestStreamHandler("GET",
177 // String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler); 173 // String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler);
178 // MainServer.Instance.AddStreamHandler(h); 174 // MainServer.Instance.AddStreamHandler(h);
179 175
180 176
181 177
182 MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_signin.php", m_freeSwitchAPIPrefix), 178 MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_signin.php", m_freeSwitchAPIPrefix),
183 FreeSwitchSLVoiceSigninHTTPHandler); 179 FreeSwitchSLVoiceSigninHTTPHandler);
184 180
185 MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix), 181 MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix),
186 FreeSwitchSLVoiceBuddyHTTPHandler); 182 FreeSwitchSLVoiceBuddyHTTPHandler);
187 183
188 m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm); 184 m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm);
189 185
190 m_pluginEnabled = true; 186 m_Enabled = true;
191 m_WOF = false; 187
188 m_log.Info("[FreeSwitchVoice] plugin enabled");
189 }
190 catch (Exception e)
191 {
192 m_log.ErrorFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.Message);
193 m_log.DebugFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.ToString());
194 return;
195 }
192 196
193 m_log.Info("[FreeSwitchVoice] plugin enabled"); 197 // This here is a region module trying to make a global setting.
198 // Not really a good idea but it's Windows only, so I can't test.
199 try
200 {
201 ServicePointManager.ServerCertificateValidationCallback += CustomCertificateValidation;
202 }
203 catch (NotImplementedException)
204 {
205 try
206 {
207#pragma warning disable 0612, 0618
208 // Mono does not implement the ServicePointManager.ServerCertificateValidationCallback yet! Don't remove this!
209 ServicePointManager.CertificatePolicy = new MonoCert();
210#pragma warning restore 0612, 0618
194 } 211 }
195 catch (Exception e) 212 catch (Exception)
196 { 213 {
197 m_log.ErrorFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.Message); 214 //m_log.Error("[FreeSwitchVoice]: Certificate validation handler change not supported. You may get ssl certificate validation errors teleporting from your region to some SSL regions.");
198 m_log.DebugFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.ToString());
199 return;
200 } 215 }
201 } 216 }
217 }
218
219 public void AddRegion(Scene scene)
220 {
221 m_scene = scene;
202 222
203 if (m_pluginEnabled) 223 if (m_Enabled)
204 { 224 {
205 // we need to capture scene in an anonymous method 225 // we need to capture scene in an anonymous method
206 // here as we need it later in the callbacks 226 // here as we need it later in the callbacks
@@ -208,36 +228,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
208 { 228 {
209 OnRegisterCaps(scene, agentID, caps); 229 OnRegisterCaps(scene, agentID, caps);
210 }; 230 };
211
212 try
213 {
214 ServicePointManager.ServerCertificateValidationCallback += CustomCertificateValidation;
215 }
216 catch (NotImplementedException)
217 {
218 try
219 {
220#pragma warning disable 0612, 0618
221 // Mono does not implement the ServicePointManager.ServerCertificateValidationCallback yet! Don't remove this!
222 ServicePointManager.CertificatePolicy = new MonoCert();
223#pragma warning restore 0612, 0618
224 }
225 catch (Exception)
226 {
227 m_log.Error("[FreeSwitchVoice]: Certificate validation handler change not supported. You may get ssl certificate validation errors teleporting from your region to some SSL regions.");
228 }
229 }
230 } 231 }
231 } 232 }
232 233
233 public void PostInitialise() 234 public void RemoveRegion(Scene scene)
235 {
236 }
237
238 public void RegionLoaded(Scene scene)
234 { 239 {
235 if (m_pluginEnabled) 240 if (m_Enabled)
236 { 241 {
237 m_log.Info("[FreeSwitchVoice] registering IVoiceModule with the scene"); 242 m_log.Info("[FreeSwitchVoice] registering IVoiceModule with the scene");
238 243
239 // register the voice interface for this module, so the script engine can call us 244 // register the voice interface for this module, so the script engine can call us
240 m_scene.RegisterModuleInterface<IVoiceModule>(this); 245 scene.RegisterModuleInterface<IVoiceModule>(this);
241 } 246 }
242 } 247 }
243 248
@@ -250,9 +255,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
250 get { return "FreeSwitchVoiceModule"; } 255 get { return "FreeSwitchVoiceModule"; }
251 } 256 }
252 257
253 public bool IsSharedModule 258 public Type ReplaceableInterface
254 { 259 {
255 get { return true; } 260 get { return null; }
256 } 261 }
257 262
258 // <summary> 263 // <summary>