Diff

mod_srvinjection/mod_srvinjection.lua @ 96:c1f4edf3bea7

mod_srvinjection: Initial commit.
author Waqas Hussain <waqas20@gmail.com>
date Mon, 23 Nov 2009 21:38:43 +0500
child 99:2d03350613c4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_srvinjection/mod_srvinjection.lua	Mon Nov 23 21:38:43 2009 +0500
@@ -0,0 +1,40 @@
+
+module.host = "*";
+
+local adns = require "net.adns";
+
+local map = module:get_option("srvinjection") or {};
+
+for host, mapping in pairs(map) do
+	if type(mapping) == "table" and type(mapping[1]) == "string" and (type(mapping[2]) == "number") then
+		local connecthost, connectport = mapping[1], mapping[2] or 5269;
+		map[host] = {{
+			srv = {
+				target = connecthost..".";
+				port = connectport;
+				priority = 1;
+				weight = 0;
+			};
+		}};
+	else
+		module:log("warn", "Ignoring invalid SRV injection for host '%s'", host);
+		map[host] = nil;
+	end
+end
+
+local original_lookup = adns.lookup;
+function adns.lookup(handler, qname, qtype, qclass)
+	if qtype == "SRV" then
+		local host = qname:match("^_xmpp%-server%._tcp%.(.*)%.$");
+		local mapping = map[host];
+		if mapping then
+			handler(mapping);
+			return;
+		end
+	end
+	return original_lookup(handler, qname, qtype, qclass);
+end
+
+function module.unload()
+	adns.lookup = original_lookup;
+end