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="))
and not test(q_invalid_xml, " id=(.)") == '"' then
server_name = "ejabberd";
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>$")
-- Below for ejabberd requiring STARTTLS
and not test(stream_open.."<message/>", literal ":features><stream:error><policy-violation ") then
if test(stream_open, literal " from='dummyhost'") then
server_min_version = "1.x.x";
else
debug("Oops, not ejabberd (please report):", test(stream_open.."<message/>", ".*"));
server_name = nil;
end
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.1.4";
else
server_comment "The server did not reply when we tried to open a stream";
end
end
end
end