Comparison

plugins/s2s/s2sout.lib.lua @ 4569:34b1122126f6

s2sout.lib: import utils/functionality once in s2smanager.
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 24 Feb 2012 15:24:10 +0000
parent 4555:3dce04129693
child 4570:9612abc89dd1
comparison
equal deleted inserted replaced
4568:aae7a62671de 4569:34b1122126f6
6 -- COPYING file in the source package for more information. 6 -- COPYING file in the source package for more information.
7 -- 7 --
8 8
9 --- Module containing all the logic for connecting to a remote server 9 --- Module containing all the logic for connecting to a remote server
10 10
11 local t_insert = table.insert;
12 local t_sort = table.sort;
13 local ipairs = ipairs;
14
15 local wrapclient = require "net.server".wrapclient;
11 local initialize_filters = require "util.filters".initialize; 16 local initialize_filters = require "util.filters".initialize;
12 local idna_to_ascii = require "util.encodings".idna.to_ascii; 17 local idna_to_ascii = require "util.encodings".idna.to_ascii;
13 local add_task = require "util.timer".add_task; 18 local add_task = require "util.timer".add_task;
19 local st = require "util.stanza";
20 local new_ip = require "util.ip".new_ip;
21 local rfc3484_dest = require "util.rfc3484".destination;
14 local socket = require "socket"; 22 local socket = require "socket";
15 23
24 local s2s_new_outgoing = require "core.s2smanager".new_outgoing;
16 local s2s_destroy_session = require "core.s2smanager".destroy_session; 25 local s2s_destroy_session = require "core.s2smanager".destroy_session;
26
27 local cfg_sources = config.get("*", "core", "s2s_interfaces") or socket.local_addresses();
17 28
18 local s2sout = {}; 29 local s2sout = {};
19 30
20 local s2s_listener; 31 local s2s_listener;
21 32
34 from=from, to=to, version='1.0', ["xml:lang"]='en'}):top_tag()); 45 from=from, to=to, version='1.0', ["xml:lang"]='en'}):top_tag());
35 end 46 end
36 47
37 function s2sout.initiate_connection(host_session) 48 function s2sout.initiate_connection(host_session)
38 initialize_filters(host_session); 49 initialize_filters(host_session);
39 session.open_stream = session_open_stream; 50 host_session.open_stream = session_open_stream;
40 51
41 -- Kick the connection attempting machine into life 52 -- Kick the connection attempting machine into life
42 if not s2sout.attempt_connection(host_session) then 53 if not s2sout.attempt_connection(host_session) then
43 -- Intentionally not returning here, the 54 -- Intentionally not returning here, the
44 -- session is needed, connected or not 55 -- session is needed, connected or not
145 end 156 end
146 end 157 end
147 end 158 end
148 159
149 function s2sout.try_connect(host_session, connect_host, connect_port, err) 160 function s2sout.try_connect(host_session, connect_host, connect_port, err)
161 local sources;
150 host_session.connecting = true; 162 host_session.connecting = true;
151 163
152 if not err then 164 if not err then
153 local IPs = {}; 165 local IPs = {};
154 host_session.ip_hosts = IPs; 166 host_session.ip_hosts = IPs;
155 local handle4, handle6; 167 local handle4, handle6;
156 local has_other = false; 168 local has_other = false;
157 169
158 if not sources then 170 if not sources then
159 sources = {}; 171 sources = {};
160 for i, source in ipairs(cfg_sources) do 172 for i, source in ipairs(cfg_sources) do
161 if source == "*" then 173 if source == "*" then
162 sources[i] = new_ip("0.0.0.0", "IPv4"); 174 sources[i] = new_ip("0.0.0.0", "IPv4");
163 else 175 else
164 sources[i] = new_ip(source, (source:find(":") and "IPv6") or "IPv4"); 176 sources[i] = new_ip(source, (source:find(":") and "IPv6") or "IPv4");