140 local conn_name = "s2sout"..tostring(host_session):match("[a-f0-9]*$"); |
140 local conn_name = "s2sout"..tostring(host_session):match("[a-f0-9]*$"); |
141 log = logger_init(conn_name); |
141 log = logger_init(conn_name); |
142 host_session.log = log; |
142 host_session.log = log; |
143 end |
143 end |
144 |
144 |
|
145 -- This is the first call, can't fail (the first step is DNS lookup) |
145 attempt_connection(host_session); |
146 attempt_connection(host_session); |
146 |
147 |
147 if not host_session.sends2s then |
148 if not host_session.sends2s then |
148 -- A sends2s which buffers data (until the stream is opened) |
149 -- A sends2s which buffers data (until the stream is opened) |
149 -- note that data in this buffer will be sent before the stream is authed |
150 -- note that data in this buffer will be sent before the stream is authed |
193 end |
194 end |
194 else |
195 else |
195 log("debug", to_host.." has no SRV records, falling back to A"); |
196 log("debug", to_host.." has no SRV records, falling back to A"); |
196 end |
197 end |
197 -- Try with SRV, or just the plain hostname if no SRV |
198 -- Try with SRV, or just the plain hostname if no SRV |
198 return try_connect(host_session, connect_host, connect_port); |
199 local ok, err = try_connect(host_session, connect_host, connect_port); |
|
200 if not ok then |
|
201 if not attempt_connection(host_session, err) then |
|
202 -- No more attempts will be made |
|
203 destroy_session(host_session); |
|
204 end |
|
205 end |
199 end, "_xmpp-server._tcp."..connect_host..".", "SRV"); |
206 end, "_xmpp-server._tcp."..connect_host..".", "SRV"); |
200 |
207 |
201 -- Set handler for DNS timeout |
208 -- Set handler for DNS timeout |
202 add_task(dns_timeout, function () |
209 add_task(dns_timeout, function () |
203 if handle then |
210 if handle then |
237 |
244 |
238 conn:settimeout(0); |
245 conn:settimeout(0); |
239 local success, err = conn:connect(connect_host, connect_port); |
246 local success, err = conn:connect(connect_host, connect_port); |
240 if not success and err ~= "timeout" then |
247 if not success and err ~= "timeout" then |
241 log("warn", "s2s connect() to %s (%s:%d) failed: %s", host_session.to_host, connect_host, connect_port, err); |
248 log("warn", "s2s connect() to %s (%s:%d) failed: %s", host_session.to_host, connect_host, connect_port, err); |
242 return false; |
249 return false, err; |
243 end |
250 end |
244 |
251 |
245 local cl = connlisteners_get("xmppserver"); |
252 local cl = connlisteners_get("xmppserver"); |
246 conn = wrapclient(conn, connect_host, connect_port, cl, cl.default_mode or 1, hosts[from_host].ssl_ctx, false ); |
253 conn = wrapclient(conn, connect_host, connect_port, cl, cl.default_mode or 1, hosts[from_host].ssl_ctx, false ); |
247 host_session.conn = conn; |
254 host_session.conn = conn; |