Mercurial > prosody-hg
comparison core/s2smanager.lua @ 1492:aaeccebad0f3
s2smanager: Fix to correctly bounce stanzas if first connection attempt fails instantly
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 08 Jul 2009 03:14:12 +0100 |
| parents | 83b297a412a2 |
| children | 841d61be198f |
comparison
equal
deleted
inserted
replaced
| 1491:694a0a00e1a5 | 1492:aaeccebad0f3 |
|---|---|
| 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; |
