143 |
143 |
144 -- Function to reload the config file |
144 -- Function to reload the config file |
145 function prosody.reload_config() |
145 function prosody.reload_config() |
146 log("info", "Reloading configuration file"); |
146 log("info", "Reloading configuration file"); |
147 eventmanager.fire_event("reloading-config"); |
147 eventmanager.fire_event("reloading-config"); |
|
148 prosody.events.fire_event("reloading-config", {}); |
148 local ok, level, err = config.load((rawget(_G, "CFG_CONFIGDIR") or ".").."/prosody.cfg.lua"); |
149 local ok, level, err = config.load((rawget(_G, "CFG_CONFIGDIR") or ".").."/prosody.cfg.lua"); |
149 if not ok then |
150 if not ok then |
150 if level == "parser" then |
151 if level == "parser" then |
151 log("error", "There was an error parsing the configuration file: %s", tostring(err)); |
152 log("error", "There was an error parsing the configuration file: %s", tostring(err)); |
152 elseif level == "file" then |
153 elseif level == "file" then |
157 |
158 |
158 -- Function to reopen logfiles |
159 -- Function to reopen logfiles |
159 function prosody.reopen_logfiles() |
160 function prosody.reopen_logfiles() |
160 log("info", "Re-opening log files"); |
161 log("info", "Re-opening log files"); |
161 eventmanager.fire_event("reopen-log-files"); -- Handled by appropriate log sinks |
162 eventmanager.fire_event("reopen-log-files"); -- Handled by appropriate log sinks |
|
163 prosody.events.fire_event("reopen-log-files", {}); |
162 end |
164 end |
163 |
165 |
164 -- Function to initiate prosody shutdown |
166 -- Function to initiate prosody shutdown |
165 function prosody.shutdown(reason) |
167 function prosody.shutdown(reason) |
166 log("info", "Shutting down: %s", reason or "unknown reason"); |
168 log("info", "Shutting down: %s", reason or "unknown reason"); |
167 eventmanager.fire_event("server-stopping", { reason = reason }); |
169 eventmanager.fire_event("server-stopping", { reason = reason }); |
|
170 prosody.events.fire_event("server-stopping", {}); |
168 server.setquitting(true); |
171 server.setquitting(true); |
169 end |
172 end |
170 |
173 |
171 -- Signal to modules that we are ready to start |
174 -- Signal to modules that we are ready to start |
172 eventmanager.fire_event("server-starting"); |
175 eventmanager.fire_event("server-starting"); |
|
176 prosody.events.fire_event("server-starting", {}); |
173 |
177 |
174 -- Load SSL settings from config, and create a ctx table |
178 -- Load SSL settings from config, and create a ctx table |
175 local global_ssl_ctx = ssl and config.get("*", "core", "ssl"); |
179 local global_ssl_ctx = ssl and config.get("*", "core", "ssl"); |
176 if global_ssl_ctx then |
180 if global_ssl_ctx then |
177 local default_ssl_ctx = { mode = "server", protocol = "sslv23", capath = "/etc/ssl/certs", verify = "none"; }; |
181 local default_ssl_ctx = { mode = "server", protocol = "sslv23", capath = "/etc/ssl/certs", verify = "none"; }; |
225 |
229 |
226 -- And lock now... |
230 -- And lock now... |
227 prosody.lock_globals(); |
231 prosody.lock_globals(); |
228 |
232 |
229 eventmanager.fire_event("server-started"); |
233 eventmanager.fire_event("server-started"); |
|
234 prosody.events.fire_event("server-started", {}); |
230 |
235 |
231 -- Error handler for errors that make it this far |
236 -- Error handler for errors that make it this far |
232 local function catch_uncaught_error(err) |
237 local function catch_uncaught_error(err) |
233 if err:match("%d*: interrupted!$") then |
238 if err:match("%d*: interrupted!$") then |
234 return "quitting"; |
239 return "quitting"; |
239 if traceback then |
244 if traceback then |
240 log("error", "%s", traceback); |
245 log("error", "%s", traceback); |
241 end |
246 end |
242 |
247 |
243 eventmanager.fire_event("very-bad-error", "*", err, traceback); |
248 eventmanager.fire_event("very-bad-error", "*", err, traceback); |
|
249 prosody.events.fire_event("very-bad-error", {error = err, traceback = traceback}); |
244 end |
250 end |
245 |
251 |
246 while select(2, xpcall(server.loop, catch_uncaught_error)) ~= "quitting" do |
252 while select(2, xpcall(server.loop, catch_uncaught_error)) ~= "quitting" do |
247 socket.sleep(0.2); |
253 socket.sleep(0.2); |
248 end |
254 end |
249 |
255 |
250 log("info", "Shutdown status: Cleaning up"); |
256 log("info", "Shutdown status: Cleaning up"); |
251 eventmanager.fire_event("server-cleanup"); |
257 eventmanager.fire_event("server-cleanup"); |
|
258 prosody.events.fire_event("server-cleanup", {}); |
252 |
259 |
253 -- Ok, we're quitting I know, but we |
260 -- Ok, we're quitting I know, but we |
254 -- need to do some tidying before we go :) |
261 -- need to do some tidying before we go :) |
255 server.setquitting(false); |
262 server.setquitting(false); |
256 |
263 |