Software /
code /
prosody
Annotate
plugins/mod_s2s/s2sout.lib.lua @ 5915:e6fed1d80116
Back out 1b0ac7950129, as SSLv3 appears to still be in moderate use on the network. Also, although obsolete, SSLv3 isn't documented to have any weaknesses that TLS 1.0 (the most common version used today) doesn't also have. Get your act together clients!
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 12 Nov 2013 02:13:01 +0000 |
parent | 5703:ea00fc524b95 |
child | 5776:bd0ff8ae98a8 |
child | 6015:8fead005ee60 |
rev | line source |
---|---|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 -- |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 --- Module containing all the logic for connecting to a remote server |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
4602
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
11 local portmanager = require "core.portmanager"; |
4569
34b1122126f6
s2sout.lib: import utils/functionality once in s2smanager.
Florian Zeitz <florob@babelmonkeys.de>
parents:
4555
diff
changeset
|
12 local wrapclient = require "net.server".wrapclient; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local initialize_filters = require "util.filters".initialize; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 local idna_to_ascii = require "util.encodings".idna.to_ascii; |
4569
34b1122126f6
s2sout.lib: import utils/functionality once in s2smanager.
Florian Zeitz <florob@babelmonkeys.de>
parents:
4555
diff
changeset
|
15 local new_ip = require "util.ip".new_ip; |
5552
40e7a6cf15ff
util.rfc{3484,6724}: Update to RFC 6724
Florian Zeitz <florob@babelmonkeys.de>
parents:
5388
diff
changeset
|
16 local rfc6724_dest = require "util.rfc6724".destination; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 local socket = require "socket"; |
4756
f8ddaaa08a8e
mod_s2s/s2sout.lib: Fix imports and some undefined variables
Matthew Wild <mwild1@gmail.com>
parents:
4629
diff
changeset
|
18 local adns = require "net.adns"; |
f8ddaaa08a8e
mod_s2s/s2sout.lib: Fix imports and some undefined variables
Matthew Wild <mwild1@gmail.com>
parents:
4629
diff
changeset
|
19 local dns = require "net.dns"; |
4573 | 20 local t_insert, t_sort, ipairs = table.insert, table.sort, ipairs; |
5701
746b263e09cf
mod_s2s/s2sout.lib: Use new util.net.local_addresses() to fetch local interface addresses
Matthew Wild <mwild1@gmail.com>
parents:
5700
diff
changeset
|
21 local local_addresses = require "util.net".local_addresses; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 local s2s_destroy_session = require "core.s2smanager".destroy_session; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 |
4756
f8ddaaa08a8e
mod_s2s/s2sout.lib: Fix imports and some undefined variables
Matthew Wild <mwild1@gmail.com>
parents:
4629
diff
changeset
|
25 local log = module._log; |
f8ddaaa08a8e
mod_s2s/s2sout.lib: Fix imports and some undefined variables
Matthew Wild <mwild1@gmail.com>
parents:
4629
diff
changeset
|
26 |
4602
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
27 local sources = {}; |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
28 local has_ipv4, has_ipv6; |
4569
34b1122126f6
s2sout.lib: import utils/functionality once in s2smanager.
Florian Zeitz <florob@babelmonkeys.de>
parents:
4555
diff
changeset
|
29 |
4832
6b3aec1e0d9f
s2smanager, mod_s2s: Move checking DNS timeout option to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
30 local dns_timeout = module:get_option_number("dns_timeout", 15); |
6b3aec1e0d9f
s2smanager, mod_s2s: Move checking DNS timeout option to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
4814
diff
changeset
|
31 dns.settimeout(dns_timeout); |
4599
f9f5230d7a9c
s2smanager, mod_s2s: Move import of dns_max_depth to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
4573
diff
changeset
|
32 local max_dns_depth = module:get_option_number("dns_max_depth", 3); |
f9f5230d7a9c
s2smanager, mod_s2s: Move import of dns_max_depth to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
4573
diff
changeset
|
33 |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 local s2sout = {}; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 local s2s_listener; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 |
4563
75bff73391fb
s2sout.lib: Add locals for source interfaces
Kim Alvefur <zash@zash.se>
parents:
4562
diff
changeset
|
38 |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 function s2sout.set_listener(listener) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 s2s_listener = listener; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 local function compare_srv_priorities(a,b) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 return a.priority < b.priority or (a.priority == b.priority and a.weight > b.weight); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 function s2sout.initiate_connection(host_session) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 initialize_filters(host_session); |
5351
901ed253bbf7
mod_s2s, mod_saslauth, mod_compression: Refactor to have common code for opening streams
Kim Alvefur <zash@zash.se>
parents:
5112
diff
changeset
|
49 host_session.version = 1; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 -- Kick the connection attempting machine into life |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 if not s2sout.attempt_connection(host_session) then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 -- Intentionally not returning here, the |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 -- session is needed, connected or not |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 s2s_destroy_session(host_session); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 if not host_session.sends2s then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 -- A sends2s which buffers data (until the stream is opened) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 -- note that data in this buffer will be sent before the stream is authed |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 -- and will not be ack'd in any way, successful or otherwise |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 local buffer; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 function host_session.sends2s(data) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 if not buffer then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 buffer = {}; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 host_session.send_buffer = buffer; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 end |
4756
f8ddaaa08a8e
mod_s2s/s2sout.lib: Fix imports and some undefined variables
Matthew Wild <mwild1@gmail.com>
parents:
4629
diff
changeset
|
68 log("debug", "Buffering data on unconnected s2sout to %s", tostring(host_session.to_host)); |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 buffer[#buffer+1] = data; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 log("debug", "Buffered item %d: %s", #buffer, tostring(data)); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 function s2sout.attempt_connection(host_session, err) |
5703
ea00fc524b95
mod_s2s/s2sout.lib: Remove unused variables and imports
Matthew Wild <mwild1@gmail.com>
parents:
5702
diff
changeset
|
76 local to_host = host_session.to_host; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 local connect_host, connect_port = to_host and idna_to_ascii(to_host), 5269; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 if not connect_host then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 return false; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 if not err then -- This is our first attempt |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 log("debug", "First attempt to connect to %s, starting with SRV lookup...", to_host); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 host_session.connecting = true; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 local handle; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 handle = adns.lookup(function (answer) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 handle = nil; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 host_session.connecting = nil; |
5112
8b94a8d92cf3
mod_s2s: Check that an SRV reply isn't empty.
Kim Alvefur <zash@zash.se>
parents:
4987
diff
changeset
|
90 if answer and #answer > 0 then |
4987
d37f2abac72c
mod_s2s/s2sout.lib: Use %s to insert strings into log messages instead of concatenation
Matthew Wild <mwild1@gmail.com>
parents:
4959
diff
changeset
|
91 log("debug", "%s has SRV records, handling...", to_host); |
5386
43059357b2f0
mod_s2s: Keep the dns answer object around a while so plugins can look at it
Kim Alvefur <zash@zash.se>
parents:
5351
diff
changeset
|
92 local srv_hosts = { answer = answer }; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 host_session.srv_hosts = srv_hosts; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 for _, record in ipairs(answer) do |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 t_insert(srv_hosts, record.srv); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 if #srv_hosts == 1 and srv_hosts[1].target == "." then |
4987
d37f2abac72c
mod_s2s/s2sout.lib: Use %s to insert strings into log messages instead of concatenation
Matthew Wild <mwild1@gmail.com>
parents:
4959
diff
changeset
|
98 log("debug", "%s does not provide a XMPP service", to_host); |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 s2s_destroy_session(host_session, err); -- Nothing to see here |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 return; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 t_sort(srv_hosts, compare_srv_priorities); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 local srv_choice = srv_hosts[1]; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 host_session.srv_choice = 1; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 if srv_choice then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
107 connect_host, connect_port = srv_choice.target or to_host, srv_choice.port or connect_port; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
108 log("debug", "Best record found, will connect to %s:%d", connect_host, connect_port); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
109 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
110 else |
4987
d37f2abac72c
mod_s2s/s2sout.lib: Use %s to insert strings into log messages instead of concatenation
Matthew Wild <mwild1@gmail.com>
parents:
4959
diff
changeset
|
111 log("debug", "%s has no SRV records, falling back to A/AAAA", to_host); |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 -- Try with SRV, or just the plain hostname if no SRV |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 local ok, err = s2sout.try_connect(host_session, connect_host, connect_port); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 if not ok then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 if not s2sout.attempt_connection(host_session, err) then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 -- No more attempts will be made |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 s2s_destroy_session(host_session, err); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 end, "_xmpp-server._tcp."..connect_host..".", "SRV"); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 return true; -- Attempt in progress |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 elseif host_session.ip_hosts then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 return s2sout.try_connect(host_session, connect_host, connect_port, err); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 elseif host_session.srv_hosts and #host_session.srv_hosts > host_session.srv_choice then -- Not our first attempt, and we also have SRV |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 host_session.srv_choice = host_session.srv_choice + 1; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 local srv_choice = host_session.srv_hosts[host_session.srv_choice]; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
129 connect_host, connect_port = srv_choice.target or to_host, srv_choice.port or connect_port; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 host_session.log("info", "Connection failed (%s). Attempt #%d: This time to %s:%d", tostring(err), host_session.srv_choice, connect_host, connect_port); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
131 else |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
132 host_session.log("info", "Out of connection options, can't connect to %s", tostring(host_session.to_host)); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
133 -- We're out of options |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 return false; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 if not (connect_host and connect_port) then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 -- Likely we couldn't resolve DNS |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 log("warn", "Hmm, we're without a host (%s) and port (%s) to connect to for %s, giving up :(", tostring(connect_host), tostring(connect_port), tostring(to_host)); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 return false; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 return s2sout.try_connect(host_session, connect_host, connect_port); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 function s2sout.try_next_ip(host_session) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 host_session.connecting = nil; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 host_session.ip_choice = host_session.ip_choice + 1; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 local ip = host_session.ip_hosts[host_session.ip_choice]; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 local ok, err= s2sout.make_connect(host_session, ip.ip, ip.port); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 if not ok then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 if not s2sout.attempt_connection(host_session, err or "closed") then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 err = err and (": "..err) or ""; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 s2s_destroy_session(host_session, "Connection failed"..err); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 function s2sout.try_connect(host_session, connect_host, connect_port, err) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 host_session.connecting = true; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 if not err then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 local IPs = {}; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 host_session.ip_hosts = IPs; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 local handle4, handle6; |
4957
1722a6bea115
mod_s2s/s2sout.lib: Don't wait for both v4 and v6 DNS responses if we only send one (e.g. because v6 is disabled)
Matthew Wild <mwild1@gmail.com>
parents:
4923
diff
changeset
|
166 local have_other_result = not(has_ipv4) or not(has_ipv6) or false; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
168 if has_ipv4 then |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
169 handle4 = adns.lookup(function (reply, err) |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
170 handle4 = nil; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
172 -- COMPAT: This is a compromise for all you CNAME-(ab)users :) |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
173 if not (reply and reply[#reply] and reply[#reply].a) then |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
174 local count = max_dns_depth; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
175 reply = dns.peek(connect_host, "CNAME", "IN"); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
176 while count > 0 and reply and reply[#reply] and not reply[#reply].a and reply[#reply].cname do |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
177 log("debug", "Looking up %s (DNS depth is %d)", tostring(reply[#reply].cname), count); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
178 reply = dns.peek(reply[#reply].cname, "A", "IN") or dns.peek(reply[#reply].cname, "CNAME", "IN"); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
179 count = count - 1; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
180 end |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
181 end |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
182 -- end of CNAME resolving |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
184 if reply and reply[#reply] and reply[#reply].a then |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
185 for _, ip in ipairs(reply) do |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
186 log("debug", "DNS reply for %s gives us %s", connect_host, ip.a); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
187 IPs[#IPs+1] = new_ip(ip.a, "IPv4"); |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
188 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
189 end |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
190 |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
191 if have_other_result then |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
192 if #IPs > 0 then |
5552
40e7a6cf15ff
util.rfc{3484,6724}: Update to RFC 6724
Florian Zeitz <florob@babelmonkeys.de>
parents:
5388
diff
changeset
|
193 rfc6724_dest(host_session.ip_hosts, sources); |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
194 for i = 1, #IPs do |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
195 IPs[i] = {ip = IPs[i], port = connect_port}; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
196 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
197 host_session.ip_choice = 0; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
198 s2sout.try_next_ip(host_session); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
199 else |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
200 log("debug", "DNS lookup failed to get a response for %s", connect_host); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
201 host_session.ip_hosts = nil; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
202 if not s2sout.attempt_connection(host_session, "name resolution failed") then -- Retry if we can |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
203 log("debug", "No other records to try for %s - destroying", host_session.to_host); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
204 err = err and (": "..err) or ""; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
205 s2s_destroy_session(host_session, "DNS resolution failed"..err); -- End of the line, we can't |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
206 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
207 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
208 else |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
209 have_other_result = true; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
210 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
211 end, connect_host, "A", "IN"); |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
212 else |
4957
1722a6bea115
mod_s2s/s2sout.lib: Don't wait for both v4 and v6 DNS responses if we only send one (e.g. because v6 is disabled)
Matthew Wild <mwild1@gmail.com>
parents:
4923
diff
changeset
|
213 have_other_result = true; |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
214 end |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
216 if has_ipv6 then |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
217 handle6 = adns.lookup(function (reply, err) |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
218 handle6 = nil; |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
219 |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
220 if reply and reply[#reply] and reply[#reply].aaaa then |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
221 for _, ip in ipairs(reply) do |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
222 log("debug", "DNS reply for %s gives us %s", connect_host, ip.aaaa); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
223 IPs[#IPs+1] = new_ip(ip.aaaa, "IPv6"); |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 end |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
226 |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
227 if have_other_result then |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
228 if #IPs > 0 then |
5552
40e7a6cf15ff
util.rfc{3484,6724}: Update to RFC 6724
Florian Zeitz <florob@babelmonkeys.de>
parents:
5388
diff
changeset
|
229 rfc6724_dest(host_session.ip_hosts, sources); |
4959
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
230 for i = 1, #IPs do |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
231 IPs[i] = {ip = IPs[i], port = connect_port}; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
232 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
233 host_session.ip_choice = 0; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
234 s2sout.try_next_ip(host_session); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
235 else |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
236 log("debug", "DNS lookup failed to get a response for %s", connect_host); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
237 host_session.ip_hosts = nil; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
238 if not s2sout.attempt_connection(host_session, "name resolution failed") then -- Retry if we can |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
239 log("debug", "No other records to try for %s - destroying", host_session.to_host); |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
240 err = err and (": "..err) or ""; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
241 s2s_destroy_session(host_session, "DNS resolution failed"..err); -- End of the line, we can't |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
242 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
243 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
244 else |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
245 have_other_result = true; |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
246 end |
ab696f5394cf
mod_s2s/s2sout.lib: Fix indentation
Matthew Wild <mwild1@gmail.com>
parents:
4957
diff
changeset
|
247 end, connect_host, "AAAA", "IN"); |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
248 else |
4957
1722a6bea115
mod_s2s/s2sout.lib: Don't wait for both v4 and v6 DNS responses if we only send one (e.g. because v6 is disabled)
Matthew Wild <mwild1@gmail.com>
parents:
4923
diff
changeset
|
249 have_other_result = true; |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
250 end |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
251 return true; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
252 elseif host_session.ip_hosts and #host_session.ip_hosts > host_session.ip_choice then -- Not our first attempt, and we also have IPs left to try |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
253 s2sout.try_next_ip(host_session); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
254 else |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
255 host_session.ip_hosts = nil; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 if not s2sout.attempt_connection(host_session, "out of IP addresses") then -- Retry if we can |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
257 log("debug", "No other records to try for %s - destroying", host_session.to_host); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
258 err = err and (": "..err) or ""; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
259 s2s_destroy_session(host_session, "Connecting failed"..err); -- End of the line, we can't |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
260 return false; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
261 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
262 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
263 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 return true; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
265 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
266 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 function s2sout.make_connect(host_session, connect_host, connect_port) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
268 (host_session.log or log)("info", "Beginning new connection attempt to %s ([%s]:%d)", host_session.to_host, connect_host.addr, connect_port); |
5703
ea00fc524b95
mod_s2s/s2sout.lib: Remove unused variables and imports
Matthew Wild <mwild1@gmail.com>
parents:
5702
diff
changeset
|
269 |
5388
f833d2188c16
mod_s2s: Reset secure flag on new connection attempt
Kim Alvefur <zash@zash.se>
parents:
5386
diff
changeset
|
270 -- Reset secure flag in case this is another |
f833d2188c16
mod_s2s: Reset secure flag on new connection attempt
Kim Alvefur <zash@zash.se>
parents:
5386
diff
changeset
|
271 -- connection attempt after a failed STARTTLS |
f833d2188c16
mod_s2s: Reset secure flag on new connection attempt
Kim Alvefur <zash@zash.se>
parents:
5386
diff
changeset
|
272 host_session.secure = nil; |
f833d2188c16
mod_s2s: Reset secure flag on new connection attempt
Kim Alvefur <zash@zash.se>
parents:
5386
diff
changeset
|
273 |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
274 local conn, handler; |
5700
94081567ea9e
mod_s2s/s2sout.lib: Only attempt to create an IPv6 socket if LuaSocket supports IPv6
Matthew Wild <mwild1@gmail.com>
parents:
5552
diff
changeset
|
275 local proto = connect_host.proto; |
94081567ea9e
mod_s2s/s2sout.lib: Only attempt to create an IPv6 socket if LuaSocket supports IPv6
Matthew Wild <mwild1@gmail.com>
parents:
5552
diff
changeset
|
276 if proto == "IPv4" then |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
277 conn, handler = socket.tcp(); |
5700
94081567ea9e
mod_s2s/s2sout.lib: Only attempt to create an IPv6 socket if LuaSocket supports IPv6
Matthew Wild <mwild1@gmail.com>
parents:
5552
diff
changeset
|
278 elseif proto == "IPv6" and socket.tcp6 then |
94081567ea9e
mod_s2s/s2sout.lib: Only attempt to create an IPv6 socket if LuaSocket supports IPv6
Matthew Wild <mwild1@gmail.com>
parents:
5552
diff
changeset
|
279 conn, handler = socket.tcp6(); |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
280 else |
5700
94081567ea9e
mod_s2s/s2sout.lib: Only attempt to create an IPv6 socket if LuaSocket supports IPv6
Matthew Wild <mwild1@gmail.com>
parents:
5552
diff
changeset
|
281 handler = "Unsupported protocol: "..tostring(proto); |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
282 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
283 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
284 if not conn then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
285 log("warn", "Failed to create outgoing connection, system error: %s", handler); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
286 return false, handler; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
287 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
288 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
289 conn:settimeout(0); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
290 local success, err = conn:connect(connect_host.addr, connect_port); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
291 if not success and err ~= "timeout" then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
292 log("warn", "s2s connect() to %s (%s:%d) failed: %s", host_session.to_host, connect_host.addr, connect_port, err); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
293 return false, err; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
294 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
295 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
296 conn = wrapclient(conn, connect_host.addr, connect_port, s2s_listener, "*a"); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
297 host_session.conn = conn; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
298 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
299 local filter = initialize_filters(host_session); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
300 local w, log = conn.write, host_session.log; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
301 host_session.sends2s = function (t) |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
302 log("debug", "sending: %s", (t.top_tag and t:top_tag()) or t:match("^[^>]*>?")); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
303 if t.name then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
304 t = filter("stanzas/out", t); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
305 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
306 if t then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
307 t = filter("bytes/out", tostring(t)); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
308 if t then |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
309 return w(conn, tostring(t)); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
310 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
311 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
312 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
313 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
314 -- Register this outgoing connection so that xmppserver_listener knows about it |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
315 -- otherwise it will assume it is a new incoming connection |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
316 s2s_listener.register_outgoing(conn, host_session); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
317 |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
318 log("debug", "Connection attempt in progress..."); |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
319 return true; |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
320 end |
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
321 |
4602
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
322 module:hook_global("service-added", function (event) |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
323 if event.name ~= "s2s" then return end |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
324 |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
325 local s2s_sources = portmanager.get_active_services():get("s2s"); |
4611
8572373fa26f
mod_s2s/s2sout.lib: Log message instead of traceback when s2s isn't configured for any ports
Matthew Wild <mwild1@gmail.com>
parents:
4602
diff
changeset
|
326 if not s2s_sources then |
8572373fa26f
mod_s2s/s2sout.lib: Log message instead of traceback when s2s isn't configured for any ports
Matthew Wild <mwild1@gmail.com>
parents:
4602
diff
changeset
|
327 module:log("warn", "s2s not listening on any ports, outgoing connections may fail"); |
8572373fa26f
mod_s2s/s2sout.lib: Log message instead of traceback when s2s isn't configured for any ports
Matthew Wild <mwild1@gmail.com>
parents:
4602
diff
changeset
|
328 return; |
8572373fa26f
mod_s2s/s2sout.lib: Log message instead of traceback when s2s isn't configured for any ports
Matthew Wild <mwild1@gmail.com>
parents:
4602
diff
changeset
|
329 end |
4602
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
330 for source, _ in pairs(s2s_sources) do |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
331 if source == "*" or source == "0.0.0.0" then |
5701
746b263e09cf
mod_s2s/s2sout.lib: Use new util.net.local_addresses() to fetch local interface addresses
Matthew Wild <mwild1@gmail.com>
parents:
5700
diff
changeset
|
332 for _, addr in ipairs(local_addresses("ipv4", true)) do |
746b263e09cf
mod_s2s/s2sout.lib: Use new util.net.local_addresses() to fetch local interface addresses
Matthew Wild <mwild1@gmail.com>
parents:
5700
diff
changeset
|
333 sources[#sources + 1] = new_ip(addr, "IPv4"); |
4602
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
334 end |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
335 elseif source == "::" then |
5701
746b263e09cf
mod_s2s/s2sout.lib: Use new util.net.local_addresses() to fetch local interface addresses
Matthew Wild <mwild1@gmail.com>
parents:
5700
diff
changeset
|
336 for _, addr in ipairs(local_addresses("ipv6", true)) do |
746b263e09cf
mod_s2s/s2sout.lib: Use new util.net.local_addresses() to fetch local interface addresses
Matthew Wild <mwild1@gmail.com>
parents:
5700
diff
changeset
|
337 sources[#sources + 1] = new_ip(addr, "IPv6"); |
4602
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
338 end |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
339 else |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
340 sources[#sources + 1] = new_ip(source, (source:find(":") and "IPv6") or "IPv4"); |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
341 end |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
342 end |
4922
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
343 for i = 1,#sources do |
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
344 if sources[i].proto == "IPv6" then |
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
345 has_ipv6 = true; |
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
346 elseif sources[i].proto == "IPv4" then |
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
347 has_ipv4 = true; |
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
348 end |
d1fdc545f8b2
mod_s2s: Only do AAAA lookup if IPv6 is available, and A if IPv4 is available.
Kim Alvefur <zash@zash.se>
parents:
4906
diff
changeset
|
349 end |
4602
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
350 end); |
ba898af15de5
mod_s2s: Collect s2s sources from portmanager and get local address if necessary
Florian Zeitz <florob@babelmonkeys.de>
parents:
4599
diff
changeset
|
351 |
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
352 return s2sout; |