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) |