From b810c3882b85d886676caabc112c58b8d19f9172 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Thu, 10 Nov 2011 15:12:36 +0000 Subject: Work on snom template to implement more parameters Basic registration and timezones tested to work, other features untested --- config/templates/snom-template.lua | 177 +++++++++++++++++++++++++++++-------- 1 file changed, 138 insertions(+), 39 deletions(-) diff --git a/config/templates/snom-template.lua b/config/templates/snom-template.lua index cdf830c..a299054 100644 --- a/config/templates/snom-template.lua +++ b/config/templates/snom-template.lua @@ -1,6 +1,37 @@ <% local values = ... +--[[ -- Parameters +values["device"]["adminpassword"] = "" +-- Unimplemented -- values["device"]["digitmap"] = "" +-- Unimplemented -- values["device"]["digitmaptimeout"] = "" +values["device"]["forwardall"] = "" +values["device"]["forwardallenable"] = false +values["device"]["forwardbusy"] = "" +values["device"]["forwardbusyenable"] = false +values["device"]["forwardnoanswer"] = "" +values["device"]["forwardnoanswerenable"] = false +values["device"]["mac"] = "" +values["device"]["musiconhold"] = "" +values["device"]["pcportenable"] = true +values["device"]["registrar"] = "" +values["device"]["sntpserver"] = "" +values["device"]["template"] = "/etc/provisioning/templates/snom-template.lua" +values["device"]["timezone"] = "" +values["device"]["urldialingenable"] = false +values["regX"]["callerid"] = "" +values["regX"]["extension"] = "" +values["regX"]["password"] = "" +values["services"]["callhistoryenable"] = true +values["services"]["callwaitingenable"] = true +values["services"]["forwarding"] = true +values["services"]["hotlinedestination"] = "" +values["services"]["hotlineenable"] = false +values["services"]["mailbox"] = "" +-- Unimplemented -- values["services"]["mailcallback"] = "" +-- Unimplemented -- values["services"]["speeddialenable"] = true +--]] + local function onoff ( bool ) if bool then return "on" @@ -19,52 +50,120 @@ local function xml_elem(elem,value,permissions,i) output[#output+1] = value end output[#output+1] = "" - io.write(table.concat(output)) + io.write(table.concat(output).."\n") end %> - <% io.write(values.device.adminpassword) %> - <% xml_elem('eth_pc',values.device.pcportenable,'R') %> - <% io.write(values.device.adminpassword) %> - admin - <% io.write(values.device.sntpserver) %> - - - <% -for pg, pg_t in pairs(values) do +<% + xml_elem('admin_mode_password', values.device.adminpassword, 'R') + xml_elem('http_pass', values.device.adminpassword, 'R') + xml_elem('http_user', 'admin', 'R') + xml_elem('eth_pc', values.device.pcportenable, 'R') + xml_elem('ntp_server', values.device.sntpserver, 'R') + xml_elem('block_url_dialing', not values.device.urldialingenable, 'R') + xml_elem('call_waiting', values.services.callwaitingenable, 'R') + +if values.services.mailbox ~= "" then + xml_elem('user_mailbox', 'sip:'..values.services.mailbox, 'R') +else + xml_elem('user_mailbox', '', 'R') +end + +if values.services and values.services.forwarding then + -- SNOMs do not support per-line forwarding + xml_elem('redirect_allways', values.device.forwardallenable, 'RW') + xml_elem('redirect_number', values.device.forwardall, 'RW') + xml_elem('redirect_on_busy', values.device.forwardbusyenable, 'RW') + xml_elem('redirect_busy_number', values.device.forwardbusy, 'RW') + xml_elem('redirect_on_timeout', values.device.forwardnoanswerenable, 'RW') + xml_elem('redirect_time_number', values.device.forwardnoanswer, 'RW') +else + xml_elem('redirect_allways', false, 'RW') + xml_elem('redirect_on_busy', false, 'RW') + xml_elem('redirect_on_timeout', false, 'RW') +end + +if values.services and values.services.hotlineenable then + xml_elem('action_offhook_url', 'http://127.0.0.1/command.htm?number='..values.services.hotlinedestinaion, 'R') +else + xml_elem('action_offhook_url', '', 'R') +end + +-- Handle Time Zone parameter +-- See http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html +-- TZ variable, with no leading colon +-- Syntax: stdoffset[dst[offset][,start[/time],end[/time]]] +-- Examples: 'GMT0' 'EST5EDT,M3.2.0,M11.1.0' '5' +-- Parse time zone variable +require('posixtz') +local tz = posixtz.parse(values.device.timezone) +if tz then + -- convert POSIX sign (W of GMT is '+') to Snom (E of GMT is '+') + xml_elem('utc_offset', -1 * tz.offset.total, 'R') + + local function dstrule(t) + local date, time - -- Is it of the form regX ? - local num = string.match(pg, 'reg(%d+)') - if num then - if pg_t.extension ~= "" then - xml_elem('user_active', 'on', 'RW', num ) - xml_elem('record_dialed_calls', pg_t.callhistoryenable, 'R', num) - xml_elem('record_missed_calls', pg_t.callhistoryenable, 'R', num) - xml_elem('record_received_calls', pg_t.callhistoryenable, 'R', num) - -- SNOMs do not support per-line forwarding - xml_elem('redirect_allways',pg_t.forwardallenable,'RW') - xml_elem('redirect_number',pg_t.forwardall,'RW') - xml_elem('redirect_on_busy',pg_t.forwardbusyenable,'RW') - xml_elem('redirect_busy_number',pg_t.forwardbusy,'RW') - xml_elem('redirect_on_timeout',pg_t.forwardnoanswerenable,'RW') - xml_elem('redirect_time_number',pg_t.forwardnoanswer,'RW') - xml_elem('user_host', values.device.registrar, 'R', num ) - xml_elem('user_moh', 'sip:'..values.device.musiconhold, 'R', num) - xml_elem('user_name', pg_t.extension, 'R', num) - xml_elem('user_outbound', values.device.registrar, 'R', num) - xml_elem('user_pass', pg_t.password, 'R', num) - -- Caller ID string - if string.len(pg_t.callerid) == 0 then - xml_elem( 'user_realname', pg_t.extension,'R', num) - else - xml_elem( 'user_realname', pg_t.callerid,'R', num) - end - end - end + if t.day then + date = string.format('%02i', t.day)..'.'..string.format('%02i', t.month) + else + -- POSIX weekday is between 0 (Sun) and 6 (Sat) + -- Snom weekday is between 1=Mon, 7=Sun + if tonumber(t.weekday) == 0 then + t.weekday = 7 + end + date = string.format('%02i', t.month)..'.'..string.format('%02i', t.week)..'.'..string.format('%02i', t.weekday) + end + + + -- Handle explicit hour for DST change (posixtz only handles hour for now) + if t.hour then + time = string.format('%02i', t.hour)..':00:00' + else + time = '2:00:00' + end + + return date..' '..time + end + + if tz.dst then + xml_elem('dst', '3600 '..dstrule(tz.dst.start)..' '..dstrule(tz.dst.stop), 'R') + else + xml_elem('dst', '', 'R') + end +else + xml_elem('utc_offset', 0, 'R') + xml_elem('dst', '', 'R') end - %> + +for pg, pg_t in pairs(values) do + -- Is it of the form regX ? + local num = string.match(pg, 'reg(%d+)') + if num then + if pg_t.extension ~= "" then + xml_elem('user_active', 'on', 'R', num ) + xml_elem('record_dialed_calls', values.services.callhistoryenable, 'R', num) + xml_elem('record_missed_calls', values.services.callhistoryenable, 'R', num) + xml_elem('record_received_calls', values.services.callhistoryenable, 'R', num) + xml_elem('user_host', values.device.registrar, 'R', num ) + xml_elem('user_moh', 'sip:'..values.device.musiconhold, 'R', num) + xml_elem('user_name', pg_t.extension, 'R', num) + xml_elem('user_outbound', values.device.registrar, 'R', num) + xml_elem('user_pass', pg_t.password, 'R', num) + -- Caller ID string + if string.len(pg_t.callerid) == 0 then + xml_elem( 'user_realname', pg_t.extension,'R', num) + else + xml_elem( 'user_realname', pg_t.callerid,'R', num) + end + else + xml_elem('user_active', 'off', 'R', num ) + end + end +end +%> -- cgit v1.2.3