diff options
Diffstat (limited to 'misc/freeswitch/scripts/configuration/freeswitch_xml.lua')
-rw-r--r-- | misc/freeswitch/scripts/configuration/freeswitch_xml.lua | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/misc/freeswitch/scripts/configuration/freeswitch_xml.lua b/misc/freeswitch/scripts/configuration/freeswitch_xml.lua new file mode 100644 index 0000000..c81bf50 --- /dev/null +++ b/misc/freeswitch/scripts/configuration/freeswitch_xml.lua @@ -0,0 +1,307 @@ +-- ConfigurationModule: FreeSwitchXml +-- +module(...,package.seeall) + +FreeSwitchXml = {} + +-- Create FreeSwitchXml object +function FreeSwitchXml.new(self, object) + object = object or {} + setmetatable(object, self) + self.__index = self + return object +end + +function FreeSwitchXml.param(self, name, value) + return '<param name="' .. name .. '" value="' .. value .. '"/>' +end + +function FreeSwitchXml.variable(self, name, value) + return '<variable name="' .. name .. '" value="' .. value .. '"/>' +end + +function FreeSwitchXml.document(self, sections_xml) + if type(sections_xml) == "string" then + sections_xml = { sections_xml } + elseif type(sections_xml) == "nil" then + sections_xml = { "" } + end + + local xml_string= +[[<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="freeswitch/xml"> +]] .. table.concat(sections_xml, "\n") .. [[ + +</document>]] + + return xml_string +end + +function FreeSwitchXml.directory(self, entries_xml, domain) + if type(entries_xml) == "string" then + entries_xml = { entries_xml } + elseif type(entries_xml) == "nil" then + entries_xml = { "" } + end + + local xml_string = +[[ +<section name="directory"> +<domain name="]] .. domain .. [["> +<params> +<param name="dial-string" value="${sofia_contact(${dialed_user}@${dialed_domain})}"/> +</params> +]] .. table.concat(entries_xml, "\n") .. [[ + +</domain> +</section>]] + return xml_string +end + +function FreeSwitchXml.group_default(self, entries_xml) + if type(entries_xml) == "string" then + entries_xml = { entries_xml } + elseif type(entries_xml) == "nil" then + entries_xml = { "" } + end + + local xml_string = +[[ +<groups> +<group name="default"> +<users> +]] .. table.concat(entries_xml, "\n") .. [[ + +</users> +</group> +</groups>]] + return xml_string +end + +function FreeSwitchXml.user(self, user) + require 'common.configuration_file' + local params = common.configuration_file.get('/opt/freeswitch/scripts/ini/sip_accounts.ini', 'parameters'); + + params['password'] = user.password; + params['vm-password'] = user.voicemail_pin; + + local variables = { + user_context = "default", + gs_from_gateway = "false", + gs_account_id = user.id, + gs_account_uuid = user.uuid, + gs_account_type = "SipAccount", + gs_account_state = user.state, + gs_account_caller_name = user.caller_name, + gs_account_owner_type = user.sip_accountable_type, + gs_account_owner_id = user.sip_accountable_id + } + + local params_xml = {} + for name, value in pairs(params) do + params_xml[#params_xml+1] = self:param(name, value) + end + + local variables_xml = {} + for name, value in pairs(variables) do + variables_xml[#variables_xml+1] = self:variable(name, value) + end + + local xml_string = +[[ +<user id="]] .. user.auth_name .. [["> +<params> +]] .. table.concat(params_xml, "\n") .. [[ + +</params> +<variables> +]] .. table.concat(variables_xml, "\n") .. [[ + +</variables> +</user>]] + return xml_string +end + +function FreeSwitchXml.gateway_user(self, user, gateway_name, auth_name) + user.id = user.id or 0 + + local params = { + ['password'] = user.password, + } + + local variables = { + user_context = "default", + gs_from_gateway = "true", + gs_gateway_name = gateway_name, + gs_gateway_id = user.id + } + + local params_xml = {} + for name, value in pairs(params) do + params_xml[#params_xml+1] = self:param(name, value) + end + + local variables_xml = {} + for name, value in pairs(variables) do + variables_xml[#variables_xml+1] = self:variable(name, value) + end + + local xml_string = +[[ +<user id="]] .. auth_name .. [["> +<params> +]] .. table.concat(params_xml, "\n") .. [[ + +</params> +<variables> +]] .. table.concat(variables_xml, "\n") .. [[ + +</variables> +</user>]] + return xml_string +end + +function FreeSwitchXml.sofia(self, parameters, profiles_xml) + if type(profiles_xml) == "string" then + profiles_xml = { profiles_xml } + elseif type(profiles_xml) == "nil" then + profiles_xml = { "" } + end + + local params_xml = {} + for name, value in pairs(parameters) do + params_xml[#params_xml+1] = self:param(name, value) + end + + local xml_string = +[[ +<section name="configuration" description="FreeSwitch configuration for Sofia Profile"> +<configuration name="sofia.conf" description="Sofia SIP Configuration"> +<global_settings> +]] .. table.concat(params_xml, "\n") .. [[ + +</global_settings> +<profiles> +]] .. table.concat(profiles_xml, "\n") .. [[ + +</profiles> +</configuration> +</section>]] + return xml_string +end + +function FreeSwitchXml.sofia_profile(self, profile_name, parameters, gateways_xml) + params_xml = {} + for name, value in pairs(parameters) do + params_xml[#params_xml+1] = self:param(name, value) + end + + if type(gateways_xml) == "string" then + gateways_xml = { gateways_xml } + elseif type(gateways_xml) == "nil" then + gateways_xml = { "" } + end + + local xml_string = +[[ +<profile name="]] .. profile_name .. [["> +<aliases> +</aliases> +<gateways> +]] .. table.concat(gateways_xml, "\n") .. [[ + +</gateways> +<domains> +<domain name="all" alias="true" parse="false"/> +</domains> +<settings> +]] .. table.concat(params_xml, "\n") .. [[ + +</settings> +</profile>]] + return xml_string +end + +function FreeSwitchXml.gateway(self, gateway_name, parameters) + local params_xml = {} + if parameters then + for name, value in pairs(parameters) do + params_xml[#params_xml+1] = self:param(name, value) + end + end + + local xml_string = +[[ +<gateway name="]] .. gateway_name .. [["> +]] .. table.concat(params_xml, "\n") .. [[ + +</gateway>]] + return xml_string +end + +function FreeSwitchXml.conference(self, profiles_xml) + if type(profiles_xml) == "string" then + profiles_xml = { profiles_xml } + elseif type(profiles_xml) == "nil" then + profiles_xml = { "" } + end + + local xml_string = +[[ +<section name="configuration" description="FreeSwitch configuration for Sofia Profile"> +<configuration name="conference.conf" description="Conference configuration"> +<advertise> +</advertise> +<caller-controls> +<group name="speaker"> +<control action="mute"/> +<control action="deaf mute" digits="*"/> +<control action="energy up" digits="9"/> +<control action="energy equ" digits="8"/> +<control action="energy dn" digits="7"/> +<control action="vol talk up" digits="3"/> +<control action="vol talk zero" digits="2"/> +<control action="vol talk dn" digits="1"/> +<control action="vol listen up" digits="6"/> +<control action="vol listen zero" digits="5"/> +<control action="vol listen dn" digits="4"/> +<control action="hangup" digits="#"/> +</group> +<group name="moderator"> +<control action="mute" digits="0"/> +<control action="deaf mute" digits="*"/> +<control action="energy up" digits="9"/> +<control action="energy equ" digits="8"/> +<control action="energy dn" digits="7"/> +<control action="vol talk up" digits="3"/> +<control action="vol talk zero" digits="2"/> +<control action="vol talk dn" digits="1"/> +<control action="vol listen up" digits="6"/> +<control action="vol listen zero" digits="5"/> +<control action="vol listen dn" digits="4"/> +<control action="hangup" digits="#"/> +</group> +</caller-controls> +<profiles> +]] .. table.concat(profiles_xml, "\n") .. [[ + +</profiles> +</configuration> +</section>]] + return xml_string +end + +function FreeSwitchXml.conference_profile(self, profile_name, parameters) + params_xml = {} + for name, value in pairs(parameters) do + params_xml[#params_xml+1] = self:param(name, value) + end + + local xml_string = +[[ +<profile name="]] .. profile_name .. [["> +]] .. table.concat(params_xml, "\n") .. [[ + +</profile>]] + return xml_string +end |