aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2009-08-18 22:00:37 +0200
committerTobias Markmann <tm@ayena.de>2009-08-18 22:00:37 +0200
commit20d9c7ea6df498f5ee32533c5c3fd347bfafda42 (patch)
treed3cb12cb13dac1be96fe52ac190993f3364219e7
parentf74df67a5d6393ee3a8d6714a03f718f36177577 (diff)
downloadprosody-20d9c7ea6df498f5ee32533c5c3fd347bfafda42.tar.gz
prosody-20d9c7ea6df498f5ee32533c5c3fd347bfafda42.zip
Don't allow double compression.
-rw-r--r--plugins/mod_compression.lua11
1 files changed, 9 insertions, 2 deletions
diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua
index 14265025..7e53a5e5 100644
--- a/plugins/mod_compression.lua
+++ b/plugins/mod_compression.lua
@@ -37,6 +37,13 @@ module:add_event_hook("stream-features",
-- TODO Support compression on S2S level too.
module:add_handler({"c2s_unauthed", "c2s_authed"}, "compress", xmlns_compression_protocol,
function(session, stanza)
+ -- fail if we are already compressed
+ if session.compressed then
+ local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method");
+ session.send(error_st);
+ session:log("warn", "Tried to establish another compression layer.");
+ end
+
-- checking if the compression method is supported
local method = stanza:child_with_name("method")[1];
if method == "zlib" then
@@ -74,7 +81,7 @@ module:add_handler({"c2s_unauthed", "c2s_authed"}, "compress", xmlns_compression
text = compressed;
extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed");
});
- module:log("error", compressed);
+ module:log("warn", compressed);
return;
end
old_send(compressed);
@@ -91,7 +98,7 @@ module:add_handler({"c2s_unauthed", "c2s_authed"}, "compress", xmlns_compression
text = decompressed;
extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed");
});
- module:log("error", decompressed);
+ module:log("warn", decompressed);
return;
end
old_data(conn, decompressed);