From e6c52f38c5a8b2c5ee59919942f25b9368bfa41b Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 21 Nov 2010 22:25:50 +0000
Subject: Strip the dialplan and directory methods from the region module
---
.../Voice/FreeSwitchVoice/FreeSwitchDialplan.cs | 104 ------
.../Voice/FreeSwitchVoice/FreeSwitchDirectory.cs | 348 ---------------------
.../Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 80 +----
3 files changed, 10 insertions(+), 522 deletions(-)
delete mode 100644 OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDialplan.cs
delete mode 100644 OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDialplan.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDialplan.cs
deleted file mode 100644
index 46ad30f..0000000
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDialplan.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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 OpenSimulator 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 log4net;
-using System;
-using System.Reflection;
-using System.Text;
-using System.Collections;
-
-namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
-{
- public class FreeSwitchDialplan
- {
- private static readonly ILog m_log =
- LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
-
- public Hashtable HandleDialplanRequest(string Context, string Realm, Hashtable request)
- {
- m_log.DebugFormat("[FreeSwitchVoice] HandleDialplanRequest called with {0}",request.ToString());
-
- Hashtable response = new Hashtable();
-
- foreach (DictionaryEntry item in request)
- {
- m_log.InfoFormat("[FreeSwitchDirectory] requestBody item {0} {1}",item.Key, item.Value);
- }
-
- string requestcontext = (string) request["Hunt-Context"];
- response["content_type"] = "text/xml";
- response["keepalive"] = false;
- response["int_response_code"] = 200;
- if (Context != String.Empty && Context != requestcontext)
- {
- m_log.Debug("[FreeSwitchDirectory] returning empty as it's for another context");
- response["str_response_string"] = "";
- } else {
- response["str_response_string"] = String.Format(@"
-
-
- " +
-
-/*
-
-
-
-
-
- */
-
- @"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ", Context, Realm);
- }
-
- return response;
- }
- }
-
-}
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs
deleted file mode 100644
index 17cdf74..0000000
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * 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 OpenSimulator 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 log4net;
-using System;
-using System.Reflection;
-using System.Text;
-using System.Collections;
-
-namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
-{
- public class FreeSwitchDirectory
- {
- private static readonly ILog m_log =
- LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- public Hashtable HandleDirectoryRequest(string Context, string Realm, Hashtable request)
- {
- Hashtable response = new Hashtable();
- string domain = (string) request["domain"];
- if (domain != Realm) {
- response["content_type"] = "text/xml";
- response["keepalive"] = false;
- response["int_response_code"] = 200;
- response["str_response_string"] = "";
- } else {
- m_log.DebugFormat("[FreeSwitchDirectory] HandleDirectoryRequest called with {0}",request.ToString());
-
- // information in the request we might be interested in
-
- // Request 1 sip_auth for users account
-
- //Event-Calling-Function=sofia_reg_parse_auth
- //Event-Calling-Line-Number=1494
- //action=sip_auth
- //sip_user_agent=Vivox-SDK-2.1.3010.6151-Mac%20(Feb-11-2009/16%3A42%3A41)
- //sip_auth_username=xhZuXKmRpECyr2AARJYyGgg%3D%3D (==)
- //sip_auth_realm=9.20.151.43
- //sip_contact_user=xhZuXKmRpECyr2AARJYyGgg%3D%3D (==)
- //sip_contact_host=192.168.0.3 // this shouldnt really be a local IP, investigate STUN servers
- //sip_to_user=xhZuXKmRpECyr2AARJYyGgg%3D%3D
- //sip_to_host=9.20.151.43
- //sip_auth_method=REGISTER
- //user=xhZuXKmRpECyr2AARJYyGgg%3D%3D
- //domain=9.20.151.43
- //ip=9.167.220.137 // this is the correct IP rather than sip_contact_host above when through a vpn or NAT setup
-
- foreach (DictionaryEntry item in request)
- {
- m_log.InfoFormat("[FreeSwitchDirectory] requestBody item {0} {1}", item.Key, item.Value);
- }
-
- string eventCallingFunction = (string) request["Event-Calling-Function"];
- if (eventCallingFunction == null)
- {
- eventCallingFunction = "sofia_reg_parse_auth";
- }
-
- if (eventCallingFunction.Length == 0)
- {
- eventCallingFunction = "sofia_reg_parse_auth";
- }
-
- if (eventCallingFunction == "sofia_reg_parse_auth")
- {
- string sipAuthMethod = (string)request["sip_auth_method"];
-
- if (sipAuthMethod == "REGISTER")
- {
- response = HandleRegister(Context, Realm, request);
- }
- else if (sipAuthMethod == "INVITE")
- {
- response = HandleInvite(Context, Realm, request);
- }
- else
- {
- m_log.ErrorFormat("[FreeSwitchVoice] HandleDirectoryRequest unknown sip_auth_method {0}",sipAuthMethod);
- response["int_response_code"] = 404;
- response["content_type"] = "text/xml";
- response["str_response_string"] = "";
- }
- }
- else if (eventCallingFunction == "switch_xml_locate_user")
- {
- response = HandleLocateUser(Realm, request);
- }
- else if (eventCallingFunction == "user_data_function") // gets called when an avatar to avatar call is made
- {
- response = HandleLocateUser(Realm, request);
- }
- else if (eventCallingFunction == "user_outgoing_channel")
- {
- response = HandleRegister(Context, Realm, request);
- }
- else if (eventCallingFunction == "config_sofia") // happens once on freeswitch startup
- {
- response = HandleConfigSofia(Context, Realm, request);
- }
- else if (eventCallingFunction == "switch_load_network_lists")
- {
- //response = HandleLoadNetworkLists(request);
- response["int_response_code"] = 404;
- response["keepalive"] = false;
- response["content_type"] = "text/xml";
- response["str_response_string"] = "";
- }
- else
- {
- m_log.ErrorFormat("[FreeSwitchVoice] HandleDirectoryRequest unknown Event-Calling-Function {0}",eventCallingFunction);
- response["int_response_code"] = 404;
- response["keepalive"] = false;
- response["content_type"] = "text/xml";
- response["str_response_string"] = "";
- }
- }
- return response;
- }
-
- private Hashtable HandleRegister(string Context, string Realm, Hashtable request)
- {
- m_log.Info("[FreeSwitchDirectory] HandleRegister called");
-
- // TODO the password we return needs to match that sent in the request, this is hard coded for now
- string password = "1234";
- string domain = (string) request["domain"];
- string user = (string) request["user"];
-
- Hashtable response = new Hashtable();
- response["content_type"] = "text/xml";
- response["keepalive"] = false;
- response["int_response_code"] = 200;
-
- response["str_response_string"] = String.Format(
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- ""+
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n",
- domain , user, password, Context);
-
- return response;
- }
-
- private Hashtable HandleInvite(string Context, string Realm, Hashtable request)
- {
- m_log.Info("[FreeSwitchDirectory] HandleInvite called");
-
- // TODO the password we return needs to match that sent in the request, this is hard coded for now
- string password = "1234";
- string domain = (string) request["domain"];
- string user = (string) request["user"];
- string sipRequestUser = (string) request["sip_request_user"];
-
- Hashtable response = new Hashtable();
- response["content_type"] = "text/xml";
- response["keepalive"] = false;
- response["int_response_code"] = 200;
- response["str_response_string"] = String.Format(
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- ""+
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- ""+
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n",
- domain , user, password,sipRequestUser, Context);
-
- return response;
- }
-
- private Hashtable HandleLocateUser(String Realm, Hashtable request)
- {
- m_log.Info("[FreeSwitchDirectory] HandleLocateUser called");
-
- // TODO the password we return needs to match that sent in the request, this is hard coded for now
- string domain = (string) request["domain"];
- string user = (string) request["user"];
-
- Hashtable response = new Hashtable();
- response["content_type"] = "text/xml";
- response["keepalive"] = false;
- response["int_response_code"] = 200;
- response["str_response_string"] = String.Format(
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n"+
- "\r\n"+
- ""+
- "\r\n"+
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n",
- domain , user);
-
- return response;
- }
-
- private Hashtable HandleConfigSofia(string Context, string Realm, Hashtable request)
- {
- m_log.Info("[FreeSwitchDirectory] HandleConfigSofia called");
-
- // TODO the password we return needs to match that sent in the request, this is hard coded for now
- string domain = (string) request["domain"];
-
- Hashtable response = new Hashtable();
- response["content_type"] = "text/xml";
- response["keepalive"] = false;
- response["int_response_code"] = 200;
- response["str_response_string"] = String.Format(
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n" +
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n"+
- ""+
- "\r\n" +
- "\r\n"+
- "\r\n"+
- "\r\n"+
- "\r\n" +
- "\r\n" +
- "\r\n",
- domain, Context);
-
- return response;
- }
-
-
-// private Hashtable HandleLoadNetworkLists(Hashtable request)
-// {
-// m_log.Info("[FreeSwitchDirectory] HandleLoadNetworkLists called");
-//
-// // TODO the password we return needs to match that sent in the request, this is hard coded for now
-// string domain = (string) request["domain"];
-//
-// Hashtable response = new Hashtable();
-// response["content_type"] = "text/xml";
-// response["keepalive"] = false;
-// response["int_response_code"] = 200;
-// response["str_response_string"] = String.Format(
-// "\r\n" +
-// "\r\n" +
-// "\r\n" +
-// "\r\n" +
-// "\r\n" +
-// "\r\n" +
-// "\r\n" +
-// "\r\n" +
-// "\r\n"+
-// "\r\n"+
-// "\r\n"+
-// "\r\n" +
-// "\r\n" +
-// "\r\n",
-// domain);
-//
-//
-// return response;
-// }
- }
-}
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index 242bc3f..cceaa9b 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -96,9 +96,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private string m_openSimWellKnownHTTPAddress;
private string m_freeSwitchContext;
- private FreeSwitchDirectory m_FreeSwitchDirectory;
- private FreeSwitchDialplan m_FreeSwitchDialplan;
-
private readonly Dictionary m_UUIDName = new Dictionary();
private Dictionary m_ParcelAddress = new Dictionary();
@@ -172,41 +169,24 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
// - buddies: viv_buddy.php
// - ???: viv_watcher.php
// - signout: viv_signout.php
- if (UseProxy)
- {
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/", m_freeSwitchAPIPrefix),
- ForwardProxyRequest);
- }
- else
- {
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix),
- FreeSwitchSLVoiceGetPreloginHTTPHandler);
+ MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix),
+ FreeSwitchSLVoiceGetPreloginHTTPHandler);
- // RestStreamHandler h = new
- // RestStreamHandler("GET",
- // String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler);
- // MainServer.Instance.AddStreamHandler(h);
+ // RestStreamHandler h = new
+ // RestStreamHandler("GET",
+ // String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler);
+ // MainServer.Instance.AddStreamHandler(h);
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_signin.php", m_freeSwitchAPIPrefix),
- FreeSwitchSLVoiceSigninHTTPHandler);
+ MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_signin.php", m_freeSwitchAPIPrefix),
+ FreeSwitchSLVoiceSigninHTTPHandler);
- // set up http request handlers to provide
- // on-demand FreeSwitch configuration to
- // FreeSwitch's mod_curl_xml
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/freeswitch-config", m_freeSwitchAPIPrefix),
- FreeSwitchConfigHTTPHandler);
-
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix),
- FreeSwitchSLVoiceBuddyHTTPHandler);
- }
+ MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix),
+ FreeSwitchSLVoiceBuddyHTTPHandler);
m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm);
- m_FreeSwitchDirectory = new FreeSwitchDirectory();
- m_FreeSwitchDialplan = new FreeSwitchDialplan();
-
m_pluginEnabled = true;
m_WOF = false;
@@ -725,46 +705,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
response["int_response_code"] = 200;
return response;
- /*
-
- OKOklib_session
- * xMj1QJSc7TA-G7XqcW6QXAg==:1290551700:050d35c6fef96f132f780d8039ff7592::
- * xMj1QJSc7TA-G7XqcW6QXAg==:1290551700:050d35c6fef96f132f780d8039ff7592::
- * 1
- * 7449
- * Teravus Ousley
- */
- }
-
- public Hashtable FreeSwitchConfigHTTPHandler(Hashtable request)
- {
- m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler called with {0}", (string)request["body"]);
-
- Hashtable response = new Hashtable();
- response["str_response_string"] = string.Empty;
- // all the params come as NVPs in the request body
- Hashtable requestBody = parseRequestBody((string) request["body"]);
-
- // is this a dialplan or directory request
- string section = (string) requestBody["section"];
-
- if (section == "directory")
- response = m_FreeSwitchDirectory.HandleDirectoryRequest(m_freeSwitchContext, m_freeSwitchRealm, requestBody);
- else if (section == "dialplan")
- response = m_FreeSwitchDialplan.HandleDialplanRequest(m_freeSwitchContext, m_freeSwitchRealm, requestBody);
- else
- m_log.WarnFormat("[FreeSwitchVoice]: section was {0}", section);
-
- // XXX: re-generate dialplan:
- // - conf == region UUID
- // - conf number = region port
- // -> TODO Initialise(): keep track of regions via events
- // re-generate accounts for all avatars
- // -> TODO Initialise(): keep track of avatars via events
- Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline);
-
- m_log.DebugFormat("[FreeSwitchVoice] FreeSwitchConfigHTTPHandler return {0}",normalizeEndLines.Replace(((string)response["str_response_string"]), ""));
- return response;
}
public Hashtable parseRequestBody(string body)
--
cgit v1.1
From 6fa24f46712b7e266f6d5dfc55f395f2c489671c Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 21 Nov 2010 22:40:03 +0000
Subject: Convert the Freeswitch module to new style
---
.../Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 191 +++++++++++----------
1 file changed, 98 insertions(+), 93 deletions(-)
(limited to 'OpenSim/Region/OptionalModules')
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;
using Nini.Config;
using Nwc.XmlRpc;
using OpenSim.Framework;
+using Mono.Addins;
using OpenSim.Framework.Capabilities;
using OpenSim.Framework.Servers;
@@ -52,7 +53,8 @@ using System.Text.RegularExpressions;
namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
{
- public class FreeSwitchVoiceModule : IRegionModule, IVoiceModule
+ [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "FreeSwitchVoiceModule")]
+ public class FreeSwitchVoiceModule : INonSharedRegionModule, IVoiceModule
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -64,8 +66,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private static readonly string m_chatSessionRequestPath = "0009/";
// Control info
- private static bool m_WOF = true;
- private static bool m_pluginEnabled = false;
+ private static bool m_Enabled = false;
// FreeSwitch server is going to contact us and ask us all
// sorts of things.
@@ -104,9 +105,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private IConfig m_config;
- public void Initialise(Scene scene, IConfigSource config)
+ public void Initialise(IConfigSource config)
{
- m_scene = scene;
m_config = config.Configs["FreeSwitchVoice"];
if (null == m_config)
@@ -121,86 +121,106 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
return;
}
- // This is only done the FIRST time this method is invoked.
- if (m_WOF)
- {
- m_pluginEnabled = true;
- m_WOF = false;
+ m_Enabled = true;
- try
+ try
+ {
+ m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty);
+ m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty);
+ m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty);
+
+ // 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)
+
+ string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty);
+ int servicePort = m_config.GetInt("freeswitch_service_port", 80);
+ IPAddress serviceIPAddress = IPAddress.Parse(serviceIP);
+ // m_FreeSwitchServiceIP = new IPEndPoint(serviceIPAddress, servicePort);
+ m_freeSwitchServicePort = servicePort;
+ m_freeSwitchRealm = m_config.GetString("freeswitch_realm", String.Empty);
+ m_freeSwitchSIPProxy = m_config.GetString("freeswitch_sip_proxy", m_freeSwitchRealm);
+ m_freeSwitchAttemptUseSTUN = m_config.GetBoolean("freeswitch_attempt_stun", true);
+ // m_freeSwitchSTUNServer = m_config.GetString("freeswitch_stun_server", m_freeSwitchRealm);
+ m_freeSwitchEchoServer = m_config.GetString("freeswitch_echo_server", m_freeSwitchRealm);
+ m_freeSwitchEchoPort = m_config.GetInt("freeswitch_echo_port", 50505);
+ m_freeSwitchDefaultWellKnownIP = m_config.GetString("freeswitch_well_known_ip", m_freeSwitchRealm);
+ m_openSimWellKnownHTTPAddress = m_config.GetString("opensim_well_known_http_address", serviceIPAddress.ToString());
+ m_freeSwitchDefaultTimeout = m_config.GetInt("freeswitch_default_timeout", 5000);
+ // m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120);
+ m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty);
+ m_freeSwitchContext = m_config.GetString("freeswitch_context", "default");
+
+ if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
+ String.IsNullOrEmpty(m_freeSwitchServerPass) ||
+ String.IsNullOrEmpty(m_freeSwitchRealm) ||
+ String.IsNullOrEmpty(m_freeSwitchAPIPrefix))
{
- m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty);
- m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty);
- m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty);
-
- // 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)
-
- string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty);
- int servicePort = m_config.GetInt("freeswitch_service_port", 80);
- IPAddress serviceIPAddress = IPAddress.Parse(serviceIP);
- // m_FreeSwitchServiceIP = new IPEndPoint(serviceIPAddress, servicePort);
- m_freeSwitchServicePort = servicePort;
- m_freeSwitchRealm = m_config.GetString("freeswitch_realm", String.Empty);
- m_freeSwitchSIPProxy = m_config.GetString("freeswitch_sip_proxy", m_freeSwitchRealm);
- m_freeSwitchAttemptUseSTUN = m_config.GetBoolean("freeswitch_attempt_stun", true);
- // m_freeSwitchSTUNServer = m_config.GetString("freeswitch_stun_server", m_freeSwitchRealm);
- m_freeSwitchEchoServer = m_config.GetString("freeswitch_echo_server", m_freeSwitchRealm);
- m_freeSwitchEchoPort = m_config.GetInt("freeswitch_echo_port", 50505);
- m_freeSwitchDefaultWellKnownIP = m_config.GetString("freeswitch_well_known_ip", m_freeSwitchRealm);
- m_openSimWellKnownHTTPAddress = m_config.GetString("opensim_well_known_http_address", serviceIPAddress.ToString());
- m_freeSwitchDefaultTimeout = m_config.GetInt("freeswitch_default_timeout", 5000);
- // m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120);
- m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty);
- m_freeSwitchContext = m_config.GetString("freeswitch_context", "default");
-
- if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
- String.IsNullOrEmpty(m_freeSwitchServerPass) ||
- String.IsNullOrEmpty(m_freeSwitchRealm) ||
- String.IsNullOrEmpty(m_freeSwitchAPIPrefix))
- {
- m_log.Error("[FreeSwitchVoice] plugin mis-configured");
- m_log.Info("[FreeSwitchVoice] plugin disabled: incomplete configuration");
- return;
- }
+ m_log.Error("[FreeSwitchVoice] plugin mis-configured");
+ m_log.Info("[FreeSwitchVoice] plugin disabled: incomplete configuration");
+ return;
+ }
- // set up http request handlers for
- // - prelogin: viv_get_prelogin.php
- // - signin: viv_signin.php
- // - buddies: viv_buddy.php
- // - ???: viv_watcher.php
- // - signout: viv_signout.php
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix),
- FreeSwitchSLVoiceGetPreloginHTTPHandler);
+ // set up http request handlers for
+ // - prelogin: viv_get_prelogin.php
+ // - signin: viv_signin.php
+ // - buddies: viv_buddy.php
+ // - ???: viv_watcher.php
+ // - signout: viv_signout.php
+ MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix),
+ FreeSwitchSLVoiceGetPreloginHTTPHandler);
- // RestStreamHandler h = new
- // RestStreamHandler("GET",
- // String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler);
- // MainServer.Instance.AddStreamHandler(h);
+ // RestStreamHandler h = new
+ // RestStreamHandler("GET",
+ // String.Format("{0}/viv_get_prelogin.php", m_freeSwitchAPIPrefix), FreeSwitchSLVoiceGetPreloginHTTPHandler);
+ // MainServer.Instance.AddStreamHandler(h);
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_signin.php", m_freeSwitchAPIPrefix),
- FreeSwitchSLVoiceSigninHTTPHandler);
+ MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_signin.php", m_freeSwitchAPIPrefix),
+ FreeSwitchSLVoiceSigninHTTPHandler);
- MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix),
- FreeSwitchSLVoiceBuddyHTTPHandler);
+ MainServer.Instance.AddHTTPHandler(String.Format("{0}/viv_buddy.php", m_freeSwitchAPIPrefix),
+ FreeSwitchSLVoiceBuddyHTTPHandler);
- m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm);
+ m_log.InfoFormat("[FreeSwitchVoice] using FreeSwitch server {0}", m_freeSwitchRealm);
- m_pluginEnabled = true;
- m_WOF = false;
+ m_Enabled = true;
+
+ m_log.Info("[FreeSwitchVoice] plugin enabled");
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.Message);
+ m_log.DebugFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.ToString());
+ return;
+ }
- m_log.Info("[FreeSwitchVoice] plugin enabled");
+ // This here is a region module trying to make a global setting.
+ // Not really a good idea but it's Windows only, so I can't test.
+ try
+ {
+ ServicePointManager.ServerCertificateValidationCallback += CustomCertificateValidation;
+ }
+ catch (NotImplementedException)
+ {
+ try
+ {
+#pragma warning disable 0612, 0618
+ // Mono does not implement the ServicePointManager.ServerCertificateValidationCallback yet! Don't remove this!
+ ServicePointManager.CertificatePolicy = new MonoCert();
+#pragma warning restore 0612, 0618
}
- catch (Exception e)
+ catch (Exception)
{
- m_log.ErrorFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.Message);
- m_log.DebugFormat("[FreeSwitchVoice] plugin initialization failed: {0}", e.ToString());
- return;
+ //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.");
}
}
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ m_scene = scene;
- if (m_pluginEnabled)
+ if (m_Enabled)
{
// we need to capture scene in an anonymous method
// here as we need it later in the callbacks
@@ -208,36 +228,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
{
OnRegisterCaps(scene, agentID, caps);
};
-
- try
- {
- ServicePointManager.ServerCertificateValidationCallback += CustomCertificateValidation;
- }
- catch (NotImplementedException)
- {
- try
- {
-#pragma warning disable 0612, 0618
- // Mono does not implement the ServicePointManager.ServerCertificateValidationCallback yet! Don't remove this!
- ServicePointManager.CertificatePolicy = new MonoCert();
-#pragma warning restore 0612, 0618
- }
- catch (Exception)
- {
- 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.");
- }
- }
}
}
- public void PostInitialise()
+ public void RemoveRegion(Scene scene)
+ {
+ }
+
+ public void RegionLoaded(Scene scene)
{
- if (m_pluginEnabled)
+ if (m_Enabled)
{
m_log.Info("[FreeSwitchVoice] registering IVoiceModule with the scene");
// register the voice interface for this module, so the script engine can call us
- m_scene.RegisterModuleInterface(this);
+ scene.RegisterModuleInterface(this);
}
}
@@ -250,9 +255,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
get { return "FreeSwitchVoiceModule"; }
}
- public bool IsSharedModule
+ public Type ReplaceableInterface
{
- get { return true; }
+ get { return null; }
}
//
--
cgit v1.1
From 21058425133dff8499f856a32af29547f537445a Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 21 Nov 2010 23:24:39 +0000
Subject: Finish the standalone mode freeswitch work and add config examples
---
.../Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs | 90 +++++++++++-----------
1 file changed, 47 insertions(+), 43 deletions(-)
(limited to 'OpenSim/Region/OptionalModules')
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
index 4095674..a5e553c 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchVoiceModule.cs
@@ -37,6 +37,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using OpenMetaverse;
+using OpenMetaverse.StructuredData;
using log4net;
using Nini.Config;
using Nwc.XmlRpc;
@@ -50,6 +51,9 @@ using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using Caps = OpenSim.Framework.Capabilities.Caps;
using System.Text.RegularExpressions;
+using OpenSim.Server.Base;
+using OpenSim.Services.Interfaces;
+using OSDMap = OpenMetaverse.StructuredData.OSDMap;
namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
{
@@ -58,8 +62,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- private bool UseProxy = false;
-
// Capability string prefixes
private static readonly string m_parcelVoiceInfoRequestPath = "0007/";
private static readonly string m_provisionVoiceAccountRequestPath = "0008/";
@@ -70,8 +72,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
// FreeSwitch server is going to contact us and ask us all
// sorts of things.
- private static string m_freeSwitchServerUser;
- private static string m_freeSwitchServerPass;
// SLVoice client will do a GET on this prefix
private static string m_freeSwitchAPIPrefix;
@@ -85,73 +85,69 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
private static string m_freeSwitchRealm;
private static string m_freeSwitchSIPProxy;
private static bool m_freeSwitchAttemptUseSTUN;
- // private static string m_freeSwitchSTUNServer;
private static string m_freeSwitchEchoServer;
private static int m_freeSwitchEchoPort;
private static string m_freeSwitchDefaultWellKnownIP;
private static int m_freeSwitchDefaultTimeout;
- // private static int m_freeSwitchSubscribeRetry;
private static string m_freeSwitchUrlResetPassword;
- // private static IPEndPoint m_FreeSwitchServiceIP;
- private int m_freeSwitchServicePort;
+ private uint m_freeSwitchServicePort;
private string m_openSimWellKnownHTTPAddress;
private string m_freeSwitchContext;
private readonly Dictionary m_UUIDName = new Dictionary();
private Dictionary m_ParcelAddress = new Dictionary();
- private Scene m_scene;
+ private Scene m_Scene;
+ private IConfig m_Config;
- private IConfig m_config;
+ private IFreeswitchService m_FreeswitchService;
public void Initialise(IConfigSource config)
{
- m_config = config.Configs["FreeSwitchVoice"];
+ m_Config = config.Configs["FreeSwitchVoice"];
- if (null == m_config)
+ if (m_Config == null)
{
m_log.Info("[FreeSwitchVoice] no config found, plugin disabled");
return;
}
- if (!m_config.GetBoolean("enabled", false))
+ if (!m_Config.GetBoolean("Enabled", false))
{
m_log.Info("[FreeSwitchVoice] plugin disabled by configuration");
return;
}
- m_Enabled = true;
-
try
{
- m_freeSwitchServerUser = m_config.GetString("freeswitch_server_user", String.Empty);
- m_freeSwitchServerPass = m_config.GetString("freeswitch_server_pass", String.Empty);
- m_freeSwitchAPIPrefix = m_config.GetString("freeswitch_api_prefix", String.Empty);
-
- // 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)
-
- string serviceIP = m_config.GetString("freeswitch_service_server", String.Empty);
- int servicePort = m_config.GetInt("freeswitch_service_port", 80);
- IPAddress serviceIPAddress = IPAddress.Parse(serviceIP);
- // m_FreeSwitchServiceIP = new IPEndPoint(serviceIPAddress, servicePort);
- m_freeSwitchServicePort = servicePort;
- m_freeSwitchRealm = m_config.GetString("freeswitch_realm", String.Empty);
- m_freeSwitchSIPProxy = m_config.GetString("freeswitch_sip_proxy", m_freeSwitchRealm);
- m_freeSwitchAttemptUseSTUN = m_config.GetBoolean("freeswitch_attempt_stun", true);
- // m_freeSwitchSTUNServer = m_config.GetString("freeswitch_stun_server", m_freeSwitchRealm);
- m_freeSwitchEchoServer = m_config.GetString("freeswitch_echo_server", m_freeSwitchRealm);
- m_freeSwitchEchoPort = m_config.GetInt("freeswitch_echo_port", 50505);
- m_freeSwitchDefaultWellKnownIP = m_config.GetString("freeswitch_well_known_ip", m_freeSwitchRealm);
- m_openSimWellKnownHTTPAddress = m_config.GetString("opensim_well_known_http_address", serviceIPAddress.ToString());
- m_freeSwitchDefaultTimeout = m_config.GetInt("freeswitch_default_timeout", 5000);
- // m_freeSwitchSubscribeRetry = m_config.GetInt("freeswitch_subscribe_retry", 120);
- m_freeSwitchUrlResetPassword = m_config.GetString("freeswitch_password_reset_url", String.Empty);
- m_freeSwitchContext = m_config.GetString("freeswitch_context", "default");
-
- if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
- String.IsNullOrEmpty(m_freeSwitchServerPass) ||
- String.IsNullOrEmpty(m_freeSwitchRealm) ||
+ string serviceDll = m_Config.GetString("LocalServiceModule",
+ String.Empty);
+
+ if (serviceDll == String.Empty)
+ {
+ m_log.Error("[FreeSwitchVoice]: No LocalServiceModule named in section FreeSwitchVoice");
+ return;
+ }
+
+ Object[] args = new Object[] { config };
+ m_FreeswitchService = ServerUtils.LoadPlugin(serviceDll, args);
+
+ string jsonConfig = m_FreeswitchService.GetJsonConfig();
+ OSDMap map = (OSDMap)OSDParser.DeserializeJson(jsonConfig);
+
+ m_freeSwitchAPIPrefix = map["APIPrefix"].AsString();
+ m_freeSwitchRealm = map["Realm"].AsString();
+ m_freeSwitchSIPProxy = map["SIPProxy"].AsString();
+ m_freeSwitchAttemptUseSTUN = map["AttemptUseSTUN"].AsBoolean();
+ m_freeSwitchEchoServer = map["EchoServer"].AsString();
+ m_freeSwitchEchoPort = map["EchoPort"].AsInteger();
+ m_freeSwitchDefaultWellKnownIP = map["DefaultWellKnownIP"].AsString();
+ m_freeSwitchDefaultTimeout = map["DefaultTimeout"].AsInteger();
+ m_freeSwitchUrlResetPassword = String.Empty;
+ m_freeSwitchContext = map["Context"].AsString();
+
+ if (String.IsNullOrEmpty(m_freeSwitchRealm) ||
String.IsNullOrEmpty(m_freeSwitchAPIPrefix))
{
m_log.Error("[FreeSwitchVoice] plugin mis-configured");
@@ -211,6 +207,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
}
catch (Exception)
{
+ // COmmented multiline spam log message
//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.");
}
}
@@ -218,7 +215,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
public void AddRegion(Scene scene)
{
- m_scene = scene;
+ m_Scene = scene;
+
+ // We generate these like this: The region's external host name
+ // as defined in Regions.ini is a good address to use. It's a
+ // dotted quad (or should be!) and it can reach this host from
+ // a client. The port is grabbed from the region's HTTP server.
+ m_openSimWellKnownHTTPAddress = m_Scene.RegionInfo.ExternalHostName;
+ m_freeSwitchServicePort = MainServer.Instance.Port;
if (m_Enabled)
{
--
cgit v1.1