Mercurial > prosody-modules
comparison mod_pubsub_feed/mod_pubsub_feed.lua @ 405:fe4fdba21a23
mod_pubsub_feed: Kill the timer on module unload
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 27 Aug 2011 04:49:11 +0200 |
parents | fc62b26dfdf6 |
children | 52f2188ec47d |
comparison
equal
deleted
inserted
replaced
404:eb8b005d2a3d | 405:fe4fdba21a23 |
---|---|
50 feed_list[node] = { url = url; node = node; last_update = 0 }; | 50 feed_list[node] = { url = url; node = node; last_update = 0 }; |
51 end | 51 end |
52 -- TODO module:hook("config-reloaded", above loop); | 52 -- TODO module:hook("config-reloaded", above loop); |
53 -- Also, keeping it somewhere persistent in order to avoid duplicated publishes? | 53 -- Also, keeping it somewhere persistent in order to avoid duplicated publishes? |
54 | 54 |
55 -- Used to kill the timer | |
56 local module_unloaded = false; | |
57 function module.unload() | |
58 module_unloaded = true; | |
59 end | |
60 | |
55 -- Thanks to Maranda for this | 61 -- Thanks to Maranda for this |
56 local port, base, ssl = 5280, "callback", false; | 62 local port, base, ssl = 5280, "callback", false; |
57 local ports = module:get_option("feeds_ports") or { port = port, base = base, ssl = ssl }; | 63 local ports = module:get_option("feeds_ports") or { port = port, base = base, ssl = ssl }; |
58 -- FIXME If ports isn't a table, this will cause an error | 64 -- FIXME If ports isn't a table, this will cause an error |
59 local _, first_port = next(ports); -- We base the callback URL on the first port config | 65 local _, first_port = next(ports); -- We base the callback URL on the first port config |
74 ["200"] = "OK"; | 80 ["200"] = "OK"; |
75 ["202"] = "Accepted"; | 81 ["202"] = "Accepted"; |
76 ["400"] = "Bad Request"; | 82 ["400"] = "Bad Request"; |
77 ["403"] = "Forbidden"; | 83 ["403"] = "Forbidden"; |
78 ["404"] = "Not Found"; | 84 ["404"] = "Not Found"; |
85 ["500"] = "Internal Server Error"; | |
79 ["501"] = "Not Implemented"; | 86 ["501"] = "Not Implemented"; |
80 }; | 87 }; |
81 | 88 |
82 local function http_response(code, headers, body) | 89 local function http_response(code, headers, body) |
83 return { | 90 return { |
160 end | 167 end |
161 end); | 168 end); |
162 end | 169 end |
163 | 170 |
164 function refresh_feeds() | 171 function refresh_feeds() |
172 if module_unloaded then return end | |
165 --module:log("debug", "Refreshing feeds"); | 173 --module:log("debug", "Refreshing feeds"); |
166 for node, item in pairs(feed_list) do | 174 for node, item in pairs(feed_list) do |
167 --FIXME Don't fetch feeds which have a subscription | 175 --FIXME Don't fetch feeds which have a subscription |
168 -- Otoho, what if the subscription expires or breaks? | 176 -- Otoho, what if the subscription expires or breaks? |
169 if item.last_update + refresh_interval < time() then | 177 if item.last_update + refresh_interval < time() then |
200 module:log("debug", "subscription to %s submitted, staus %s", feed.node, code); | 208 module:log("debug", "subscription to %s submitted, staus %s", feed.node, code); |
201 end); | 209 end); |
202 end | 210 end |
203 | 211 |
204 function handle_http_request(method, body, request) | 212 function handle_http_request(method, body, request) |
213 if module_unloaded then | |
214 module:log("warn", "Received a HTTP request after module unload"); | |
215 return http_response(500) | |
216 -- FIXME if this happens. | |
217 end | |
205 --module:log("debug", "%s request to %s%s with body %s", method, request.url.path, request.url.query and "?" .. request.url.query or "", #body > 0 and body or "empty"); | 218 --module:log("debug", "%s request to %s%s with body %s", method, request.url.path, request.url.query and "?" .. request.url.query or "", #body > 0 and body or "empty"); |
206 local query = request.url.query or {}; | 219 local query = request.url.query or {}; |
207 if query and type(query) == "string" then | 220 if query and type(query) == "string" then |
208 query = formdecode(query); | 221 query = formdecode(query); |
209 --module:log("debug", "GET data: %s", dump(query)); | 222 --module:log("debug", "GET data: %s", dump(query)); |