s2smanager: Have both destroy_session and bounce_sendq accept a reason string to include in bounced stanzas
authorMatthew Wild <mwild1@gmail.com>
Thu, 17 Dec 2009 18:59:29 +0000
changeset 2781 4b5881b6bbfc
parent 2780 f8232abcab2a
child 2782 71e6c13f6e08
s2smanager: Have both destroy_session and bounce_sendq accept a reason string to include in bounced stanzas
core/s2smanager.lua
--- a/core/s2smanager.lua	Thu Dec 17 21:36:31 2009 +0000
+++ b/core/s2smanager.lua	Thu Dec 17 18:59:29 2009 +0000
@@ -54,7 +54,7 @@
 	return a.priority < b.priority or (a.priority == b.priority and a.weight > b.weight);
 end
 
-local function bounce_sendq(session)
+local function bounce_sendq(session, reason)
 	local sendq = session.sendq;
 	if sendq then
 		session.log("info", "sending error replies for "..#sendq.." queued stanzas because of failed outgoing connection to "..tostring(session.to_host));
@@ -72,6 +72,9 @@
 				reply.attr.type = "error";
 				reply:tag("error", {type = "cancel"})
 					:tag("remote-server-not-found", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):up();
+				if reason then
+					reply:tag("text", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}):text("Connection failed: "..reason):up();
+				end
 				core_process_stanza(dummy, reply);
 			end
 			sendq[i] = nil;
@@ -491,12 +494,12 @@
 	end
 end
 
-function destroy_session(session)
+function destroy_session(session, reason)
 	(session.log or log)("info", "Destroying "..tostring(session.direction).." session "..tostring(session.from_host).."->"..tostring(session.to_host));
 	
 	if session.direction == "outgoing" then
 		hosts[session.from_host].s2sout[session.to_host] = nil;
-		bounce_sendq(session);
+		bounce_sendq(session, reason);
 	elseif session.direction == "incoming" then
 		incoming_s2s[session] = nil;
 	end