* Patch from otakup0pe to help freeswitch play nice with complex existing freeswitch configurations.
* Thanks! fixes mantis #3899trunk
							parent
							
								
									05c24a648d
								
							
						
					
					
						commit
						eb1a6e9b87
					
				| 
						 | 
				
			
			@ -98,6 +98,7 @@ what it is today.
 | 
			
		|||
* nornalbion
 | 
			
		||||
* Omar Vera Ustariz (IBM)
 | 
			
		||||
* openlifegrid.com
 | 
			
		||||
* otakup0pe
 | 
			
		||||
* ralphos
 | 
			
		||||
* RemedyTomm
 | 
			
		||||
* Richard Alimi (IBM)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,18 +26,20 @@
 | 
			
		|||
 */
 | 
			
		||||
 
 | 
			
		||||
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);
 | 
			
		||||
        private static readonly ILog m_log = 
 | 
			
		||||
			LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
            
 | 
			
		||||
         
 | 
			
		||||
        public Hashtable HandleDialplanRequest(Hashtable request)
 | 
			
		||||
        public Hashtable HandleDialplanRequest(string Context, string Realm, Hashtable request)
 | 
			
		||||
        {
 | 
			
		||||
             m_log.DebugFormat("[FreeSwitchVoice] HandleDialplanRequest called with {0}",request.ToString());
 | 
			
		||||
             
 | 
			
		||||
| 
						 | 
				
			
			@ -47,48 +49,55 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
             {
 | 
			
		||||
                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;
 | 
			
		||||
             response["str_response_string"] = @"<?xml version=""1.0"" encoding=""utf-8""?>
 | 
			
		||||
                <document type=""freeswitch/xml"">
 | 
			
		||||
                  <section name=""dialplan"">
 | 
			
		||||
                  <context name=""default"">
 | 
			
		||||
                
 | 
			
		||||
                        <!-- dial via SIP uri -->
 | 
			
		||||
                        <extension name=""sip_uri"">
 | 
			
		||||
                                <condition field=""destination_number"" expression=""^sip:(.*)$"">
 | 
			
		||||
                                <action application=""bridge"" data=""sofia/${use_profile}/$1""/>
 | 
			
		||||
                                <!--<action application=""bridge"" data=""$1""/>-->
 | 
			
		||||
                                </condition>
 | 
			
		||||
                        </extension>
 | 
			
		||||
                
 | 
			
		||||
                        <extension name=""opensim_conferences"">
 | 
			
		||||
                                <condition field=""destination_number"" expression=""^confctl-(.*)$"">
 | 
			
		||||
                                        <action application=""answer""/>
 | 
			
		||||
                                        <action application=""conference"" data=""$1-${domain_name}@default""/>
 | 
			
		||||
                                </condition>
 | 
			
		||||
                        </extension>
 | 
			
		||||
                        
 | 
			
		||||
                        <extension name=""opensim_conf"">
 | 
			
		||||
                                <condition field=""destination_number"" expression=""^conf-(.*)$"">
 | 
			
		||||
                                        <action application=""answer""/>
 | 
			
		||||
                                        <action application=""conference"" data=""$1-${domain_name}@default""/>
 | 
			
		||||
                                </condition>
 | 
			
		||||
                        </extension>
 | 
			
		||||
                
 | 
			
		||||
                        <extension name=""avatar"">
 | 
			
		||||
                                <condition field=""destination_number"" expression=""^(x.*)$"">
 | 
			
		||||
                                        <action application=""bridge"" data=""user/$1""/>
 | 
			
		||||
                                </condition>
 | 
			
		||||
                        </extension>
 | 
			
		||||
                
 | 
			
		||||
                  </context>
 | 
			
		||||
                </section>
 | 
			
		||||
                </document>";
 | 
			
		||||
			if ( 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(@"<?xml version=""1.0"" encoding=""utf-8""?>
 | 
			
		||||
	               <document type=""freeswitch/xml"">
 | 
			
		||||
	                 <section name=""dialplan"">
 | 
			
		||||
	                 <context name=""{0}"">" + 
 | 
			
		||||
               
 | 
			
		||||
/*	                       <!-- dial via SIP uri -->
 | 
			
		||||
	                        <extension name=""sip_uri"">
 | 
			
		||||
	                               <condition field=""destination_number"" expression=""^sip:(.*)$"">
 | 
			
		||||
	                               <action application=""bridge"" data=""sofia/${use_profile}/$1""/>
 | 
			
		||||
	                               <!--<action application=""bridge"" data=""$1""/>-->
 | 
			
		||||
	                               </condition>
 | 
			
		||||
	                       </extension>*/
 | 
			
		||||
               
 | 
			
		||||
	                       @"<extension name=""opensim_conferences"">
 | 
			
		||||
	                               <condition field=""destination_number"" expression=""^confctl-(.*)$"">
 | 
			
		||||
	                                       <action application=""answer""/>
 | 
			
		||||
	                                       <action application=""conference"" data=""$1-{1}@grid""/>
 | 
			
		||||
	                               </condition>
 | 
			
		||||
	                       </extension>
 | 
			
		||||
                       
 | 
			
		||||
	                       <extension name=""opensim_conf"">
 | 
			
		||||
	                               <condition field=""destination_number"" expression=""^conf-(.*)$"">
 | 
			
		||||
	                                       <action application=""answer""/>
 | 
			
		||||
	                                       <action application=""conference"" data=""$1-${domain_name}@default""/>
 | 
			
		||||
	                               </condition>
 | 
			
		||||
	                       </extension>
 | 
			
		||||
               
 | 
			
		||||
	                       <extension name=""avatar"">
 | 
			
		||||
	                               <condition field=""destination_number"" expression=""^(x.*)$"">
 | 
			
		||||
	                                       <action application=""bridge"" data=""user/$1""/>
 | 
			
		||||
	                               </condition>
 | 
			
		||||
	                       </extension>
 | 
			
		||||
               
 | 
			
		||||
	                 </context>
 | 
			
		||||
	               </section>
 | 
			
		||||
	               </document>", Context, Realm);
 | 
			
		||||
			}
 | 
			
		||||
             
 | 
			
		||||
             return response;   
 | 
			
		||||
			return response;   
 | 
			
		||||
        }    
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,103 +38,111 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
        private static readonly ILog m_log =
 | 
			
		||||
            LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
            
 | 
			
		||||
        public Hashtable HandleDirectoryRequest(Hashtable request)
 | 
			
		||||
        public Hashtable HandleDirectoryRequest(string Context, string Realm, Hashtable request)
 | 
			
		||||
        {
 | 
			
		||||
             m_log.DebugFormat("[FreeSwitchDirectory] HandleDirectoryRequest called with {0}",request.ToString());
 | 
			
		||||
			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());
 | 
			
		||||
             
 | 
			
		||||
             Hashtable response = new Hashtable();
 | 
			
		||||
             
 | 
			
		||||
             // information in the request we might be interested in
 | 
			
		||||
	             // information in the request we might be interested in
 | 
			
		||||
             
 | 
			
		||||
             // Request 1 sip_auth for users account
 | 
			
		||||
	             // 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
 | 
			
		||||
	             //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);
 | 
			
		||||
             }
 | 
			
		||||
	             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";
 | 
			
		||||
             }
 | 
			
		||||
	             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.Length == 0)
 | 
			
		||||
	             {
 | 
			
		||||
	                 eventCallingFunction = "sofia_reg_parse_auth";
 | 
			
		||||
	             }
 | 
			
		||||
             
 | 
			
		||||
             if (eventCallingFunction == "sofia_reg_parse_auth")
 | 
			
		||||
             {
 | 
			
		||||
                 string sipAuthMethod = (string)request["sip_auth_method"];
 | 
			
		||||
	             if (eventCallingFunction == "sofia_reg_parse_auth")
 | 
			
		||||
	             {
 | 
			
		||||
	                 string sipAuthMethod = (string)request["sip_auth_method"];
 | 
			
		||||
                 
 | 
			
		||||
                 if (sipAuthMethod == "REGISTER")
 | 
			
		||||
                 {
 | 
			
		||||
                     response = HandleRegister(request);
 | 
			
		||||
                 } 
 | 
			
		||||
                 else if (sipAuthMethod == "INVITE")  
 | 
			
		||||
                 {
 | 
			
		||||
                     response = HandleInvite(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(request);
 | 
			
		||||
             }
 | 
			
		||||
             else if (eventCallingFunction == "user_data_function") // gets called when an avatar to avatar call is made
 | 
			
		||||
             {
 | 
			
		||||
                 response = HandleLocateUser(request);
 | 
			
		||||
             }
 | 
			
		||||
             else if (eventCallingFunction == "user_outgoing_channel")
 | 
			
		||||
             {
 | 
			
		||||
                 response = HandleRegister(request);
 | 
			
		||||
             }
 | 
			
		||||
             else if (eventCallingFunction == "config_sofia") // happens once on freeswitch startup
 | 
			
		||||
             {
 | 
			
		||||
                 response = HandleConfigSofia(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;   
 | 
			
		||||
	                 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(Hashtable request)
 | 
			
		||||
         private Hashtable HandleRegister(string Context, string Realm, Hashtable request)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.Info("[FreeSwitchDirectory] HandleRegister called");
 | 
			
		||||
            
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +155,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
            response["content_type"] = "text/xml";
 | 
			
		||||
            response["keepalive"] = false;
 | 
			
		||||
            response["int_response_code"] = 200;
 | 
			
		||||
            response["str_response_string"] = String.Format(
 | 
			
		||||
 | 
			
		||||
           	response["str_response_string"] = String.Format(
 | 
			
		||||
                "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
 | 
			
		||||
                "<document type=\"freeswitch/xml\">\r\n" +
 | 
			
		||||
                    "<section name=\"directory\" description=\"User Directory\">\r\n" +
 | 
			
		||||
| 
						 | 
				
			
			@ -158,19 +167,19 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
                                    "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${{dialed_user}}@${{dialed_domain}}}}${{sofia_contact(${{dialed_user}}@${{dialed_domain}})}}\"/>\r\n" +
 | 
			
		||||
                                "</params>\r\n" +
 | 
			
		||||
                                "<variables>\r\n" +
 | 
			
		||||
                                    "<variable name=\"user_context\" value=\"default\" />\r\n" +
 | 
			
		||||
                                    "<variable name=\"user_context\" value=\"{3}\" />\r\n" +
 | 
			
		||||
                                    "<variable name=\"presence_id\" value=\"{1}@{0}\"/>"+
 | 
			
		||||
                                "</variables>\r\n" +
 | 
			
		||||
                            "</user>\r\n" +
 | 
			
		||||
                        "</domain>\r\n" +
 | 
			
		||||
                    "</section>\r\n" +
 | 
			
		||||
                "</document>\r\n",
 | 
			
		||||
                domain , user, password);
 | 
			
		||||
                domain , user, password, Context);
 | 
			
		||||
                
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        private Hashtable HandleInvite(Hashtable request)
 | 
			
		||||
        private Hashtable HandleInvite(string Context, string Realm, Hashtable request)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.Info("[FreeSwitchDirectory] HandleInvite called");
 | 
			
		||||
            
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +204,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
                                    "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${1}@${{dialed_domain}}}}${{sofia_contact(${1}@${{dialed_domain}})}}\"/>\r\n" +
 | 
			
		||||
                                "</params>\r\n" +
 | 
			
		||||
                                "<variables>\r\n" +
 | 
			
		||||
                                    "<variable name=\"user_context\" value=\"default\" />\r\n" +
 | 
			
		||||
                                    "<variable name=\"user_context\" value=\"{4}\" />\r\n" +
 | 
			
		||||
                                    "<variable name=\"presence_id\" value=\"{1}@$${{domain}}\"/>"+
 | 
			
		||||
                                "</variables>\r\n" +
 | 
			
		||||
                            "</user>\r\n" +
 | 
			
		||||
| 
						 | 
				
			
			@ -205,20 +214,20 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
                                    "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${3}@${{dialed_domain}}}}${{sofia_contact(${3}@${{dialed_domain}})}}\"/>\r\n" +
 | 
			
		||||
                                "</params>\r\n" +
 | 
			
		||||
                                "<variables>\r\n" +
 | 
			
		||||
                                    "<variable name=\"user_context\" value=\"default\" />\r\n" +
 | 
			
		||||
                                    "<variable name=\"user_context\" value=\"{4}\" />\r\n" +
 | 
			
		||||
                                    "<variable name=\"presence_id\" value=\"{3}@$${{domain}}\"/>"+
 | 
			
		||||
                                "</variables>\r\n" +
 | 
			
		||||
                            "</user>\r\n" +
 | 
			
		||||
                        "</domain>\r\n" +
 | 
			
		||||
                    "</section>\r\n" +
 | 
			
		||||
                "</document>\r\n",
 | 
			
		||||
                domain , user, password,sipRequestUser);
 | 
			
		||||
                domain , user, password,sipRequestUser, Context);
 | 
			
		||||
                
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        private Hashtable HandleLocateUser(Hashtable request)
 | 
			
		||||
        private Hashtable HandleLocateUser(String Realm, Hashtable request)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.Info("[FreeSwitchDirectory] HandleLocateUser called");
 | 
			
		||||
            
 | 
			
		||||
| 
						 | 
				
			
			@ -252,7 +261,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
       
 | 
			
		||||
        private Hashtable HandleConfigSofia(Hashtable request)
 | 
			
		||||
        private Hashtable HandleConfigSofia(string Context, string Realm, Hashtable request)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.Info("[FreeSwitchDirectory] HandleConfigSofia called");
 | 
			
		||||
            
 | 
			
		||||
| 
						 | 
				
			
			@ -285,7 +294,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
                                            "<param name=\"retry-seconds\" value=\"30\"/>\r\n"+
 | 
			
		||||
                                            "<param name=\"extension\" value=\"$${{default_provider_contact}}\"/>\r\n"+
 | 
			
		||||
                                            "<param name=\"contact-params\" value=\"domain_name=$${{domain}}\"/>\r\n"+
 | 
			
		||||
                                            "<param name=\"context\" value=\"public\"/>\r\n"+
 | 
			
		||||
                                            "<param name=\"context\" value=\"{1}\"/>\r\n"+
 | 
			
		||||
                                          "</gateway>\r\n"+
 | 
			
		||||
                                        "</gateways>\r\n"+
 | 
			
		||||
                                        "<params>\r\n"+
 | 
			
		||||
| 
						 | 
				
			
			@ -300,7 +309,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
                        "</domain>\r\n" +
 | 
			
		||||
                    "</section>\r\n" +
 | 
			
		||||
                "</document>\r\n", 
 | 
			
		||||
                domain); 
 | 
			
		||||
                domain, Context); 
 | 
			
		||||
             
 | 
			
		||||
            return response;    
 | 
			
		||||
        }    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,6 +95,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
        // private static IPEndPoint m_FreeSwitchServiceIP;
 | 
			
		||||
        private int m_freeSwitchServicePort;
 | 
			
		||||
        private string m_openSimWellKnownHTTPAddress;
 | 
			
		||||
		private string m_freeSwitchContext;
 | 
			
		||||
 | 
			
		||||
        private FreeSwitchDirectory m_FreeSwitchDirectory;
 | 
			
		||||
        private FreeSwitchDialplan m_FreeSwitchDialplan;
 | 
			
		||||
| 
						 | 
				
			
			@ -151,6 +152,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
                    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", "public");
 | 
			
		||||
                    
 | 
			
		||||
                    if (String.IsNullOrEmpty(m_freeSwitchServerUser) ||
 | 
			
		||||
                        String.IsNullOrEmpty(m_freeSwitchServerPass) ||
 | 
			
		||||
| 
						 | 
				
			
			@ -572,7 +574,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
                    "<App.NoBottomLogo>false</App.NoBottomLogo>\r\n"+
 | 
			
		||||
                "</VCConfiguration>",
 | 
			
		||||
                m_freeSwitchRealm, m_freeSwitchSIPProxy, m_freeSwitchAttemptUseSTUN,
 | 
			
		||||
                m_freeSwitchSTUNServer, m_freeSwitchEchoServer, m_freeSwitchEchoPort,
 | 
			
		||||
                m_freeSwitchEchoServer, m_freeSwitchEchoPort,
 | 
			
		||||
                m_freeSwitchDefaultWellKnownIP, m_freeSwitchDefaultTimeout, 
 | 
			
		||||
                m_freeSwitchUrlResetPassword, "");
 | 
			
		||||
            
 | 
			
		||||
| 
						 | 
				
			
			@ -728,9 +730,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
 | 
			
		|||
            string section = (string) requestBody["section"];
 | 
			
		||||
 | 
			
		||||
            if (section == "directory")
 | 
			
		||||
                response = m_FreeSwitchDirectory.HandleDirectoryRequest(requestBody);
 | 
			
		||||
                response = m_FreeSwitchDirectory.HandleDirectoryRequest(m_freeSwitchContext, m_freeSwitchRealm, requestBody);
 | 
			
		||||
            else if (section == "dialplan")
 | 
			
		||||
                response = m_FreeSwitchDialplan.HandleDialplanRequest(requestBody);
 | 
			
		||||
                response = m_FreeSwitchDialplan.HandleDialplanRequest(m_freeSwitchContext, m_freeSwitchRealm, requestBody);
 | 
			
		||||
            else
 | 
			
		||||
                m_log.WarnFormat("[FreeSwitchVoice]: section was {0}", section);
 | 
			
		||||
            
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue