Mercurial > prosody-modules
comparison mod_net_proxy/mod_net_proxy.lua @ 2961:33227efa2cdc
mod_net_proxy: Automatically listen on all mapped ports if proxy_ports was not configured
author | Pascal Mathis <mail@pascalmathis.com> |
---|---|
date | Wed, 28 Mar 2018 19:00:13 +0200 |
parents | 7319fd5dbc89 |
children | 6b01600b9c02 |
comparison
equal
deleted
inserted
replaced
2960:b8834fec4b7e | 2961:33227efa2cdc |
---|---|
10 local softreq = require "util.dependencies".softreq; | 10 local softreq = require "util.dependencies".softreq; |
11 local bit = assert(softreq "bit" or softreq "bit32", "No bit module found. See https://prosody.im/doc/depends#bitop"); | 11 local bit = assert(softreq "bit" or softreq "bit32", "No bit module found. See https://prosody.im/doc/depends#bitop"); |
12 local hex = require "util.hex"; | 12 local hex = require "util.hex"; |
13 local ip = require "util.ip"; | 13 local ip = require "util.ip"; |
14 local net = require "util.net"; | 14 local net = require "util.net"; |
15 local set = require "util.set"; | |
15 local portmanager = require "core.portmanager"; | 16 local portmanager = require "core.portmanager"; |
16 | 17 |
17 -- Backwards Compatibility | 18 -- Backwards Compatibility |
18 local function net_ntop_bc(input) | 19 local function net_ntop_bc(input) |
19 if input:len() == 4 then | 20 if input:len() == 4 then |
385 sessions[conn] = nil; | 386 sessions[conn] = nil; |
386 end | 387 end |
387 | 388 |
388 listener.ondetach = listener.ondisconnect; | 389 listener.ondetach = listener.ondisconnect; |
389 | 390 |
390 -- Initialize the module by processing all configured port mappings | 391 -- Process all configured port mappings and generate a list of mapped ports |
392 local mapped_ports = {}; | |
393 local config_mappings = module:get_option("proxy_port_mappings", {}); | |
394 for port, mapping in pairs(config_mappings) do | |
395 table.insert(mapped_ports, port); | |
396 mappings[port] = { | |
397 service_name = mapping, | |
398 service = nil, | |
399 }; | |
400 end | |
401 | |
402 -- Log error message when user manually specifies ports without configuring the necessary port mappings | |
391 local config_ports = module:get_option_set("proxy_ports", {}); | 403 local config_ports = module:get_option_set("proxy_ports", {}); |
392 local config_mappings = module:get_option("proxy_port_mappings", {}); | 404 if not config_ports:empty() then |
393 for port in config_ports do | 405 local missing_ports = config_ports - set.new(mapped_ports); |
394 if config_mappings[port] ~= nil then | 406 if not missing_ports:empty() then |
395 mappings[port] = { | 407 module:log("error", "Missing port<>service mappings for these ports: %s", tostring(missing_ports)); |
396 service_name = config_mappings[port], | |
397 service = nil | |
398 }; | |
399 else | |
400 module:log("warn", "No port<>service mapping found for port: %d", port); | |
401 end | 408 end |
402 end | 409 end |
403 | 410 |
404 -- Register the previously declared network listener | 411 -- Register the previously declared network listener |
405 module:provides("net", { | 412 module:provides("net", { |
406 name = "proxy"; | 413 name = "proxy"; |
407 listener = listener; | 414 listener = listener; |
415 default_ports = mapped_ports; | |
408 }); | 416 }); |