Software /
code /
prosody
Comparison
net/connect.lua @ 10623:f51c88baeb8a
Backed out changeset 44ef46e1a951 (not optimal API)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 25 Jan 2020 14:25:29 +0000 |
parent | 10612:44ef46e1a951 |
child | 10945:2edb72ef312a |
comparison
equal
deleted
inserted
replaced
10622:0662fe0e2c31 | 10623:f51c88baeb8a |
---|---|
1 local server = require "net.server"; | 1 local server = require "net.server"; |
2 local log = require "util.logger".init("net.connect"); | 2 local log = require "util.logger".init("net.connect"); |
3 local new_id = require "util.id".short; | 3 local new_id = require "util.id".short; |
4 | 4 |
5 -- TODO Respect use_ipv4, use_ipv6 | |
5 -- TODO #1246 Happy Eyeballs | 6 -- TODO #1246 Happy Eyeballs |
6 -- FIXME RFC 6724 | 7 -- FIXME RFC 6724 |
7 -- FIXME Error propagation from resolvers doesn't work | 8 -- FIXME Error propagation from resolvers doesn't work |
8 -- FIXME #1428 Reuse DNS resolver object between service and basic resolver | 9 -- FIXME #1428 Reuse DNS resolver object between service and basic resolver |
9 -- FIXME #1429 Close DNS resolver object when done | 10 -- FIXME #1429 Close DNS resolver object when done |
10 | |
11 local default_connector_options = { | |
12 use_ipv4 = true; | |
13 use_ipv6 = true; | |
14 }; | |
15 | 11 |
16 local pending_connection_methods = {}; | 12 local pending_connection_methods = {}; |
17 local pending_connection_mt = { | 13 local pending_connection_mt = { |
18 __name = "pending_connection"; | 14 __name = "pending_connection"; |
19 __index = pending_connection_methods; | 15 __index = pending_connection_methods; |
80 p.last_error = reason or "unknown reason"; | 76 p.last_error = reason or "unknown reason"; |
81 p:log("debug", "Connection attempt failed: %s", p.last_error); | 77 p:log("debug", "Connection attempt failed: %s", p.last_error); |
82 attempt_connection(p); | 78 attempt_connection(p); |
83 end | 79 end |
84 | 80 |
85 local function new_connector(connector_options) | 81 local function connect(target_resolver, listeners, options, data) |
86 local function connect(target_resolver, listeners, options, data) | 82 local p = setmetatable({ |
87 local p = setmetatable({ | 83 id = new_id(); |
88 id = new_id(); | 84 target_resolver = target_resolver; |
89 target_resolver = target_resolver; | 85 listeners = assert(listeners); |
90 listeners = assert(listeners); | 86 options = options or {}; |
91 options = options or {}; | 87 data = data; |
92 data = data; | 88 }, pending_connection_mt); |
93 connector_options = connector_options or default_connector_options; | |
94 }, pending_connection_mt); | |
95 | 89 |
96 p:log("debug", "Starting connection process"); | 90 p:log("debug", "Starting connection process"); |
97 attempt_connection(p); | 91 attempt_connection(p); |
98 end | |
99 return connect; | |
100 end | 92 end |
101 | 93 |
102 return { | 94 return { |
103 connect = new_connector(default_connector_options); | 95 connect = connect; |
104 new_connector = new_connector; | |
105 }; | 96 }; |