mod_cleanup_http/mod_cleanup_http.lua
changeset 646 aef5355a2ca6
parent 645 9591315b98ae
child 647 6b3606e0a6e7
equal deleted inserted replaced
645:9591315b98ae 646:aef5355a2ca6
     1 -- Auto-cleanup for Global BOSH modules.
       
     2 -- Should take care of spring cleaning without messing in either the console, or restarting
       
     3 
       
     4 module:set_global()
       
     5 
       
     6 local http_modules = module:get_option("cleanup_http_modules", {})
       
     7 if type(http_modules) ~= "table" then module:log("error", "cleanup_http_modules needs to be a module.") ; return false end
       
     8 
       
     9 local function cleanup(data)
       
    10 	if data.module == "cleanup_http" then -- it's us getting unloaded destroy handler.
       
    11 		prosody.events.remove_handler("module-unloaded", cleanup)
       
    12 	elseif http_modules[data.module] then
       
    13 		local ports = http_modules[data.module]
       
    14 
       
    15 		module:log("debug", "Cleaning up http handlers and ports as module %s is being unloaded.", data.module)
       
    16 		for _, options in ipairs(ports) do
       
    17 			if options.port then
       
    18                         	httpserver.new.http_servers[options.port].handlers[options.path or "register_account"] = nil
       
    19 			end
       
    20 		end
       
    21 
       
    22 		-- if there are no handlers left clean and close the socket, doesn't work with server_event
       
    23 		local event = require "core.configmanager".get("*", "core", "use_libevent")
       
    24 
       
    25 		if not event then
       
    26         	        for _, options in ipairs(ports) do
       
    27                 	        if options.port and not next(httpserver.new.http_servers[options.port].handlers) then
       
    28                         	        httpserver.new.http_servers[options.port] = nil
       
    29 					if options.interface then
       
    30 						for _, value in ipairs(options.interface) do
       
    31 							if server.getserver(value, options.port) then server.removeserver(value, options.port) end
       
    32 						end
       
    33 					else if server.getserver("*", options.port) then server.removeserver("*", options.port) end end
       
    34 				end
       
    35 			end
       
    36 		end
       
    37 	end
       
    38 end
       
    39 
       
    40 prosody.events.add_handler("module-unloaded", cleanup)