summaryrefslogtreecommitdiff
path: root/misc/freeswitch/scripts/configuration/freeswitch_xml.lua
diff options
context:
space:
mode:
Diffstat (limited to 'misc/freeswitch/scripts/configuration/freeswitch_xml.lua')
-rw-r--r--misc/freeswitch/scripts/configuration/freeswitch_xml.lua307
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