X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=plugins%2Fmod_compression.lua;h=928560993bcd367d61cdd45c106a69365b08235e;hb=e82fb2fc8cc4fa8d3cc6b545dc56971022bcb40b;hp=82403016d9e936c47503a18e21ca863f5dede10d;hpb=c72eea870ae98d356e03636a40f6cff16c2f6da1;p=prosody.git diff --git a/plugins/mod_compression.lua b/plugins/mod_compression.lua index 82403016..92856099 100644 --- a/plugins/mod_compression.lua +++ b/plugins/mod_compression.lua @@ -1,5 +1,5 @@ -- Prosody IM --- Copyright (C) 2009 Tobias Markmann +-- Copyright (C) 2009-2012 Tobias Markmann -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. @@ -16,12 +16,8 @@ local xmlns_stream = "http://etherx.jabber.org/streams"; local compression_stream_feature = st.stanza("compression", {xmlns=xmlns_compression_feature}):tag("method"):text("zlib"):up(); local add_filter = require "util.filters".add_filter; -local compression_level = module:get_option("compression_level"); --- if not defined assume admin wants best compression -if compression_level == nil then compression_level = 9 end; +local compression_level = module:get_option_number("compression_level", 7); - -compression_level = tonumber(compression_level); if not compression_level or compression_level < 1 or compression_level > 9 then module:log("warn", "Invalid compression level in config: %s", tostring(compression_level)); module:log("warn", "Module loading aborted. Compression won't be available."); @@ -30,7 +26,7 @@ end module:hook("stream-features", function(event) local origin, features = event.origin, event.features; - if not origin.compressed then + if not origin.compressed and (origin.type == "c2s" or origin.type == "s2sin" or origin.type == "s2sout") then -- FIXME only advertise compression support when TLS layer has no compression enabled features:add_child(compression_stream_feature); end @@ -39,7 +35,7 @@ end); module:hook("s2s-stream-features", function(event) local origin, features = event.origin, event.features; -- FIXME only advertise compression support when TLS layer has no compression enabled - if not origin.compressed then + if not origin.compressed and (origin.type == "c2s" or origin.type == "s2sin" or origin.type == "s2sout") then features:add_child(compression_stream_feature); end end); @@ -47,7 +43,7 @@ end); -- Hook to activate compression if remote server supports it. module:hook_stanza(xmlns_stream, "features", function (session, stanza) - if not session.compressed then + if not session.compressed and (session.type == "c2s" or session.type == "s2sin" or session.type == "s2sout") then -- does remote server support compression? local comp_st = stanza:child_with_name("compression"); if comp_st then @@ -145,10 +141,7 @@ module:hook("stanza/http://jabber.org/protocol/compress:compressed", function(ev -- setup decompression for session.data setup_decompression(session, inflate_stream); session:reset_stream(); - local default_stream_attr = {xmlns = "jabber:server", ["xmlns:stream"] = "http://etherx.jabber.org/streams", - ["xmlns:db"] = 'jabber:server:dialback', version = "1.0", to = session.to_host, from = session.from_host}; - session.sends2s(""); - session.sends2s(st.stanza("stream:stream", default_stream_attr):top_tag()); + session:open_stream(session.from_host, session.to_host); session.compressed = true; return true; end