s2smanager: Queue db:verify unless we already sent a db:result (if we had then it can could a dialback deadlock). Also remove some redundant code which could cause a db:result to be sent while still negotiating features (e.g. TLS) and break things. Collectively these fix a 'random' s2s failure (usually with ejabberd for some reason) - resulting in an 'unbound prefix' XML error, or 'ssl handshake failure'. Was this commit message long enough? I think so.

Fri, 20 Nov 2009 04:39:54 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Fri, 20 Nov 2009 04:39:54 +0000
changeset 2089
fdd7280c4621
parent 2088
5a9dc066a388
child 2090
7810648ea26d

s2smanager: Queue db:verify unless we already sent a db:result (if we had then it can could a dialback deadlock). Also remove some redundant code which could cause a db:result to be sent while still negotiating features (e.g. TLS) and break things. Collectively these fix a 'random' s2s failure (usually with ejabberd for some reason) - resulting in an 'unbound prefix' XML error, or 'ssl handshake failure'. Was this commit message long enough? I think so.

core/s2smanager.lua file | annotate | diff | comparison | revisions
--- a/core/s2smanager.lua	Wed Nov 18 03:35:42 2009 +0000
+++ b/core/s2smanager.lua	Fri Nov 20 04:39:54 2009 +0000
@@ -82,12 +82,8 @@
 	local host = hosts[from_host].s2sout[to_host];
 	if host then
 		-- We have a connection to this host already
-		if host.type == "s2sout_unauthed" and data.name ~= "db:verify" and ((not data.xmlns) or data.xmlns == "jabber:client" or data.xmlns == "jabber:server") then
+		if host.type == "s2sout_unauthed" and (data.name ~= "db:verify" or not host.dialback_key) and ((not data.xmlns) or data.xmlns == "jabber:client" or data.xmlns == "jabber:server") then
 			(host.log or log)("debug", "trying to send over unauthed s2sout to "..to_host);
-			if not host.notopen and not host.dialback_key and host.sends2s then
-				host.log("debug", "dialback had not been initiated");
-				initiate_dialback(host);
-			end
 			
 			-- Queue stanza until we are able to send it
 			if host.sendq then t_insert(host.sendq, {tostring(data), st.reply(data)});

mercurial