aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2020-01-24 13:48:49 +0000
committerMatthew Wild <mwild1@gmail.com>2020-01-24 13:48:49 +0000
commitd3a6636c1c070199a5d70a8db4959a78b8d85f1e (patch)
treed349cdedb6353f81c1ffabc710af4f03ebc42b43 /net
parentf0b1353582c393ce12ce1fcf1c875539c8325966 (diff)
downloadprosody-d3a6636c1c070199a5d70a8db4959a78b8d85f1e.tar.gz
prosody-d3a6636c1c070199a5d70a8db4959a78b8d85f1e.zip
net.connect: Add API to create custom connect()s with options, incl. use_ipv[46]
Diffstat (limited to 'net')
-rw-r--r--net/connect.lua33
1 files changed, 21 insertions, 12 deletions
diff --git a/net/connect.lua b/net/connect.lua
index 6d399dda..2d929087 100644
--- a/net/connect.lua
+++ b/net/connect.lua
@@ -2,13 +2,17 @@ local server = require "net.server";
local log = require "util.logger".init("net.connect");
local new_id = require "util.id".short;
--- TODO Respect use_ipv4, use_ipv6
-- TODO #1246 Happy Eyeballs
-- FIXME RFC 6724
-- FIXME Error propagation from resolvers doesn't work
-- FIXME #1428 Reuse DNS resolver object between service and basic resolver
-- FIXME #1429 Close DNS resolver object when done
+local default_connector_options = {
+ use_ipv4 = true;
+ use_ipv6 = true;
+};
+
local pending_connection_methods = {};
local pending_connection_mt = {
__name = "pending_connection";
@@ -78,19 +82,24 @@ function pending_connection_listeners.ondisconnect(conn, reason)
attempt_connection(p);
end
-local function connect(target_resolver, listeners, options, data)
- local p = setmetatable({
- id = new_id();
- target_resolver = target_resolver;
- listeners = assert(listeners);
- options = options or {};
- data = data;
- }, pending_connection_mt);
+local function new_connector(connector_options)
+ local function connect(target_resolver, listeners, options, data)
+ local p = setmetatable({
+ id = new_id();
+ target_resolver = target_resolver;
+ listeners = assert(listeners);
+ options = options or {};
+ data = data;
+ connector_options = connector_options or default_connector_options;
+ }, pending_connection_mt);
- p:log("debug", "Starting connection process");
- attempt_connection(p);
+ p:log("debug", "Starting connection process");
+ attempt_connection(p);
+ end
+ return connect;
end
return {
- connect = connect;
+ connect = new_connector(default_connector_options);
+ new_connector = new_connector;
};