* libs/http: implement caching in http.protocol.date

This commit is contained in:
Jo-Philipp Wich 2008-06-26 20:25:02 +00:00
parent 378ef2da56
commit 96e11423b3

View file

@ -15,6 +15,10 @@ $Id$
module("luci.http.protocol.date", package.seeall)
local ucache = { }
local hcache = { }
MONTHS = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"
@ -151,40 +155,46 @@ end
-- Convert a HTTP date to unixtime
function to_unix(date)
local wd, day, mon, yr, hr, min, sec, tz = date:match(
"([A-Z][a-z][a-z]), ([0-9]+) " ..
"([A-Z][a-z][a-z]) ([0-9]+) " ..
"([0-9]+):([0-9]+):([0-9]+) " ..
"([A-Z0-9%+%-]+)"
)
if not ucache[date] then
local wd, day, mon, yr, hr, min, sec, tz = date:match(
"([A-Z][a-z][a-z]), ([0-9]+) " ..
"([A-Z][a-z][a-z]) ([0-9]+) " ..
"([0-9]+):([0-9]+):([0-9]+) " ..
"([A-Z0-9%+%-]+)"
)
if day and mon and yr and hr and min and sec then
-- find month
local month = 1
for i = 1, 12 do
if MONTHS[i] == mon then
month = i
break
if day and mon and yr and hr and min and sec then
-- find month
local month = 1
for i = 1, 12 do
if MONTHS[i] == mon then
month = i
break
end
end
end
-- convert to epoch time
return tz_offset(tz) + os.time( {
year = yr,
month = month,
day = day,
hour = hr,
min = min,
sec = sec
} )
-- convert to epoch time
ucache[date] = tz_offset(tz) + os.time( {
year = yr,
month = month,
day = day,
hour = hr,
min = min,
sec = sec
} )
end
end
return 0
return ucache[date] or 0
end
-- Convert a unixtime to HTTP date
function to_http(time)
return os.date( "%a, %d %b %Y %H:%M:%S GMT", time )
if not hcache[time] then
hcache[time] = os.date( "%a, %d %b %Y %H:%M:%S GMT", time )
end
return hcache[time]
end
-- Compare two dates