From 174997d348dce80b22b18c3265bc1abd9f87f688 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Fri, 4 May 2012 01:50:17 +0100
Subject: mod_s2s: Become a shared module (yay)

---
 plugins/mod_s2s/mod_s2s.lua | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/plugins/mod_s2s/mod_s2s.lua b/plugins/mod_s2s/mod_s2s.lua
index 649cd595..57564226 100644
--- a/plugins/mod_s2s/mod_s2s.lua
+++ b/plugins/mod_s2s/mod_s2s.lua
@@ -67,7 +67,8 @@ local function bounce_sendq(session, reason)
 	session.sendq = nil;
 end
 
-module:hook("route/remote", function (event)
+-- Handles stanzas to existing s2s sessions
+function route_to_existing_session(event)
 	local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza;
 	if not hosts[from_host] then
 		log("warn", "Attempt to send stanza from %s - a host we don't serve", from_host);
@@ -101,9 +102,10 @@ module:hook("route/remote", function (event)
 			return true;
 		end
 	end
-end, 200);
+end
 
-module:hook("route/remote", function (event)
+-- Create a new outgoing session for a stanza
+function route_to_new_session(event)
 	local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza;
 	log("debug", "opening a new outgoing connection for this stanza");
 	local host_session = s2s_new_outgoing(from_host, to_host);
@@ -119,7 +121,15 @@ module:hook("route/remote", function (event)
 		return false;
 	end
 	return true;
-end, 100);
+end
+
+function module.add_host(module)
+	if module:get_option_boolean("disallow_s2s", false) then
+		return nil, "This host has disallow_s2s set";
+	end
+	module:hook("route/remote", route_to_existing_session, 200);
+	module:hook("route/remote", route_to_new_session, 100);
+end
 
 --- Helper to check that a session peer's certificate is valid
 local function check_cert_status(session)
-- 
cgit v1.2.3