servers/ejabberd.lua

changeset 0
ba1cc6ad649d
child 1
d9d0f9517ca0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servers/ejabberd.lua	Thu Feb 18 16:02:11 2010 +0000
@@ -0,0 +1,38 @@
+function testers.ejabberd()
+	if (test(q_invalid_xml, [=[ id=["']none['"]]=]) or test(q_invalid_xml, " id='%d+'"))
+		and (not test(q_invalid_xml, literal " xml:lang=")) then
+		
+		server_name = "ejabberd";
+		
+		-- Facebook curiosity
+		if test(q_invalid_xml, " id=(.)") == '"' then
+			server_comment "Appears to be Facebook's variant of ejabberd";
+		end
+		
+		local hostname = test(q_invalid_xml, [=[from=["']([^"']+)]=]);
+		if not hostname then
+			server_comment "The server did not return a hostname, odd.";
+		else
+			local stream_open = [[<stream:stream xmlns=']]..default_namespace..[[' 
+				xmlns:stream='http://etherx.jabber.org/streams' version='1.0' id='abc' to=']]..hostname..[['>]];
+			
+			if not test(stream_open.."<message/>", ":features>$") then -- Oops, not ejabberd
+				debug("Oops, not ejabberd (please report):", test(stream_open.."<message/>", ".*"));
+				server_name = nil;
+				return;
+			end
+			
+			if test(q_invalid_xml, " id='%d+'") then
+				server_min_version = "2.1.x";
+			elseif test(stream_open, literal "<compression ") then -- Only in 2.x
+				server_min_version = "2.0.x";
+			elseif test(stream_open, "") then
+				server_min_version = "1.x.x";
+			else
+				server_comment "The server did not reply when we tried to open a stream";
+			end
+			
+		end
+	end
+end
+

mercurial