Merge 0.6->0.7
authorMatthew Wild <mwild1@gmail.com>
Thu, 18 Mar 2010 01:25:50 +0000 (01:25 +0000)
committerMatthew Wild <mwild1@gmail.com>
Thu, 18 Mar 2010 01:25:50 +0000 (01:25 +0000)
1  2 
core/s2smanager.lua
plugins/mod_compression.lua

Simple merge
index fe1e0c675dee274d415b5f9f67761c99725f141e,3ef5a1f3a1379ae61da4bd256b3bb60911c68c80..c2e84f2b022b73892cf062997caac8ae488678d1
@@@ -41,8 -169,8 +169,8 @@@ module:add_handler({"c2s_unauthed", "c2
                        -- fail if we are already compressed
                        if session.compressed then
                                local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed");
-                               session.send(error_st);
+                               (session.sends2s or session.send)(error_st);
 -                              session.log("warn", "Tried to establish another compression layer.");
 +                              session.log("debug", "Client tried to establish another compression layer.");
                                return;
                        end
                        
                        local method = stanza:child_with_name("method");
                        method = method and (method[1] or "");
                        if method == "zlib" then
 -                              session.log("debug", "%s compression selected.", tostring(method));
++                              session.log("debug", "zlib compression enabled.");
+                               
                                -- create deflate and inflate streams
-                               local status, deflate_stream = pcall(zlib.deflate, compression_level);
-                               if status == false then
-                                       local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed");
-                                       session.send(error_st);
-                                       session.log("error", "Failed to create zlib.deflate filter.");
-                                       module:log("error", "%s", tostring(deflate_stream));
-                                       return
-                               end
+                               local deflate_stream = get_deflate_stream(session);
+                               if not deflate_stream then return end
                                
-                               local status, inflate_stream = pcall(zlib.inflate);
-                               if status == false then
-                                       local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed");
-                                       session.send(error_st);
-                                       session.log("error", "Failed to create zlib.inflate filter.");
-                                       module:log("error", "%s", tostring(inflate_stream));
-                                       return
-                               end
+                               local inflate_stream = get_inflate_stream(session);
+                               if not inflate_stream then return end
                                
-                               session.log("debug", "zlib compression enabled.");
-                               session.send(st.stanza("compressed", {xmlns=xmlns_compression_protocol}));
+                               (session.sends2s or session.send)(st.stanza("compressed", {xmlns=xmlns_compression_protocol}));
                                session:reset_stream();
-                               -- setup compression for session.w
-                               local old_send = session.send;
                                
-                               session.send = function(t)
-                                               local status, compressed, eof = pcall(deflate_stream, tostring(t), 'sync');
-                                               if status == false then
-                                                       session:close({
-                                                               condition = "undefined-condition";
-                                                               text = compressed;
-                                                               extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed");
-                                                       });
-                                                       module:log("warn", "%s", tostring(compressed));
-                                                       return;
-                                               end
-                                               old_send(compressed);
-                                       end;
+                               -- setup compression for session.w
+                               setup_compression(session, deflate_stream);
                                        
                                -- setup decompression for session.data
-                               local function setup_decompression(session)
-                                       local old_data = session.data
-                                       session.data = function(conn, data)
-                                                       local status, decompressed, eof = pcall(inflate_stream, data);
-                                                       if status == false then
-                                                               session:close({
-                                                                       condition = "undefined-condition";
-                                                                       text = decompressed;
-                                                                       extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed");
-                                                               });
-                                                               module:log("warn", "%s", tostring(decompressed));
-                                                               return;
-                                                       end
-                                                       old_data(conn, decompressed);
-                                               end;
-                               end
-                               setup_decompression(session);
+                               setup_decompression(session, inflate_stream);
                                
                                local session_reset_stream = session.reset_stream;
                                session.reset_stream = function(session)
                                        end;
                                session.compressed = true;
                        elseif method then
 -                              session.log("info", "%s compression selected, but we don't support it.", tostring(method));
 +                              session.log("debug", "%s compression selected, but we don't support it.", tostring(method));
                                local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("unsupported-method");
-                               session.send(error_st);
+                               (session.sends2s or session.send)(error_st);
                        else
-                               session.send(st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"));
+                               (session.sends2s or session.send)(st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"));
                        end
                end
  );