core/portmanager.lua
changeset 6791 d64c1f3c7e2e
parent 6782 6236668da30a
child 6983 daaa52b3f45f
equal deleted inserted replaced
6790:ad64e2eacd0e 6791:d64c1f3c7e2e
   140 	end
   140 	end
   141 	log("info", "Activated service '%s' on %s", service_name, #hooked_ports == 0 and "no ports" or table.concat(hooked_ports, ", "));
   141 	log("info", "Activated service '%s' on %s", service_name, #hooked_ports == 0 and "no ports" or table.concat(hooked_ports, ", "));
   142 	return true;
   142 	return true;
   143 end
   143 end
   144 
   144 
       
   145 local close; -- forward declaration
       
   146 
   145 local function deactivate(service_name, service_info)
   147 local function deactivate(service_name, service_info)
   146 	for name, interface, port, n, active_service --luacheck: ignore 213/name 213/n
   148 	for name, interface, port, n, active_service --luacheck: ignore 213/name 213/n
   147 		in active_services:iter(service_name or service_info and service_info.name, nil, nil, nil) do
   149 		in active_services:iter(service_name or service_info and service_info.name, nil, nil, nil) do
   148 		if service_info == nil or active_service.service == service_info then
   150 		if service_info == nil or active_service.service == service_info then
   149 			close(interface, port);
   151 			close(interface, port);
   180 		activate(service_name); -- Re-activate with the next available one
   182 		activate(service_name); -- Re-activate with the next available one
   181 	end
   183 	end
   182 	fire_event("service-removed", { name = service_name, service = service_info });
   184 	fire_event("service-removed", { name = service_name, service = service_info });
   183 end
   185 end
   184 
   186 
   185 local function close(interface, port)
   187 local get_service_at -- forward declaration
       
   188 
       
   189 function close(interface, port)
   186 	local service, service_server = get_service_at(interface, port);
   190 	local service, service_server = get_service_at(interface, port);
   187 	if not service then
   191 	if not service then
   188 		return false, "port-not-open";
   192 		return false, "port-not-open";
   189 	end
   193 	end
   190 	service_server:close();
   194 	service_server:close();
   191 	active_services:remove(service.name, interface, port);
   195 	active_services:remove(service.name, interface, port);
   192 	log("debug", "Removed listening service %s from [%s]:%d", service.name, interface, port);
   196 	log("debug", "Removed listening service %s from [%s]:%d", service.name, interface, port);
   193 	return true;
   197 	return true;
   194 end
   198 end
   195 
   199 
   196 local function get_service_at(interface, port)
   200 function get_service_at(interface, port)
   197 	local data = active_services:search(nil, interface, port)[1][1];
   201 	local data = active_services:search(nil, interface, port)[1][1];
   198 	return data.service, data.server;
   202 	return data.service, data.server;
   199 end
   203 end
   200 
   204 
   201 local function get_service(service_name)
   205 local function get_service(service_name)