summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/templates/linksysata-template.lua94
1 files changed, 81 insertions, 13 deletions
diff --git a/config/templates/linksysata-template.lua b/config/templates/linksysata-template.lua
index d7511bf..8387823 100644
--- a/config/templates/linksysata-template.lua
+++ b/config/templates/linksysata-template.lua
@@ -47,18 +47,82 @@ local function xml_elem(elem,value,permissions,i)
output[#output+1] = value
end
output[#output+1] = "</"..e..">"
- io.write(table.concat(output))
+ io.write(table.concat(output).."\n")
end
%>
+<?xml version="1.0" encoding="utf-8"?>
<flat-profile>
-<Admin_Passwd ua="na"><%= values.device.adminpassword %></Admin_Passwd>
-<User_Password ua="na"><%= values.device.adminpassword %></User_Password>
-<HostName ua="na"><%= values.reg1.extension %></HostName>
-<Primary_NTP_Server ua="na"><%= values.device.sntpserver %></Primary_NTP_Server>
+<%
+xml_elem("Admin_Passwd", values.device.adminpassword, "na")
+xml_elem("User_Password", values.device.adminpassword, "na")
+xml_elem("HostName", values.reg1.extension, "na")
+xml_elem("Primary_NTP_Server", values.device.sntpserver, "na")
+xml_elem("CW_Setting", (values.services and values.services.callwaitingenable), "na")
+
+-- 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' '<GMT+5>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 Linksys (E of GMT is '+')
+ if tonumber(tz.offset.hour) == 0 then
+ xml_elem("Time_Zone", "GMT", "na")
+ else
+ if tz.offset.sign == "-" then
+ tz.offset.sign = "+"
+ else
+ tz.offset.sign = "-"
+ end
+ xml_elem("Time_Zone", "GMT"..tz.offset.sign..string.format("%02i", tonumber(tz.offset.hour or 0))..":00", "na")
+ end
+
+ local function dstrule(t)
+ local date, time
+
+ if t.day then
+ date = t.month.."/"..t.day.."/0"
+ else
+ -- POSIX weekday is between 0 (Sun) and 6 (Sat)
+ -- Linksys weekday is between 1=Mon, 7=Sun
+ if tonumber(t.weekday) == 0 then
+ t.weekday = 7
+ end
+ -- POSIX week is between 1 and 5, where 1st,2nd..4th, and 5=last
+ -- Linksys is by day
+ if tonumber(t.week) == 5 then
+ t.week = -1
+ else
+ t.week = (t.week * 7)-6
+ end
+ date = t.month.."/"..t.week.."/"..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
-<% for pg, pg_t in pairs(values) do
+ return date.."/"..time
+ end
+
+ if tz.dst then
+ xml_elem("Daylight_Saving_Time_Enable", "Yes", "na")
+ xml_elem("Daylight_Saving_Time_Rule", "start="..dstrule(tz.dst.start)..";end="..dstrule(tz.dst.stop)..";save=1", "na")
+ else
+ xml_elem("Daylight_Saving_Time_Enable", "No", "na")
+ end
+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
@@ -76,18 +140,22 @@ end
xml_elem("User_ID", pg_t.extension, "na", num)
xml_elem("Password", pg_t.password, "na", num)
- local forwarding = { {param="forwardall", xml="Cfwd_All_Dest"},
- {param="forwardbusy", xml="Cfwd_Busy_Dest"},
- {param="forwardnoanswer", xml="Cfwd_No_Ans_Dest"} }
+ local forwarding = { {param="forwardall", xml="Cfwd_All_"},
+ {param="forwardbusy", xml="Cfwd_Busy_"},
+ {param="forwardnoanswer", xml="Cfwd_No_Ans_"} }
for i,f in ipairs(forwarding) do
- if value.services.forwarding and pg_t[f.param.."enable"] then
- xml_elem(f.xml, pg_t[f.param], "na", num)
+ if values.services.forwarding and pg_t[f.param.."enable"] then
+ xml_elem(f.xml.."Serv", "Yes", "na", num)
+ xml_elem(f.xml.."Dest", pg_t[f.param], "na", num)
else
- xml_elem(f.xml, "", "na", num)
+ xml_elem(f.xml.."Serv", "No", "na", num)
+ xml_elem(f.xml.."Dest", "", "na", num)
end
end
else
- xml_elem("Line_Enable", "No", "na", num)
+ -- Cannot disable the lines, or check-sync will not work, just set User ID to ""
+ xml_elem("Line_Enable", "Yes", "na", num)
+ xml_elem("User_ID", "", "na", num)
-- xml_elem("Cfwd_No_Ans_Delay", "0", "na", num)
end
end