Comparison

core/portmanager.lua @ 6779:6236668da30a

core.*: Remove use of module() function
author Kim Alvefur <zash@zash.se>
date Sat, 21 Feb 2015 10:42:19 +0100
parent 6688:1d4fb397e561
child 6788:d64c1f3c7e2e
comparison
equal deleted inserted replaced
6778:4009ae66e0f0 6779:6236668da30a
12 local type, tonumber, tostring, ipairs = type, tonumber, tostring, ipairs; 12 local type, tonumber, tostring, ipairs = type, tonumber, tostring, ipairs;
13 13
14 local prosody = prosody; 14 local prosody = prosody;
15 local fire_event = prosody.events.fire_event; 15 local fire_event = prosody.events.fire_event;
16 16
17 module "portmanager"; 17 local _ENV = nil;
18 18
19 --- Config 19 --- Config
20 20
21 local default_interfaces = { }; 21 local default_interfaces = { };
22 local default_local_interfaces = { }; 22 local default_local_interfaces = { };
61 friendly_message = "Prosody does not have sufficient privileges to use this port"; 61 friendly_message = "Prosody does not have sufficient privileges to use this port";
62 end 62 end
63 return friendly_message; 63 return friendly_message;
64 end 64 end
65 65
66 prosody.events.add_handler("item-added/net-provider", function (event)
67 local item = event.item;
68 register_service(item.name, item);
69 end);
70 prosody.events.add_handler("item-removed/net-provider", function (event)
71 local item = event.item;
72 unregister_service(item.name, item);
73 end);
74
75 --- Public API 66 --- Public API
76 67
77 function activate(service_name) 68 local function activate(service_name)
78 local service_info = services[service_name][1]; 69 local service_info = services[service_name][1];
79 if not service_info then 70 if not service_info then
80 return nil, "Unknown service: "..service_name; 71 return nil, "Unknown service: "..service_name;
81 end 72 end
82 73
149 end 140 end
150 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, ", "));
151 return true; 142 return true;
152 end 143 end
153 144
154 function deactivate(service_name, service_info) 145 local function deactivate(service_name, service_info)
155 for name, interface, port, n, active_service --luacheck: ignore 213/name 213/n 146 for name, interface, port, n, active_service --luacheck: ignore 213/name 213/n
156 in active_services:iter(service_name or service_info and service_info.name, nil, nil, nil) do 147 in active_services:iter(service_name or service_info and service_info.name, nil, nil, nil) do
157 if service_info == nil or active_service.service == service_info then 148 if service_info == nil or active_service.service == service_info then
158 close(interface, port); 149 close(interface, port);
159 end 150 end
160 end 151 end
161 log("info", "Deactivated service '%s'", service_name or service_info.name); 152 log("info", "Deactivated service '%s'", service_name or service_info.name);
162 end 153 end
163 154
164 function register_service(service_name, service_info) 155 local function register_service(service_name, service_info)
165 table.insert(services[service_name], service_info); 156 table.insert(services[service_name], service_info);
166 157
167 if not active_services:get(service_name) then 158 if not active_services:get(service_name) then
168 log("debug", "No active service for %s, activating...", service_name); 159 log("debug", "No active service for %s, activating...", service_name);
169 local ok, err = activate(service_name); 160 local ok, err = activate(service_name);
174 165
175 fire_event("service-added", { name = service_name, service = service_info }); 166 fire_event("service-added", { name = service_name, service = service_info });
176 return true; 167 return true;
177 end 168 end
178 169
179 function unregister_service(service_name, service_info) 170 local function unregister_service(service_name, service_info)
180 log("debug", "Unregistering service: %s", service_name); 171 log("debug", "Unregistering service: %s", service_name);
181 local service_info_list = services[service_name]; 172 local service_info_list = services[service_name];
182 for i, service in ipairs(service_info_list) do 173 for i, service in ipairs(service_info_list) do
183 if service == service_info then 174 if service == service_info then
184 table.remove(service_info_list, i); 175 table.remove(service_info_list, i);
189 activate(service_name); -- Re-activate with the next available one 180 activate(service_name); -- Re-activate with the next available one
190 end 181 end
191 fire_event("service-removed", { name = service_name, service = service_info }); 182 fire_event("service-removed", { name = service_name, service = service_info });
192 end 183 end
193 184
194 function close(interface, port) 185 local function close(interface, port)
195 local service, service_server = get_service_at(interface, port); 186 local service, service_server = get_service_at(interface, port);
196 if not service then 187 if not service then
197 return false, "port-not-open"; 188 return false, "port-not-open";
198 end 189 end
199 service_server:close(); 190 service_server:close();
200 active_services:remove(service.name, interface, port); 191 active_services:remove(service.name, interface, port);
201 log("debug", "Removed listening service %s from [%s]:%d", service.name, interface, port); 192 log("debug", "Removed listening service %s from [%s]:%d", service.name, interface, port);
202 return true; 193 return true;
203 end 194 end
204 195
205 function get_service_at(interface, port) 196 local function get_service_at(interface, port)
206 local data = active_services:search(nil, interface, port)[1][1]; 197 local data = active_services:search(nil, interface, port)[1][1];
207 return data.service, data.server; 198 return data.service, data.server;
208 end 199 end
209 200
210 function get_service(service_name) 201 local function get_service(service_name)
211 return (services[service_name] or {})[1]; 202 return (services[service_name] or {})[1];
212 end 203 end
213 204
214 function get_active_services() 205 local function get_active_services()
215 return active_services; 206 return active_services;
216 end 207 end
217 208
218 function get_registered_services() 209 local function get_registered_services()
219 return services; 210 return services;
220 end 211 end
221 212
222 return _M; 213 -- Event handlers
214
215 prosody.events.add_handler("item-added/net-provider", function (event)
216 local item = event.item;
217 register_service(item.name, item);
218 end);
219 prosody.events.add_handler("item-removed/net-provider", function (event)
220 local item = event.item;
221 unregister_service(item.name, item);
222 end);
223
224 return {
225 activate = activate;
226 deactivate = deactivate;
227 register_service = register_service;
228 unregister_service = unregister_service;
229 close = close;
230 get_service_at = get_service_at;
231 get_service = get_service;
232 get_active_services = get_active_services;
233 get_registered_services = get_registered_services;
234 };