* 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) module("luci.http.protocol.date", package.seeall)
local ucache = { }
local hcache = { }
MONTHS = { MONTHS = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec" "Sep", "Oct", "Nov", "Dec"
@ -151,6 +155,7 @@ end
-- Convert a HTTP date to unixtime -- Convert a HTTP date to unixtime
function to_unix(date) function to_unix(date)
if not ucache[date] then
local wd, day, mon, yr, hr, min, sec, tz = date:match( 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]+) " ..
"([A-Z][a-z][a-z]) ([0-9]+) " .. "([A-Z][a-z][a-z]) ([0-9]+) " ..
@ -169,7 +174,7 @@ function to_unix(date)
end end
-- convert to epoch time -- convert to epoch time
return tz_offset(tz) + os.time( { ucache[date] = tz_offset(tz) + os.time( {
year = yr, year = yr,
month = month, month = month,
day = day, day = day,
@ -178,13 +183,18 @@ function to_unix(date)
sec = sec sec = sec
} ) } )
end end
end
return 0 return ucache[date] or 0
end end
-- Convert a unixtime to HTTP date -- Convert a unixtime to HTTP date
function to_http(time) 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 end
-- Compare two dates -- Compare two dates