Merge 0.10->trunk
[prosody.git] / plugins / mod_compression.lua
index e4e521b7dbc1dbd6ff710acdc7e754fcec0297c3..d49e388058a12666f21330669efb566cc8dd3513 100644 (file)
@@ -27,14 +27,12 @@ end
 module:hook("stream-features", function(event)
        local origin, features = event.origin, event.features;
        if not origin.compressed and origin.type == "c2s" then
-               -- FIXME only advertise compression support when TLS layer has no compression enabled
                features:add_child(compression_stream_feature);
        end
 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 and origin.type == "s2sin" then
                features:add_child(compression_stream_feature);
        end
@@ -48,8 +46,8 @@ module:hook_stanza(xmlns_stream, "features",
                                local comp_st = stanza:get_child("compression", xmlns_compression_feature);
                                if comp_st then
                                        -- do we support the mechanism
-                                       for a in comp_st:children() do
-                                               local algorithm = a[1]
+                                       for a in comp_st:childtags("method") do
+                                               local algorithm = a:get_text();
                                                if algorithm == "zlib" then
                                                        session.sends2s(st.stanza("compress", {xmlns=xmlns_compression_protocol}):tag("method"):text("zlib"))
                                                        session.log("debug", "Enabled compression using zlib.")
@@ -147,6 +145,12 @@ module:hook("stanza/http://jabber.org/protocol/compress:compressed", function(ev
        end
 end);
 
+module:hook("stanza/http://jabber.org/protocol/compress:failure", function(event)
+       local err = event.stanza:get_child();
+       (event.origin.log or module._log)("warn", "Compression setup failed (%s)", err and err.name or "unknown reason");
+       return true;
+end);
+
 module:hook("stanza/http://jabber.org/protocol/compress:compress", function(event)
        local session, stanza = event.origin, event.stanza;